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 java.util.List;
31 import java.util.Vector;
32 import java.util.logging.Logger;
33
34 import org.imixs.workflow.ItemCollection;
35 import org.imixs.workflow.Plugin;
36 import org.imixs.workflow.WorkflowContext;
37 import org.imixs.workflow.WorkflowKernel;
38 import org.imixs.workflow.exceptions.PluginException;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public class AccessPlugin extends AbstractPlugin {
64 ItemCollection documentContext;
65 ItemCollection documentActivity;
66 List itemReadRollback, itemWriteRollback;
67 WorkflowContext workflowContext;
68
69 private static Logger logger = Logger.getLogger("org.imixs.workflow");
70
71 public void init(WorkflowContext actx) throws PluginException {
72 workflowContext = actx;
73 }
74
75
76
77
78
79 public int run(ItemCollection adocumentContext,
80 ItemCollection adocumentActivity) throws PluginException {
81 List itemRead;
82 List itemWrite;
83 List vectorAccess;
84
85 documentContext = adocumentContext;
86 documentActivity = adocumentActivity;
87
88
89 validate();
90
91 itemRead = (Vector) documentContext.getItemValue("$readAccess");
92
93
94 itemReadRollback = (Vector) documentContext.getItemValue("$readAccess");
95
96
97 if ("1".equals(documentActivity.getItemValueString("keyaccessmode")))
98 vectorAccess = itemRead;
99 else
100 vectorAccess = new Vector();
101 if (workflowContext.getLogLevel() == WorkflowKernel.LOG_LEVEL_FINE)
102 logger.info("[AccessPlugin] AccessMode: '"
103 + documentActivity.getItemValueString("keyaccessmode")
104 + "'");
105
106 if (vectorAccess == null)
107 vectorAccess = new Vector();
108
109
110 mergeVectors(vectorAccess,
111 documentActivity.getItemValue("namaddreadaccess"));
112
113 mergeVectors(vectorAccess,
114 documentActivity.getItemValue("keyaddreadroles"));
115
116 mergeMappedFieldValues(documentContext,vectorAccess,
117 documentActivity.getItemValue("keyaddreadfields"));
118
119
120 vectorAccess = uniqueList(vectorAccess);
121
122
123 documentContext.replaceItemValue("$readAccess", vectorAccess);
124 if ((workflowContext.getLogLevel() == WorkflowKernel.LOG_LEVEL_FINE)
125 && (vectorAccess.size() > 0)) {
126 logger.info("[AccessPlugin] ReadAccess:");
127 for (int j = 0; j < vectorAccess.size(); j++)
128 logger.info(" "
129 + (String) vectorAccess.get(j));
130 }
131
132
133
134
135 itemWrite = documentContext.getItemValue("$writeAccess");
136
137
138 itemWriteRollback = documentContext.getItemValue("$writeAccess");
139
140
141
142 if ("1".equals(documentActivity.getItemValueString("keyaccessmode")))
143 vectorAccess = itemWrite;
144 else
145 vectorAccess = new Vector();
146
147 if (vectorAccess == null)
148 vectorAccess = new Vector();
149
150
151 mergeVectors(vectorAccess,
152 documentActivity.getItemValue("namaddwriteaccess"));
153
154 mergeVectors(vectorAccess,
155 documentActivity.getItemValue("keyaddwriteroles"));
156
157 mergeMappedFieldValues(documentContext,vectorAccess,
158 documentActivity.getItemValue("keyaddwritefields"));
159
160
161 vectorAccess = uniqueList(vectorAccess);
162
163
164 documentContext.replaceItemValue("$writeAccess", vectorAccess);
165 if ((workflowContext.getLogLevel() == WorkflowKernel.LOG_LEVEL_FINE)
166 && (vectorAccess.size() > 0)) {
167 logger.info("[AccessPlugin] WriteAccess:");
168 for (int j = 0; j < vectorAccess.size(); j++)
169 logger.info(" "
170 + (String) vectorAccess.get(j));
171 }
172
173 return Plugin.PLUGIN_OK;
174 }
175
176 public void close(int status) throws PluginException {
177 try {
178
179
180 if (status == Plugin.PLUGIN_ERROR) {
181 documentContext.replaceItemValue("$writeAccess",
182 itemWriteRollback);
183 documentContext.replaceItemValue("$readAccess",
184 itemReadRollback);
185 }
186 } catch (Exception e) {
187 throw new PluginException("[AccessPlugin] Error close() "
188 + e.toString());
189
190 }
191 }
192
193
194
195
196
197
198
199
200 private void validate() {
201
202
203 if (!documentActivity.hasItem("keyaccessmode"))
204 documentActivity.replaceItemValue("keyaccessmode", "");
205
206 if (!documentActivity.hasItem("namaddreadaccess"))
207 documentActivity.replaceItemValue("namaddreadaccess", "");
208
209 if (!documentActivity.hasItem("keyaddreadroles"))
210 documentActivity.replaceItemValue("keyaddreadroles", "");
211
212 if (!documentActivity.hasItem("keyaddreadfields"))
213 documentActivity.replaceItemValue("keyaddreadfields", "");
214
215 if (!documentActivity.hasItem("namaddwriteaccess"))
216 documentActivity.replaceItemValue("namaddwriteaccess", "");
217
218 if (!documentActivity.hasItem("keyaddwriteroles"))
219 documentActivity.replaceItemValue("keyaddwriteroles", "");
220
221 if (!documentActivity.hasItem("keyaddreadfields"))
222 documentActivity.replaceItemValue("keyaddreadfields", "");
223
224
225 if (!documentContext.hasItem("$readAccess"))
226 documentContext.replaceItemValue("$readAccess", "");
227
228 if (!documentContext.hasItem("$writeAccess"))
229 documentContext.replaceItemValue("$writeAccess", "");
230
231 }
232
233
234 }