1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.imixs.workflow.plugins;
29
30 import org.imixs.workflow.ItemCollection;
31 import org.imixs.workflow.Plugin;
32 import org.imixs.workflow.exceptions.PluginException;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 public class ResultPlugin extends AbstractPlugin {
52 ItemCollection documentContext;
53 String sActivityResult;
54
55 public int run(ItemCollection adocumentContext,
56 ItemCollection adocumentActivity) throws PluginException {
57 documentContext = adocumentContext;
58
59
60 sActivityResult = adocumentActivity
61 .getItemValueString("txtActivityResult");
62 sActivityResult = replaceDynamicValues(sActivityResult,
63 adocumentContext);
64
65
66 evaluate(sActivityResult, adocumentContext);
67
68 return Plugin.PLUGIN_OK;
69 }
70
71 public void close(int status) throws PluginException {
72 try {
73
74 if (status < Plugin.PLUGIN_ERROR) {
75 documentContext.replaceItemValue("txtworkflowresultmessage",
76 sActivityResult);
77 }
78 } catch (Exception e) {
79 System.out.println("[ResultPlugin] Error close(): " + e.toString());
80
81 }
82 }
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 public static void evaluate(String aString, ItemCollection documentContext) {
103 int iTagStartPos;
104 int iTagEndPos;
105
106 int iContentStartPos;
107 int iContentEndPos;
108
109 int iNameStartPos;
110 int iNameEndPos;
111
112 int iTypeStartPos;
113 int iTypeEndPos;
114
115 String sName = "";
116 String sType = " ";
117 String sItemValue;
118
119 if (aString == null)
120 return;
121
122
123 while ((iTagStartPos = aString.toLowerCase().indexOf("<item")) != -1) {
124
125 iTagEndPos = aString.toLowerCase().indexOf("</item>", iTagStartPos);
126
127
128 if (iTagEndPos == -1)
129 return;
130
131
132 iContentStartPos = 0;
133 iContentEndPos = 0;
134 iNameStartPos = 0;
135 iNameEndPos = 0;
136 iTypeStartPos = 0;
137 iTypeEndPos = 0;
138 sName = "";
139 sType = " ";
140 sItemValue = "";
141
142
143 iContentEndPos = iTagEndPos;
144
145 String sTestString = aString.substring(0, iContentEndPos);
146 iContentStartPos = sTestString.lastIndexOf('>') + 1;
147
148
149 if (iContentStartPos >= iContentEndPos)
150 return;
151
152 iTagEndPos = iTagEndPos + "</item>".length();
153
154
155
156
157
158 iNameStartPos = aString.toLowerCase()
159 .indexOf("name=", iTagStartPos);
160
161 if (iNameStartPos > -1 && iNameStartPos < iContentStartPos) {
162 iNameStartPos = aString.indexOf("\"", iNameStartPos) + 1;
163 iNameEndPos = aString.indexOf("\"", iNameStartPos + 1);
164 sName = aString.substring(iNameStartPos, iNameEndPos);
165 }
166
167
168
169 iTypeStartPos = aString.toLowerCase()
170 .indexOf("type=", iTagStartPos);
171
172 if (iTypeStartPos > -1 && iTypeStartPos < iContentStartPos) {
173 iTypeStartPos = aString.indexOf("\"", iTypeStartPos) + 1;
174 iTypeEndPos = aString.indexOf("\"", iTypeStartPos + 1);
175 sType = aString.substring(iTypeStartPos, iTypeEndPos);
176 }
177
178
179 sItemValue = aString.substring(iContentStartPos, iContentEndPos);
180
181
182 if (sName != null && !"".equals(sName)) {
183
184 Object oValue = sItemValue;
185
186 if ("boolean".equalsIgnoreCase(sType))
187
188 oValue = Boolean.valueOf(sItemValue);
189
190 if ("integer".equalsIgnoreCase(sType))
191 oValue = new Integer(sItemValue);
192
193 documentContext.replaceItemValue(sName, oValue);
194 }
195
196
197 aString = aString.substring(0, iTagStartPos) + ""
198 + aString.substring(iTagEndPos);
199 }
200
201 }
202
203 }