package commons.graph.worker;
import java.util.Iterator;
import commons.graph.ClickGraph;
import commons.graph.model.Edges;
import commons.graph.model.GraphModelException;
import commons.graph.model.Nodes;
import basics.utl.SysUtl;
public class WorkerController
{

EdgeWorker worker;
ClickGraph graph;
Edges      edges;
Nodes      nodes;

public WorkerController(EdgeWorker w, ClickGraph g, Edges e, Nodes n)
{
   worker = w;
   graph = g;
   edges = e;
   nodes = n;
}

public void start ()
{
   worker.graph(graph);
   worker.edges(edges);
   worker.nodes(nodes);
   worker.init();
   traverse(graph, worker, graph.getOrigin(), 0);
}

int traverse (ClickGraph g, EdgeWorker w, String o, int depth)
{
   int x = g.countSubNodes(o);
   if (x > 0)
   {
      depth++;
      Nodes nodes = g.getSubNodes(o);
      for (Iterator<String> iter = nodes.labelIterator(); iter.hasNext();)
      {
         String sn = iter.next();
         try
         {
            w.depth(depth);
            w.work(o, sn);
         }
         catch (GraphModelException e)
         {
            SysUtl.trace("Error while working on edge(" + o + ", " + sn + ")");
            e.printStackTrace();
         }
         depth = traverse(g, w, sn, depth);
      }
      depth--;
   }
   return depth;
}
}
