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
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 }