package commons.graph.worker;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import commons.graph.Calculator;
import commons.graph.model.Node;
import commons.graph.model.Nodes;
import commons.graph.model.Point;
import basics.utl.SysUtl;
public class RandomVirtualizer extends EdgeWorker
{

Set<String> done = new HashSet<String>();

public void init ()
{
// print(0, graph.getOrigin(), edges.countChildren(graph.getOrigin()), 0);
}

/**
 * Slightely redundant. Consider using specific traversion logic for this.
 */
public void work (String a, String b)
{
   if (done.contains(a)) return;
   Node parent = nodes.getNode(a);
   if (edges.countChildren(a) > 0)
   {
      Nodes nodes = edges.getChildNodes(a);
      for (Iterator<Node> iter = nodes.nodeIterator(); iter.hasNext();)
      {
         Node child = iter.next();
         double radius = edges.distance(parent.label, child.label);
         if (depth > 1)
         {
            int d = (depth - 1) * 3;
            SysUtl.trace("depth: " + depth + " r:" + radius + " --> " + (radius / d));
            radius /= d;
         }
         Point point = Calculator.randomCircularPoint(radius);
         // reposition point in accordance to parent point.
         point.add(parent.x, parent.y);
         child.x = point.x;
         child.y = point.y;
      }
   }
   done.add(a);
}
}
