
import EDU.neu.ccs.demeter.dj.*;

class Main {
  public static void main(String[] args) {
    ClassGraph cg = new ClassGraph(); // constructed from *.java
    A a = new A(new B(new D()), new C());

    // cg.traverse(a, new StrategyGraph("A->D"), new MyVisitor());
    Strategy sg = new Strategy("from A to D");
    TraversalGraph tg = TraversalGraph.compute(cg, sg);


    //Integer res = (Integer)
    tg.traverse(a, new Visitor() {

      public void start() { System.out.println("begin");}
      public void finish() { System.out.println("end"); }
      
      public void before(A o) { System.out.println("before A"); }
      public void after(A o)  { System.out.println("after A"); }
      
      public void before(B o) { System.out.println("before B"); }
      public void after(B o)  { System.out.println("after B"); }
      
      public void before(C o) { System.out.println("before C"); }
      public void after(C o)  { System.out.println("after C"); }
      
      public void before(D o) { System.out.println("before D"); }
      public void after(D o)  { System.out.println("after D"); }

      //public Object getReturnValue() { return new Integer(1); }

    }); 

    System.out.println("Traversal Graph for from A to D");
    System.out.println(tg);        
    //System.out.println(res);        
  }
}


