1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package org.kuali.rice.kew.superuser.web; |
17 | |
|
18 | |
import java.util.Collection; |
19 | |
import java.util.Collections; |
20 | |
import java.util.Comparator; |
21 | |
import java.util.Iterator; |
22 | |
import java.util.List; |
23 | |
|
24 | |
import javax.servlet.http.HttpServletRequest; |
25 | |
import javax.servlet.http.HttpServletResponse; |
26 | |
import javax.xml.namespace.QName; |
27 | |
|
28 | |
import org.apache.commons.lang.ArrayUtils; |
29 | |
import org.apache.commons.lang.StringUtils; |
30 | |
import org.apache.struts.action.ActionForm; |
31 | |
import org.apache.struts.action.ActionForward; |
32 | |
import org.apache.struts.action.ActionMapping; |
33 | |
import org.kuali.rice.kew.actionrequest.ActionRequestValue; |
34 | |
import org.kuali.rice.kew.api.KewApiConstants; |
35 | |
import org.kuali.rice.kew.api.KewApiServiceLocator; |
36 | |
import org.kuali.rice.kew.api.WorkflowDocumentFactory; |
37 | |
import org.kuali.rice.kew.api.action.ActionRequestType; |
38 | |
import org.kuali.rice.kew.api.action.AdHocRevoke; |
39 | |
import org.kuali.rice.kew.api.action.DocumentActionParameters; |
40 | |
import org.kuali.rice.kew.api.action.ReturnPoint; |
41 | |
import org.kuali.rice.kew.api.action.WorkflowDocumentActionsService; |
42 | |
import org.kuali.rice.kew.api.document.node.RouteNodeInstance; |
43 | |
import org.kuali.rice.kew.api.document.WorkflowDocumentService; |
44 | |
import org.kuali.rice.kew.api.exception.WorkflowException; |
45 | |
import org.kuali.rice.kew.doctype.bo.DocumentType; |
46 | |
import org.kuali.rice.kew.exception.WorkflowServiceErrorException; |
47 | |
import org.kuali.rice.kew.exception.WorkflowServiceErrorImpl; |
48 | |
import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue; |
49 | |
import org.kuali.rice.kew.service.KEWServiceLocator; |
50 | |
import org.kuali.rice.kew.api.KewApiConstants; |
51 | |
import org.kuali.rice.kew.web.AppSpecificRouteRecipient; |
52 | |
import org.kuali.rice.kew.web.KewKualiAction; |
53 | |
import org.kuali.rice.kim.api.group.GroupService; |
54 | |
import org.kuali.rice.kim.api.identity.principal.Principal; |
55 | |
import org.kuali.rice.kim.api.services.KimApiServiceLocator; |
56 | |
import org.kuali.rice.krad.UserSession; |
57 | |
import org.kuali.rice.krad.exception.ValidationException; |
58 | |
import org.kuali.rice.krad.util.GlobalVariables; |
59 | |
import org.kuali.rice.krad.util.KRADConstants; |
60 | |
import org.kuali.rice.krad.util.ObjectUtils; |
61 | |
import org.kuali.rice.ksb.api.KsbApiServiceLocator; |
62 | |
|
63 | |
|
64 | |
|
65 | |
|
66 | |
|
67 | |
|
68 | 0 | public class SuperUserAction extends KewKualiAction { |
69 | 0 | private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SuperUserAction.class); |
70 | |
public static final String UNAUTHORIZED = "authorizationFailure"; |
71 | |
|
72 | |
|
73 | |
|
74 | |
|
75 | |
|
76 | |
@Override |
77 | |
public ActionForward execute(ActionMapping mapping, ActionForm form, |
78 | |
HttpServletRequest request, HttpServletResponse response) |
79 | |
throws Exception { |
80 | 0 | initForm(request, form); |
81 | 0 | return super.execute(mapping, form, request, response); |
82 | |
} |
83 | |
|
84 | |
@Override |
85 | |
public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
86 | |
HttpServletResponse response) throws Exception { |
87 | 0 | ((SuperUserForm) form).getActionRequests().clear(); |
88 | 0 | initForm(request, form); |
89 | 0 | return defaultDispatch(mapping, form, request, response); |
90 | |
} |
91 | |
|
92 | |
public ActionForward displaySuperUserDocument(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
93 | |
HttpServletResponse response) throws Exception { |
94 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
95 | 0 | superUserForm.setDocHandlerUrl(KewApiConstants.DOC_HANDLER_REDIRECT_PAGE + "?docId=" |
96 | |
+ superUserForm.getDocumentId() + "&" + KewApiConstants.COMMAND_PARAMETER + "=" |
97 | |
+ KewApiConstants.SUPERUSER_COMMAND); |
98 | 0 | return defaultDispatch(mapping, form, request, response); |
99 | |
} |
100 | |
|
101 | |
public ActionForward routeLevelApprove(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
102 | |
HttpServletResponse response) throws Exception { |
103 | 0 | LOG.info("entering routeLevelApprove()..."); |
104 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
105 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
106 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
107 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
108 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
109 | |
|
110 | 0 | documentActions.superUserNodeApprove(parameters, superUserForm.isRunPostProcessorLogic(), |
111 | |
superUserForm.getDestNodeName()); |
112 | 0 | saveDocumentMessage("general.routing.superuser.routeLevelApproved", request, superUserForm.getDocumentId(), |
113 | |
null); |
114 | 0 | LOG.info("exiting routeLevelApprove()..."); |
115 | 0 | superUserForm.getActionRequests().clear(); |
116 | 0 | initForm(request, form); |
117 | 0 | return defaultDispatch(mapping, form, request, response); |
118 | |
} |
119 | |
|
120 | |
public ActionForward approve(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
121 | |
HttpServletResponse response) throws Exception { |
122 | 0 | LOG.info("entering approve() ..."); |
123 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
124 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
125 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
126 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
127 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
128 | 0 | documentActions.superUserBlanketApprove(parameters, superUserForm.isRunPostProcessorLogic()); |
129 | 0 | saveDocumentMessage("general.routing.superuser.approved", request, superUserForm.getDocumentId(), null); |
130 | 0 | LOG.info("exiting approve() ..."); |
131 | 0 | superUserForm.getActionRequests().clear(); |
132 | 0 | initForm(request, form); |
133 | 0 | return defaultDispatch(mapping, form, request, response); |
134 | |
} |
135 | |
|
136 | |
public ActionForward disapprove(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
137 | |
HttpServletResponse response) throws Exception { |
138 | 0 | LOG.info("entering disapprove() ..."); |
139 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
140 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
141 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
142 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
143 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
144 | 0 | documentActions.superUserDisapprove(parameters, superUserForm.isRunPostProcessorLogic()); |
145 | 0 | saveDocumentMessage("general.routing.superuser.disapproved", request, superUserForm.getDocumentId(), null); |
146 | 0 | LOG.info("exiting disapprove() ..."); |
147 | 0 | superUserForm.getActionRequests().clear(); |
148 | 0 | initForm(request, form); |
149 | 0 | return defaultDispatch(mapping, form, request, response); |
150 | |
} |
151 | |
|
152 | |
public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
153 | |
HttpServletResponse response) throws Exception { |
154 | 0 | LOG.info("entering cancel() ..."); |
155 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
156 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
157 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
158 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
159 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
160 | 0 | documentActions.superUserCancel(parameters, superUserForm.isRunPostProcessorLogic()); |
161 | 0 | saveDocumentMessage("general.routing.superuser.canceled", request, superUserForm.getDocumentId(), null); |
162 | 0 | LOG.info("exiting cancel() ..."); |
163 | 0 | superUserForm.getActionRequests().clear(); |
164 | 0 | initForm(request, form); |
165 | 0 | return defaultDispatch(mapping, form, request, response); |
166 | |
} |
167 | |
|
168 | |
public ActionForward returnToPreviousNode(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
169 | |
HttpServletResponse response) throws Exception { |
170 | 0 | LOG.info("entering returnToPreviousNode() ..."); |
171 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
172 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
173 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
174 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
175 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
176 | 0 | documentActions.superUserReturnToPreviousNode(parameters, superUserForm.isRunPostProcessorLogic(), |
177 | |
ReturnPoint.create(superUserForm.getReturnDestNodeName())); |
178 | 0 | saveDocumentMessage("general.routing.returnedToPreviousNode", request, "document", superUserForm |
179 | |
.getReturnDestNodeName().toString()); |
180 | 0 | LOG.info("exiting returnToPreviousRouteLevel() ..."); |
181 | 0 | superUserForm.getActionRequests().clear(); |
182 | 0 | initForm(request, form); |
183 | 0 | return defaultDispatch(mapping, form, request, response); |
184 | |
} |
185 | |
|
186 | |
public ActionForward actionRequestApprove(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
187 | |
HttpServletResponse response) throws Exception { |
188 | 0 | LOG.info("entering actionRequestApprove() ..."); |
189 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
190 | |
|
191 | |
|
192 | 0 | String methodToCallAttr = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE); |
193 | 0 | superUserForm.setActionTakenRecipientCode(StringUtils.substringBetween(methodToCallAttr, |
194 | |
KRADConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL)); |
195 | 0 | superUserForm.setActionTakenNetworkId(StringUtils.substringBetween(methodToCallAttr, |
196 | |
KRADConstants.METHOD_TO_CALL_PARM2_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM2_RIGHT_DEL)); |
197 | 0 | superUserForm.setActionTakenWorkGroupId(StringUtils.substringBetween(methodToCallAttr, |
198 | |
KRADConstants.METHOD_TO_CALL_PARM4_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM4_RIGHT_DEL)); |
199 | 0 | superUserForm.setActionTakenActionRequestId(StringUtils.substringBetween(methodToCallAttr, |
200 | |
KRADConstants.METHOD_TO_CALL_PARM5_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM5_RIGHT_DEL)); |
201 | |
|
202 | 0 | LOG.debug("Routing super user action request approve action"); |
203 | 0 | boolean runPostProcessorLogic = ArrayUtils.contains(superUserForm.getActionRequestRunPostProcessorCheck(), |
204 | |
superUserForm.getActionTakenActionRequestId()); |
205 | 0 | String documentId = superUserForm.getRouteHeader().getDocumentId(); |
206 | 0 | WorkflowDocumentActionsService documentActions = getWorkflowDocumentActionsService(documentId); |
207 | 0 | DocumentActionParameters parameters = DocumentActionParameters.create(documentId, getUserSession(request) |
208 | |
.getPrincipalId(), superUserForm.getAnnotation()); |
209 | 0 | documentActions.superUserTakeRequestedAction(parameters, runPostProcessorLogic, |
210 | |
superUserForm.getActionTakenActionRequestId()); |
211 | |
String messageString; |
212 | 0 | String actionReqest = StringUtils.substringBetween(methodToCallAttr, |
213 | |
KRADConstants.METHOD_TO_CALL_PARM6_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM6_RIGHT_DEL); |
214 | 0 | if (actionReqest.equalsIgnoreCase("acknowledge")) { |
215 | 0 | messageString = "general.routing.superuser.actionRequestAcknowledged"; |
216 | 0 | } else if (actionReqest.equalsIgnoreCase("FYI")) { |
217 | 0 | messageString = "general.routing.superuser.actionRequestFYI"; |
218 | 0 | } else if (actionReqest.equalsIgnoreCase("complete")) { |
219 | 0 | messageString = "general.routing.superuser.actionRequestCompleted"; |
220 | 0 | } else if (actionReqest.equalsIgnoreCase("approved")) { |
221 | 0 | messageString = "general.routing.superuser.actionRequestApproved"; |
222 | |
} else { |
223 | 0 | messageString = "general.routing.superuser.actionRequestApproved"; |
224 | |
} |
225 | 0 | saveDocumentMessage(messageString, request, superUserForm.getDocumentId(), |
226 | |
superUserForm.getActionTakenActionRequestId()); |
227 | 0 | LOG.info("exiting actionRequestApprove() ..."); |
228 | 0 | superUserForm.getActionRequests().clear(); |
229 | 0 | initForm(request, form); |
230 | |
|
231 | |
|
232 | 0 | int removalIndex = findAppSpecificRecipientIndex(superUserForm, superUserForm.getActionTakenActionRequestId()); |
233 | |
|
234 | 0 | if (removalIndex >= 0) { |
235 | 0 | superUserForm.getAppSpecificRouteList().remove(removalIndex); |
236 | |
} |
237 | |
|
238 | 0 | return defaultDispatch(mapping, form, request, response); |
239 | |
} |
240 | |
|
241 | |
|
242 | |
|
243 | |
|
244 | |
|
245 | |
|
246 | |
|
247 | |
|
248 | |
|
249 | |
|
250 | |
|
251 | |
private int findAppSpecificRecipientIndex(SuperUserForm superUserForm, String actionRequestId) { |
252 | 0 | int tempIndex = 0; |
253 | 0 | for (Iterator<?> appRouteIter = superUserForm.getAppSpecificRouteList().iterator(); appRouteIter.hasNext();) { |
254 | 0 | String tempActnReqId = ((AppSpecificRouteRecipient) appRouteIter.next()).getActionRequestId(); |
255 | 0 | if (StringUtils.equals(tempActnReqId, actionRequestId)) { |
256 | 0 | return tempIndex; |
257 | |
} |
258 | 0 | tempIndex++; |
259 | 0 | } |
260 | 0 | return -1; |
261 | |
} |
262 | |
|
263 | |
public ActionForward initForm(HttpServletRequest request, ActionForm form) throws Exception { |
264 | 0 | request.setAttribute("Constants", getServlet().getServletContext().getAttribute("KewApiConstants")); |
265 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
266 | 0 | DocumentRouteHeaderValue routeHeader = KEWServiceLocator.getRouteHeaderService().getRouteHeader( |
267 | |
superUserForm.getDocumentId()); |
268 | 0 | if(ObjectUtils.isNull(routeHeader)) { |
269 | 0 | throw new ValidationException("No route header ID found. Try searching for the document again using the super user document search."); |
270 | |
} |
271 | 0 | superUserForm.setRouteHeader(routeHeader); |
272 | 0 | String principalId = getUserSession(request).getPrincipalId(); |
273 | 0 | boolean isAuthorized = KEWServiceLocator.getDocumentTypePermissionService().canAdministerRouting(principalId, |
274 | |
routeHeader.getDocumentType()); |
275 | 0 | superUserForm.setAuthorized(isAuthorized); |
276 | 0 | if (!isAuthorized) { |
277 | 0 | saveDocumentMessage("general.routing.superuser.notAuthorized", request, superUserForm.getDocumentId(), null); |
278 | 0 | return null; |
279 | |
} |
280 | |
|
281 | 0 | superUserForm.setFutureNodeNames(KEWServiceLocator.getRouteNodeService().findFutureNodeNames( |
282 | |
routeHeader.getDocumentId())); |
283 | |
|
284 | 0 | Collection actionRequests = KEWServiceLocator.getActionRequestService().findPendingByDoc( |
285 | |
routeHeader.getDocumentId()); |
286 | 0 | Iterator requestIterator = actionRequests.iterator(); |
287 | 0 | while (requestIterator.hasNext()) { |
288 | 0 | ActionRequestValue req = (ActionRequestValue) requestIterator.next(); |
289 | |
|
290 | 0 | superUserForm.getActionRequests().add(req); |
291 | |
|
292 | 0 | } |
293 | |
|
294 | 0 | superUserForm.setDocId(superUserForm.getDocumentId()); |
295 | 0 | if (superUserForm.getDocId() != null) { |
296 | 0 | superUserForm.setWorkflowDocument(WorkflowDocumentFactory.loadDocument(getUserSession(request) |
297 | |
.getPrincipalId(), superUserForm.getDocId())); |
298 | 0 | superUserForm.establishVisibleActionRequestCds(); |
299 | |
} |
300 | |
|
301 | 0 | return null; |
302 | |
} |
303 | |
|
304 | |
private void saveDocumentMessage(String messageKey, HttpServletRequest request, String subVariable1, |
305 | |
String subVariable2) { |
306 | 0 | if (subVariable2 == null) { |
307 | 0 | GlobalVariables.getMessageMap().putInfo("document", messageKey, subVariable1); |
308 | |
} else { |
309 | 0 | GlobalVariables.getMessageMap().putInfo("document", messageKey, subVariable1, subVariable2); |
310 | |
} |
311 | 0 | } |
312 | |
|
313 | |
public ActionForward routeToAppSpecificRecipient(ActionMapping mapping, ActionForm form, |
314 | |
HttpServletRequest request, HttpServletResponse response) throws Exception { |
315 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
316 | |
|
317 | |
|
318 | |
|
319 | 0 | String routeType = StringUtils.substringBetween( |
320 | |
(String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE), |
321 | |
KRADConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL); |
322 | 0 | AppSpecificRouteRecipient recipient = null; |
323 | 0 | if (KewApiConstants.PERSON.equals(routeType)) { |
324 | 0 | recipient = superUserForm.getAppSpecificRouteRecipient(); |
325 | 0 | recipient.setActionRequested(superUserForm.getAppSpecificRouteActionRequestCd()); |
326 | 0 | superUserForm.setAppSpecificPersonId(recipient.getId()); |
327 | |
} else { |
328 | 0 | recipient = superUserForm.getAppSpecificRouteRecipient2(); |
329 | 0 | recipient.setActionRequested(superUserForm.getAppSpecificRouteActionRequestCd2()); |
330 | 0 | superUserForm.setAppSpecificWorkgroupId(recipient.getId()); |
331 | |
} |
332 | |
|
333 | 0 | validateAppSpecificRoute(recipient); |
334 | |
|
335 | |
|
336 | 0 | superUserForm.establishVisibleActionRequestCds(); |
337 | 0 | if (superUserForm.getAppSpecificRouteActionRequestCds().get(recipient.getActionRequested()) == null) { |
338 | 0 | GlobalVariables.getMessageMap().putError("appSpecificRouteRecipient" + |
339 | |
((KewApiConstants.WORKGROUP.equals(recipient.getType())) ? "2" : "") + ".id", |
340 | |
"appspecificroute.actionrequested.invalid"); |
341 | |
|
342 | 0 | throw new ValidationException("The requested action of '" + recipient.getActionRequested() |
343 | |
+ "' is no longer available for this document"); |
344 | |
} |
345 | |
|
346 | |
try { |
347 | 0 | String routeNodeName = getAdHocRouteNodeName(superUserForm.getWorkflowDocument().getDocumentId()); |
348 | |
|
349 | 0 | if (KewApiConstants.PERSON.equals(routeType)) { |
350 | 0 | String recipientPrincipalId = KEWServiceLocator.getIdentityHelperService().getIdForPrincipalName( |
351 | |
recipient.getId()); |
352 | 0 | superUserForm.getWorkflowDocument().adHocToPrincipal( |
353 | |
ActionRequestType.fromCode(recipient.getActionRequested()), routeNodeName, |
354 | |
superUserForm.getAnnotation(), recipientPrincipalId, "", true); |
355 | 0 | } else { |
356 | 0 | String recipientGroupId = KEWServiceLocator.getIdentityHelperService().getIdForGroupName( |
357 | |
recipient.getNamespaceCode(), recipient.getId()); |
358 | 0 | superUserForm.getWorkflowDocument().adHocToGroup( |
359 | |
ActionRequestType.fromCode(recipient.getActionRequested()), routeNodeName, |
360 | |
superUserForm.getAnnotation(), recipientGroupId, "", true); |
361 | |
} |
362 | 0 | } catch (Exception e) { |
363 | 0 | LOG.error("Error generating app specific route request", e); |
364 | 0 | throw new WorkflowServiceErrorException("AppSpecific Route Error", new WorkflowServiceErrorImpl( |
365 | |
"AppSpecific Route Error", "appspecificroute.systemerror")); |
366 | 0 | } |
367 | |
|
368 | 0 | superUserForm.getActionRequests().clear(); |
369 | 0 | initForm(request, form); |
370 | |
|
371 | |
|
372 | 0 | ActionRequestValue latestActnReq = getLatestActionRequest(superUserForm); |
373 | 0 | if (latestActnReq != null) { |
374 | 0 | recipient.setActionRequestId(latestActnReq.getActionRequestId()); |
375 | |
} |
376 | |
|
377 | 0 | superUserForm.getAppSpecificRouteList().add(recipient); |
378 | 0 | superUserForm.resetAppSpecificRoute(); |
379 | |
|
380 | 0 | return start(mapping, form, request, response); |
381 | |
} |
382 | |
|
383 | |
|
384 | |
|
385 | |
|
386 | |
|
387 | |
|
388 | |
|
389 | |
|
390 | |
private ActionRequestValue getLatestActionRequest(SuperUserForm superUserForm) { |
391 | 0 | ActionRequestValue latestActnReq = null; |
392 | |
|
393 | |
|
394 | |
|
395 | |
|
396 | 0 | List<ActionRequestValue> actionRequests = superUserForm.getActionRequests(); |
397 | |
|
398 | 0 | if (actionRequests != null && actionRequests.size() > 0) { |
399 | 0 | Collections.sort(actionRequests, new Comparator<ActionRequestValue>() { |
400 | |
|
401 | |
@Override |
402 | |
|
403 | |
public int compare(ActionRequestValue o1, ActionRequestValue o2) { |
404 | 0 | if (o1 == null && o2 == null) |
405 | 0 | return 0; |
406 | 0 | if (o1 == null) |
407 | 0 | return -1; |
408 | 0 | if (o2 == null) |
409 | 0 | return 1; |
410 | |
|
411 | 0 | if (o1.getCreateDate() == null && o2.getCreateDate() == null) |
412 | 0 | return 0; |
413 | 0 | if (o1.getCreateDate() == null) |
414 | 0 | return -1; |
415 | 0 | if (o2.getCreateDate() == null) |
416 | 0 | return 1; |
417 | |
|
418 | 0 | return o2.getCreateDate().compareTo(o1.getCreateDate()); |
419 | |
} |
420 | |
|
421 | |
}); |
422 | |
|
423 | |
|
424 | 0 | latestActnReq = actionRequests.get(0); |
425 | |
} |
426 | |
|
427 | |
|
428 | |
|
429 | |
|
430 | |
|
431 | |
|
432 | |
|
433 | |
|
434 | |
|
435 | |
|
436 | 0 | return latestActnReq; |
437 | |
} |
438 | |
|
439 | |
|
440 | |
|
441 | |
|
442 | |
public ActionForward removeAppSpecificRecipient(ActionMapping mapping, ActionForm form, HttpServletRequest request, |
443 | |
HttpServletResponse response) throws Exception { |
444 | 0 | SuperUserForm superUserForm = (SuperUserForm) form; |
445 | |
|
446 | 0 | String strIndex = StringUtils.substringBetween( |
447 | |
(String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE), |
448 | |
KRADConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL); |
449 | 0 | if (StringUtils.isBlank(strIndex)) { |
450 | 0 | throw new WorkflowException("No adhoc route recipient index specified"); |
451 | |
} |
452 | 0 | int removeIndex = Integer.parseInt(strIndex); |
453 | 0 | if (removeIndex < 0 || removeIndex >= superUserForm.getAppSpecificRouteList().size()) { |
454 | 0 | throw new WorkflowException("Invalid adhoc route recipient index specified"); |
455 | |
} |
456 | |
|
457 | 0 | AppSpecificRouteRecipient removedRec = (AppSpecificRouteRecipient) superUserForm.getAppSpecificRouteList().get( |
458 | |
removeIndex); |
459 | 0 | if (removedRec.getActionRequestId() != null) { |
460 | 0 | superUserForm.getWorkflowDocument().revokeAdHocRequestById(removedRec.getActionRequestId().toString(), ""); |
461 | |
} else { |
462 | 0 | AdHocRevoke adHocRevoke = null; |
463 | |
|
464 | 0 | if (KewApiConstants.PERSON.equals(removedRec.getType())) { |
465 | 0 | adHocRevoke = AdHocRevoke.createRevokeFromPrincipal(KEWServiceLocator.getIdentityHelperService() |
466 | |
.getIdForPrincipalName(removedRec.getId())); |
467 | |
} else { |
468 | 0 | adHocRevoke = AdHocRevoke.createRevokeFromGroup(KEWServiceLocator.getIdentityHelperService() |
469 | |
.getIdForGroupName(removedRec.getNamespaceCode(), removedRec.getId())); |
470 | |
} |
471 | 0 | superUserForm.getWorkflowDocument().revokeAdHocRequests(adHocRevoke, ""); |
472 | |
} |
473 | 0 | superUserForm.getAppSpecificRouteList().remove(removeIndex); |
474 | |
|
475 | 0 | superUserForm.getActionRequests().clear(); |
476 | 0 | initForm(request, form); |
477 | 0 | return start(mapping, form, request, response); |
478 | |
} |
479 | |
|
480 | |
private WorkflowDocumentActionsService getWorkflowDocumentActionsService(String documentId) { |
481 | 0 | DocumentType documentType = KEWServiceLocator.getDocumentTypeService().findByDocumentId(documentId); |
482 | 0 | String applicationId = documentType.getApplicationId(); |
483 | 0 | QName serviceName = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, |
484 | |
KewApiConstants.ServiceNames.WORKFLOW_DOCUMENT_ACTIONS_SERVICE_SOAP); |
485 | 0 | WorkflowDocumentActionsService service = (WorkflowDocumentActionsService) KsbApiServiceLocator.getServiceBus() |
486 | |
.getService(serviceName, applicationId); |
487 | 0 | if (service == null) { |
488 | 0 | service = KewApiServiceLocator.getWorkflowDocumentActionsService(); |
489 | |
} |
490 | 0 | return service; |
491 | |
} |
492 | |
|
493 | |
protected void validateAppSpecificRoute(AppSpecificRouteRecipient recipient) { |
494 | 0 | if (recipient.getId() == null || recipient.getId().trim().equals("")) { |
495 | 0 | GlobalVariables.getMessageMap().putError("appSpecificRouteRecipient" + |
496 | |
((KewApiConstants.WORKGROUP.equals(recipient.getType())) ? "2" : "") + ".id", |
497 | |
"appspecificroute.recipient.required"); |
498 | |
} else { |
499 | 0 | if (KewApiConstants.PERSON.equals(recipient.getType())) { |
500 | 0 | Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName( |
501 | |
recipient.getId()); |
502 | 0 | if (principal == null) { |
503 | 0 | LOG.error("App Specific user recipient not found"); |
504 | 0 | GlobalVariables.getMessageMap().putError("appSpecificRouteRecipient.id", |
505 | |
"appspecificroute.user.invalid"); |
506 | |
} |
507 | 0 | } else if (KewApiConstants.WORKGROUP.equals(recipient.getType())) { |
508 | |
|
509 | 0 | if (getGroupService().getGroupByNameAndNamespaceCode(recipient.getNamespaceCode(), recipient.getId()) == null) { |
510 | 0 | GlobalVariables.getMessageMap().putError("appSpecificRouteRecipient2.id", |
511 | |
"appspecificroute.workgroup.invalid"); |
512 | |
} |
513 | |
} |
514 | |
} |
515 | 0 | if (GlobalVariables.getMessageMap().hasErrors()) { |
516 | 0 | throw new ValidationException("AppSpecific Route validation Errors"); |
517 | |
} |
518 | |
|
519 | 0 | } |
520 | |
|
521 | |
protected String getAdHocRouteNodeName(String documentId) throws WorkflowException { |
522 | 0 | WorkflowDocumentService workflowDocumentService = KewApiServiceLocator.getWorkflowDocumentService(); |
523 | 0 | List<RouteNodeInstance> nodeInstances = workflowDocumentService.getActiveRouteNodeInstances(documentId); |
524 | 0 | if (nodeInstances == null || nodeInstances.isEmpty()) { |
525 | 0 | nodeInstances = workflowDocumentService.getTerminalRouteNodeInstances(documentId); |
526 | |
} |
527 | 0 | if (nodeInstances == null || nodeInstances.isEmpty()) { |
528 | 0 | throw new WorkflowException("Could not locate a node on the document to send the ad hoc request to."); |
529 | |
} |
530 | 0 | return nodeInstances.get(0).getName(); |
531 | |
} |
532 | |
|
533 | |
private GroupService getGroupService() { |
534 | 0 | return KimApiServiceLocator.getGroupService(); |
535 | |
} |
536 | |
|
537 | |
public static UserSession getUserSession(HttpServletRequest request) { |
538 | 0 | return GlobalVariables.getUserSession(); |
539 | |
} |
540 | |
|
541 | |
} |