This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / SafetyAnalysis.java
diff --git a/Robust/src/Analysis/TaskStateAnalysis/SafetyAnalysis.java b/Robust/src/Analysis/TaskStateAnalysis/SafetyAnalysis.java
deleted file mode 100644 (file)
index 8cb1349..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-package Analysis.TaskStateAnalysis;
-import java.util.*;
-import IR.*;
-import IR.Tree.*;
-import IR.Flat.*;
-import java.io.*;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.FileOutputStream;
-import Util.Edge;
-
-public class SafetyAnalysis {
-    private Hashtable executiongraph;
-    private Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> safeexecution; //to use to build code
-    private State state;
-    private TaskAnalysis taskanalysis;
-    private Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors;
-    private Hashtable<FlagState, Hashtable<TaskIndex, Set<OptionalTaskDescriptor>>> fstotimap;
-
-    private ClassDescriptor processedclass;
-   
-    public Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> getResult() {
-       return safeexecution;
-    }
-
-    public Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> getOptionalTaskDescriptors() {
-       return optionaltaskdescriptors;
-    }
-
-    /* Structure that stores a possible optional task which would be
-      safe to execute and the possible flagstates the object could be
-      in before executing the task during an execution without
-      failure*/
-         
-    /*Constructor*/
-    public SafetyAnalysis(Hashtable executiongraph, State state, TaskAnalysis taskanalysis) {
-       this.executiongraph = executiongraph;
-       this.safeexecution = new Hashtable();
-       this.state = state;
-       this.taskanalysis = taskanalysis;
-        this.optionaltaskdescriptors = new Hashtable();
-       this.fstotimap=new Hashtable<FlagState, Hashtable<TaskIndex, Set<OptionalTaskDescriptor>>>();
-    }
-    
-    /* Builds map of fs -> EGTasknodes that can fire on fs for class cd */
-
-    private Hashtable<FlagState, Set<EGTaskNode>> buildMap(ClassDescriptor cd) {
-       Hashtable<FlagState, Set<EGTaskNode>> table=new Hashtable<FlagState, Set<EGTaskNode>>();
-       for(Iterator it=((Set)executiongraph.get(cd)).iterator();it.hasNext();) {
-           EGTaskNode node=(EGTaskNode)it.next();
-           if (node.getFS()!=null) {
-               if (!table.containsKey(node.getFS()))
-                   table.put(node.getFS(), new HashSet<EGTaskNode>());
-               table.get(node.getFS()).add(node);
-           }
-       }
-       return table;
-    }
-
-
-    public Set<OptionalTaskDescriptor> getOptions(FlagState fs, TaskDescriptor td, int index) {
-       return fstotimap.get(fs).get(new TaskIndex(td, index));
-    }
-
-    public Set<OptionalTaskDescriptor> getOptions(FlagState fs, TaskIndex ti) {
-       return fstotimap.get(fs).get(ti);
-    }
-
-    public Set<TaskIndex> getTaskIndex(FlagState fs) {
-       return fstotimap.get(fs).keySet();
-    }
-
-
-    /* Builds map of fs -> set of fs that depend on this fs */
-
-    private Hashtable<FlagState, Set<FlagState>> buildUseMap(ClassDescriptor cd) {
-       Hashtable<FlagState, Set<FlagState>> table=new Hashtable<FlagState, Set<FlagState>>();
-       for(Iterator it=((Set)executiongraph.get(cd)).iterator();it.hasNext();) {
-           EGTaskNode node=(EGTaskNode)it.next();
-           if (node.getFS()!=null) {
-               if (!table.containsKey(node.getPostFS()))
-                   table.put(node.getPostFS(), new HashSet<FlagState>());
-               table.get(node.getPostFS()).add(node.getFS());
-           }
-       }
-       return table;
-    }
-
-    public void doAnalysis() {
-       Enumeration classit=taskanalysis.flagstates.keys();
-       
-       while (classit.hasMoreElements()) {
-           ClassDescriptor cd=(ClassDescriptor)classit.nextElement();
-           if (!executiongraph.containsKey(cd))
-               continue;
-           Hashtable<FlagState, Set<OptionalTaskDescriptor>> fstootd=new Hashtable<FlagState, Set<OptionalTaskDescriptor>>();
-           safeexecution.put(cd, fstootd);
-
-           optionaltaskdescriptors.put(cd, new Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>());
-
-           Hashtable<FlagState, Set<EGTaskNode>> fstoegmap=buildMap(cd);
-           Hashtable<FlagState, Set<FlagState>> fsusemap=buildUseMap(cd);
-           
-           HashSet<FlagState> tovisit=new HashSet<FlagState>();
-           tovisit.addAll(taskanalysis.getFlagStates(cd));
-
-           while(!tovisit.isEmpty()) {
-               FlagState fs=tovisit.iterator().next();
-               tovisit.remove(fs);
-               if (!fstoegmap.containsKey(fs))
-                   continue;//This FS has no task that can trigger on it
-               Set<EGTaskNode> nodeset=fstoegmap.get(fs);
-               analyzeFS(fs, nodeset, fstootd, fsusemap, tovisit);
-           }
-       }
-       printTEST();
-    }
-
-    public void analyzeFS(FlagState fs, Set<EGTaskNode> egset, Hashtable<FlagState, Set<OptionalTaskDescriptor>> fstootd, Hashtable<FlagState, Set<FlagState>> fsusemap, HashSet<FlagState> tovisit) {
-       Hashtable<TaskIndex, Set<OptionalTaskDescriptor>>  timap=new Hashtable<TaskIndex, Set<OptionalTaskDescriptor>>();
-
-       for(Iterator<EGTaskNode> egit=egset.iterator();egit.hasNext();) {
-           EGTaskNode egnode=egit.next();
-           Set<OptionalTaskDescriptor> setotd;
-           if (egnode.isOptional()) {
-               setotd=new HashSet<OptionalTaskDescriptor>();
-               HashSet<FlagState> enterfsset=new HashSet<FlagState>();
-               enterfsset.add(fs);
-               ClassDescriptor cd=fs.getClassDescriptor();
-               OptionalTaskDescriptor newotd=new OptionalTaskDescriptor(egnode.getTD(), egnode.getIndex(), enterfsset, new Predicate());
-               if(optionaltaskdescriptors.get(cd).containsKey(newotd)) {
-                   newotd = optionaltaskdescriptors.get(cd).get(newotd);
-               } else {
-                   newotd.setuid();
-                   resultingFS(newotd);
-                   optionaltaskdescriptors.get(cd).put(newotd, newotd);
-               }
-               setotd.add(newotd);
-           } else if (tagChange(egnode)) {
-               //Conservatively handle tag changes
-               setotd=new HashSet<OptionalTaskDescriptor>();
-           } else if(egnode.isMultipleParams()) {
-               if( goodMultiple(egnode)){                      
-                   Predicate p=returnPredicate(egnode);
-                   Set<OptionalTaskDescriptor> oldsetotd;
-                   if (fstootd.containsKey(egnode.getPostFS()))
-                       oldsetotd=fstootd.get(egnode.getPostFS());
-                   else
-                       oldsetotd=new HashSet<OptionalTaskDescriptor>();
-                   setotd=new HashSet<OptionalTaskDescriptor>();
-                   for(Iterator<OptionalTaskDescriptor> otdit=oldsetotd.iterator();otdit.hasNext();) {
-                       OptionalTaskDescriptor oldotd=otdit.next();
-                       Predicate newp=combinePredicates(oldotd.predicate, p);
-                       OptionalTaskDescriptor newotd=new OptionalTaskDescriptor(oldotd.td, oldotd.getIndex(), oldotd.enterflagstates, newp);
-                       ClassDescriptor cd=fs.getClassDescriptor();
-                       if(optionaltaskdescriptors.get(cd).containsKey(newotd)) {
-                           newotd = optionaltaskdescriptors.get(cd).get(newotd);
-                       } else {
-                           newotd.setuid();
-                           resultingFS(newotd);
-                           optionaltaskdescriptors.get(cd).put(newotd, newotd);
-                       }
-                       setotd.add(newotd);
-                   }
-               } else {
-                   //Can't propagate anything
-                   setotd=new HashSet<OptionalTaskDescriptor>();
-               }
-           } else {
-               if (fstootd.containsKey(egnode.getPostFS()))
-                   setotd=fstootd.get(egnode.getPostFS());
-               else
-                   setotd=new HashSet<OptionalTaskDescriptor>();
-           }
-           TaskIndex ti=egnode.isRuntime()?new TaskIndex():new TaskIndex(egnode.getTD(), egnode.getIndex());
-           if (!ti.runtime) {
-               //runtime edges don't do anything...don't have to take them, can't predict when we can.
-               if (timap.containsKey(ti)) {
-                   //AND case
-                   timap.put(ti, createIntersection(timap.get(ti), setotd, fs.getClassDescriptor()));
-               } else {
-                   timap.put(ti, setotd);
-               }
-           }
-       }
-
-       //Combine all options
-       HashSet<OptionalTaskDescriptor> set=new HashSet<OptionalTaskDescriptor>();
-       for(Iterator<Set<OptionalTaskDescriptor>> it=timap.values().iterator();it.hasNext();) {
-           Set<OptionalTaskDescriptor> otdset=it.next();
-           set.addAll(otdset);
-       }
-
-       if (!fstootd.containsKey(fs)||
-           !fstootd.get(fs).equals(set)) {
-           fstootd.put(fs, set);
-           //Requeue all flagstates that may use our updated results
-           if (fsusemap.containsKey(fs)) {
-               tovisit.addAll(fsusemap.get(fs));
-           }
-       }
-       fstotimap.put(fs, timap);
-    }
-
-    private HashSet createIntersection(Set A, Set B, ClassDescriptor cd){
-       HashSet result = new HashSet();
-       for(Iterator b_it = B.iterator(); b_it.hasNext();){
-           OptionalTaskDescriptor otd_b = (OptionalTaskDescriptor)b_it.next();
-           for(Iterator a_it = A.iterator(); a_it.hasNext();){
-               OptionalTaskDescriptor otd_a = (OptionalTaskDescriptor)a_it.next();
-               if(otd_a.td==otd_b.td&&
-                  otd_a.getIndex()==otd_b.getIndex()) {
-                   HashSet newfs = new HashSet();
-                   newfs.addAll(otd_a.enterflagstates);
-                   newfs.addAll(otd_b.enterflagstates);
-                   OptionalTaskDescriptor newotd = new OptionalTaskDescriptor(otd_b.td, otd_b.getIndex(), newfs, combinePredicates(otd_a.predicate, otd_b.predicate));
-                   if(optionaltaskdescriptors.get(cd).get(newotd)!=null){
-                       newotd = optionaltaskdescriptors.get(cd).get(newotd);
-                   } else {
-                       newotd.setuid();
-                       resultingFS(newotd);
-                       optionaltaskdescriptors.get(cd).put(newotd, newotd);
-                   }
-                   result.add(newotd);
-               }
-           }
-       }
-       return result;
-    }
-    
-    // This method returns true if the only parameter whose flag is
-    // modified is the tracked one
-
-    private boolean goodMultiple(EGTaskNode tn){
-       TaskDescriptor td = tn.getTD();
-       FlatMethod fm = state.getMethodFlat(td);
-       TempDescriptor tmp=fm.getParameter(tn.getIndex());
-
-       Set<FlatNode> nodeset=fm.getNodeSet();
-
-       for(Iterator<FlatNode> nodeit=nodeset.iterator();nodeit.hasNext();) {
-           FlatNode fn=nodeit.next();
-           if (fn.kind()==FKind.FlatFlagActionNode) {
-               FlatFlagActionNode ffan=(FlatFlagActionNode)fn;
-               if (ffan.getTaskType() == FlatFlagActionNode.TASKEXIT) {
-                   for(Iterator it_tfp=ffan.getTempFlagPairs();it_tfp.hasNext();) {
-                       TempFlagPair tfp=(TempFlagPair)it_tfp.next();
-                       TempDescriptor tempd = tfp.getTemp();
-                       if(tempd!=tmp)
-                           return false; //return false if a taskexit modifies one of the other parameters
-                   }
-               }
-           }
-       }
-       return true;
-    }
-    
-    private Predicate returnPredicate(EGTaskNode tn){
-       Predicate result = new Predicate();
-       TaskDescriptor td = tn.getTD();
-       for(int i=0; i<td.numParameters(); i++) {
-           if(i!=tn.getIndex()) {
-               VarDescriptor vd = td.getParameter(i);
-               result.vardescriptors.add(vd);
-               HashSet<FlagExpressionNode> flaglist = new HashSet<FlagExpressionNode>();
-               flaglist.add(td.getFlag(vd));
-               result.flags.put(vd, flaglist);
-               if (td.getTag(vd)!=null)
-                   result.tags.put(vd, td.getTag(vd));
-           }
-       }
-       return result;
-    }
-    
-    private Predicate combinePredicates(Predicate A, Predicate B){
-       Predicate result = new Predicate();
-       result.vardescriptors.addAll(A.vardescriptors);
-       result.flags.putAll(A.flags);
-       result.tags.putAll(A.tags);
-       Collection c = B.vardescriptors;
-       for(Iterator  varit = c.iterator(); varit.hasNext();){//maybe change that
-           VarDescriptor vd = (VarDescriptor)varit.next();
-           if(result.vardescriptors.contains(vd))
-               System.out.println("Already in ");
-           else {
-               result.vardescriptors.add(vd);
-           }
-       }
-       Collection vardesc = result.vardescriptors;
-       for(Iterator varit = vardesc.iterator(); varit.hasNext();){
-           VarDescriptor vd = (VarDescriptor)varit.next();
-           HashSet bflags = B.flags.get(vd);
-           if( bflags == null ){
-               continue;
-           } else {
-               if (result.flags.containsKey(vd)) 
-                   ((HashSet)result.flags.get(vd)).addAll(bflags);
-               else 
-                   result.flags.put(vd, bflags);
-           }
-           TagExpressionList btags = B.tags.get(vd);
-           if( btags != null ){
-               if (result.tags.containsKey(vd)) 
-                   System.out.println("Tag found but there should be nothing to do because same tag");
-               else 
-                   result.tags.put(vd, btags);
-           }
-       }
-       return result;
-    }
-
-    ////////////////////
-    /* returns a set of the possible sets of flagstates
-       resulting from the execution of the optional task.
-       To do it with have to look for TaskExit FlatNodes
-       in the IR.
-    */
-    private void resultingFS(OptionalTaskDescriptor otd){
-       Stack stack = new Stack();
-       HashSet result = new HashSet();
-       FlatMethod fm = state.getMethodFlat((TaskDescriptor)otd.td);
-       FlatNode fn = (FlatNode)fm;
-       
-       Stack nodestack=new Stack();
-       HashSet discovered=new HashSet();
-       nodestack.push(fm);
-       discovered.add(fm);
-       TempDescriptor temp=fm.getParameter(otd.getIndex());
-       
-       //Iterating through the nodes
-       while(!nodestack.isEmpty()) {
-           FlatNode fn1 = (FlatNode) nodestack.pop();
-           if (fn1.kind()==FKind.FlatFlagActionNode) {
-               FlatFlagActionNode ffan=(FlatFlagActionNode)fn1;
-               if (ffan.getTaskType() == FlatFlagActionNode.TASKEXIT) {
-                   HashSet tempset = new HashSet();
-                   for(Iterator it_fs = otd.enterflagstates.iterator(); it_fs.hasNext();){
-                       FlagState fstemp = (FlagState)it_fs.next();
-                       Vector<FlagState> processed=new Vector<FlagState>();
-                       
-                       for(Iterator it_tfp=ffan.getTempFlagPairs();it_tfp.hasNext();) {
-                           TempFlagPair tfp=(TempFlagPair)it_tfp.next();
-                           if (tfp.getTemp()==temp)
-                               fstemp=fstemp.setFlag(tfp.getFlag(),ffan.getFlagChange(tfp));
-                       }
-                       
-                       processed.add(fstemp);
-                       //Process clears first
-                       
-                       for(Iterator it_ttp=ffan.getTempTagPairs();it_ttp.hasNext();) {
-                           TempTagPair ttp=(TempTagPair)it_ttp.next();
-                           
-                           if (temp==ttp.getTemp()) {
-                               Vector<FlagState> oldprocess=processed;
-                               processed=new Vector<FlagState>();
-                               
-                               for (Enumeration en=oldprocess.elements();en.hasMoreElements();){
-                                   FlagState fsworking=(FlagState)en.nextElement();
-                                   if (!ffan.getTagChange(ttp)){
-                                       processed.addAll(Arrays.asList(fsworking.clearTag(ttp.getTag())));
-                                   } else processed.add(fsworking);
-                               }
-                           }
-                       }
-                       //Process sets next
-                       for(Iterator it_ttp=ffan.getTempTagPairs();it_ttp.hasNext();) {
-                           TempTagPair ttp=(TempTagPair)it_ttp.next();
-                           
-                           if (temp==ttp.getTemp()) {
-                               Vector<FlagState> oldprocess=processed;
-                               processed=new Vector<FlagState>();
-                               
-                               for (Enumeration en=oldprocess.elements();en.hasMoreElements();){
-                                   FlagState fsworking=(FlagState)en.nextElement();
-                                   if (ffan.getTagChange(ttp)){
-                                       processed.addAll(Arrays.asList(fsworking.setTag(ttp.getTag())));
-                                   } else processed.add(fsworking);
-                               }
-                           }
-                       }
-                       //Add to exit states
-                       tempset.addAll(processed);
-                   }
-                   result.add(tempset);
-                   continue; // avoid queueing the return node if reachable
-               }
-           } else if (fn1.kind()==FKind.FlatReturnNode) {
-               result.add(otd.enterflagstates);
-           }
-           
-           /* Queue other nodes past this one */
-           for(int i=0;i<fn1.numNext();i++) {
-               FlatNode fnext=fn1.getNext(i);
-               if (!discovered.contains(fnext)) {
-                   discovered.add(fnext);
-                   nodestack.push(fnext);
-               }
-           }
-       }
-       otd.exitfses=result;
-    }
-
-    private void printTEST(){
-       Enumeration e = safeexecution.keys();
-       while (e.hasMoreElements()) {
-           ClassDescriptor cdtemp=(ClassDescriptor)e.nextElement();
-           System.out.println("\nTesting class : "+cdtemp.getSymbol()+"\n");
-           Hashtable hashtbtemp = safeexecution.get(cdtemp);
-           Enumeration fses = hashtbtemp.keys();
-           while(fses.hasMoreElements()){
-               FlagState fs = (FlagState)fses.nextElement();
-               System.out.println("\t"+fs.getTextLabel()+"\n\tSafe tasks to execute :\n");
-               HashSet availabletasks = (HashSet)hashtbtemp.get(fs);
-               for(Iterator otd_it = availabletasks.iterator(); otd_it.hasNext();){
-                   OptionalTaskDescriptor otd = (OptionalTaskDescriptor)otd_it.next();
-                   System.out.println("\t\tTASK "+otd.td.getSymbol()+" UID : "+otd.getuid()+"\n");
-                   System.out.println("\t\twith flags :");
-                   for(Iterator myfses = otd.enterflagstates.iterator(); myfses.hasNext();){
-                       System.out.println("\t\t\t"+((FlagState)myfses.next()).getTextLabel());
-                   }
-                   System.out.println("\t\tand exitflags :");
-                   for(Iterator fseshash = otd.exitfses.iterator(); fseshash.hasNext();){
-                       HashSet temphs = (HashSet)fseshash.next();
-                       System.out.println("");
-                       for(Iterator exfses = temphs.iterator(); exfses.hasNext();){
-                           System.out.println("\t\t\t"+((FlagState)exfses.next()).getTextLabel());
-                       }
-                   }
-                   Predicate predicate = otd.predicate;
-                   System.out.println("\t\tPredicate constraints :");
-                   Collection c = predicate.vardescriptors;
-                   for(Iterator varit = c.iterator(); varit.hasNext();){
-                       VarDescriptor vard = (VarDescriptor)varit.next();
-                       System.out.println("\t\t\tClass "+vard.getType().getClassDesc().getSymbol());
-                   }
-                   System.out.println("\t\t------------");
-               }
-           }
-       
-           System.out.println("\n\n\n\tOptionaltaskdescriptors contains : ");
-           Collection c_otd = optionaltaskdescriptors.get(cdtemp).values();
-           for(Iterator otd_it = c_otd.iterator(); otd_it.hasNext();){
-               OptionalTaskDescriptor otd = (OptionalTaskDescriptor)otd_it.next();
-               System.out.println("\t\tTASK "+otd.td.getSymbol()+" UID : "+otd.getuid()+"\n");
-               System.out.println("\t\twith flags :");
-               for(Iterator myfses = otd.enterflagstates.iterator(); myfses.hasNext();){
-                   System.out.println("\t\t\t"+((FlagState)myfses.next()).getTextLabel());
-               }
-               System.out.println("\t\tand exitflags :");
-                   for(Iterator fseshash = otd.exitfses.iterator(); fseshash.hasNext();){
-                       HashSet temphs = (HashSet)fseshash.next();
-                       System.out.println("");
-                       for(Iterator exfses = temphs.iterator(); exfses.hasNext();){
-                           System.out.println("\t\t\t"+((FlagState)exfses.next()).getTextLabel());
-                       }
-                   }
-                   Predicate predicate = otd.predicate;
-                   System.out.println("\t\tPredicate contains :");
-                   Collection c = predicate.vardescriptors;
-                   for(Iterator varit = c.iterator(); varit.hasNext();){
-                       VarDescriptor vard = (VarDescriptor)varit.next();
-                       System.out.println("\t\t\tClass "+vard.getType().getClassDesc().getSymbol());
-                       HashSet temphash = predicate.flags.get(vard.getName());
-                       if(temphash == null) System.out.println("null hashset");
-                       else System.out.println("\t\t\t"+temphash.size()+" flag(s)");
-                       
-                   }
-                   System.out.println("\t\t------------");
-           }
-       }
-    }
-    
-    /*check if there has been a tag Change*/
-    private boolean tagChange(EGTaskNode tn){
-       if(tn.getTD() == null) return false;//to be fixed
-       FlatMethod fm = state.getMethodFlat(tn.getTD());
-       FlatNode fn = (FlatNode)fm;
-       
-       Stack nodestack=new Stack();
-       HashSet discovered=new HashSet();
-       nodestack.push(fm);
-       discovered.add(fm);
-       
-       //Iterating through the nodes
-       while(!nodestack.isEmpty()) {
-           FlatNode fn1 = (FlatNode) nodestack.pop();
-           if (fn1.kind()==FKind.FlatFlagActionNode) {
-               FlatFlagActionNode ffan=(FlatFlagActionNode)fn1;
-               if (ffan.getTaskType() == FlatFlagActionNode.TASKEXIT) {
-                   Iterator it_ttp=ffan.getTempTagPairs();
-                   if(it_ttp.hasNext()){
-                       System.out.println("Tag change detected in Task "+tn.getName());
-                       return true;
-                   }
-                   else continue; // avoid queueing the return node if reachable
-               }
-           }
-           
-           /* Queue other nodes past this one */
-           for(int i=0;i<fn1.numNext();i++) {
-               FlatNode fnext=fn1.getNext(i);
-               if (!discovered.contains(fnext)) {
-                   discovered.add(fnext);
-                   nodestack.push(fnext);
-               }
-           }
-       }
-       return false;
-    }
-
-    /////////DEBUG
-    /*Thoose two tasks create the dot file named markedgraph.dot */
-    
-    private void createDOTFile(String classname, Collection v) throws java.io.IOException {
-       java.io.PrintWriter output;
-       File dotfile_flagstates= new File("markedgraph_"+classname+".dot");
-       FileOutputStream dotstream=new FileOutputStream(dotfile_flagstates,true);
-       output = new java.io.PrintWriter(dotstream, true);
-       output.println("digraph dotvisitor {");
-       output.println("\tnode [fontsize=10,height=\"0.1\", width=\"0.1\"];");
-       output.println("\tedge [fontsize=6];");
-       traverse(output, v);
-       output.println("}\n");
-    }
-    
-    private void traverse(java.io.PrintWriter output, Collection v) {
-       EGTaskNode tn;
-       
-       for(Iterator it1 = v.iterator(); it1.hasNext();){
-           tn = (EGTaskNode)it1.next();
-           output.println("\t"+tn.getLabel()+" [label=\""+tn.getTextLabel()+"\"");
-           if (tn.isOptional()){
-               if (tn.isMultipleParams()) 
-                   output.println(", shape = tripleoctagon");
-               else 
-                   output.println(", shape=doubleoctagon");
-           } else if (tn.isMultipleParams()) 
-               output.println(", shape=octagon");
-           output.println("];");
-           
-           for(Iterator it2 = tn.edges();it2.hasNext();){
-               EGTaskNode tn2 = (EGTaskNode)((Edge)it2.next()).getTarget();
-               output.println("\t"+tn.getLabel()+" -> "+tn2.getLabel()+";");
-           }
-       }
-    }
-}