View Javadoc

1   package net.kwfgrid.gworkflowdl.analysis;
2   
3   import net.kwfgrid.gworkflowdl.structure.Place;
4   import net.kwfgrid.gworkflowdl.structure.Transition;
5   import net.kwfgrid.gworkflowdl.structure.Workflow;
6   
7   import java.util.ArrayList;
8   import java.util.StringTokenizer;
9   
10  /***
11   * Created by IntelliJ IDEA.
12   * User: hans
13   * Date: 19.10.2005
14   * Time: 12:13:23
15   * To change this template use File | Settings | File Templates.
16   */
17  public class Decision {
18      public static final int TAKE_CONFLICT = 0;
19      public static final int TAKE_CHOICE = 1;
20      public static final int PUT_CONFLICT = 2;
21      public static final int PUT_CHOICE = 3;
22  
23  
24      public int type;
25      public Place place;
26      public Transition[] transitions;
27  
28      public String type2String() {
29          String ret;
30          switch (type) {
31              case TAKE_CONFLICT:
32                  {
33                      ret = "TAKE_CONFLICT";
34                      break;
35                  }
36              case TAKE_CHOICE:
37                  {
38                      ret = "TAKE_CHOICE";
39                      break;
40                  }
41              case PUT_CONFLICT:
42                  {
43                      ret = "PUT_CONFLICT";
44                      break;
45                  }
46              case PUT_CHOICE:
47                  {
48                      ret = "PUT_CHOICE";
49                      break;
50                  }
51              default: {
52                  ret = "ERROR";
53              }
54          }
55          return ret;
56      }
57  
58      public boolean equals(Decision d) {
59          if (place != d.place) {
60              return false;
61          }
62          if (transitions.length != d.transitions.length) {
63              return false;
64          }
65          for (int i = 0; i < transitions.length; i++) {
66              if (transitions[i] != d.transitions[i]) {
67                  return false;
68              }
69          }
70          return true;
71      }
72  
73      public String toString() {
74          StringBuffer buffer = new StringBuffer();
75          buffer.append(place.getID() + "  " + type2String());
76          for (int i = 0; i < transitions.length; i++) {
77              buffer.append("\n  " + transitions[i].getID());
78          }
79          buffer.append("\n");
80          return buffer.toString();
81      }
82  
83      public static String toString(Decision[] d) {
84          StringBuffer buffer = new StringBuffer();
85          for (int i = 0; i < d.length; i++) {
86              buffer.append("\n" + d[i].toString());
87          }
88          buffer.append("\n");
89          return buffer.toString();
90      }
91  
92      public static Decision fromString(Workflow wf,String s) {
93          StringTokenizer st = new StringTokenizer(s," \n\t");
94          ArrayList list = new ArrayList();
95          while (st.hasMoreTokens()) {
96              list.add(st.nextToken());
97          }
98          Decision d = new Decision();
99          //String[] ss = s.split("//s");
100         if (list.size() < 4) {
101             return null;
102         }
103         d.place = wf.getPlace((String) list.get(0));
104         String type = (String) list.get(1);
105         if (type.equals("TAKE_CONFLICT")) {
106             d.type = TAKE_CONFLICT;
107         } else if (type.equals("TAKE_CHOICE")) {
108             d.type = TAKE_CHOICE;
109         } else  if (type.equals("PUT_CONFLICT")) {
110             d.type = PUT_CONFLICT;
111         } else if (type.equals("PUT_CHOICE")) {
112             d.type = PUT_CHOICE;
113         } else {
114             return null;
115         }
116         d.transitions = new Transition[list.size() - 2];
117         for (int i = 0; i < list.size() - 2; i++) {
118             d.transitions[i] = wf.getTransition((String) list.get(i+2));
119         }
120         return d;
121     }
122 }