1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.ken.service.impl;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.ken.bo.NotificationMessageDelivery;
20 import org.kuali.rice.ken.document.kew.NotificationWorkflowDocument;
21 import org.kuali.rice.ken.service.NotificationMessageContentService;
22 import org.kuali.rice.ken.service.NotificationWorkflowDocumentService;
23 import org.kuali.rice.ken.util.NotificationConstants;
24 import org.kuali.rice.kew.api.WorkflowDocument;
25 import org.kuali.rice.kew.api.WorkflowRuntimeException;
26 import org.kuali.rice.kew.api.action.ActionRequest;
27 import org.kuali.rice.kew.api.action.ActionRequestType;
28 import org.kuali.rice.kim.api.identity.principal.Principal;
29 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
30
31 import java.util.List;
32
33
34
35
36
37
38 public class NotificationWorkflowDocumentServiceImpl implements NotificationWorkflowDocumentService {
39 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger
40 .getLogger(NotificationWorkflowDocumentServiceImpl.class);
41
42 private NotificationMessageContentService messageContentService;
43
44
45
46
47
48 public NotificationWorkflowDocumentServiceImpl(NotificationMessageContentService messageContentService) {
49 this.messageContentService = messageContentService;
50 }
51
52
53
54
55
56
57
58 public String createAndAdHocRouteNotificationWorkflowDocument(NotificationMessageDelivery messageDelivery,
59 String initiatorUserId,
60 String recipientUserId, String annotation) {
61
62
63
64
65 WorkflowDocument document = NotificationWorkflowDocument.createNotificationDocument(initiatorUserId);
66
67
68 document.setApplicationDocumentId(messageDelivery.getId().toString());
69
70
71
72 document.setApplicationContent(messageContentService.generateNotificationMessage(
73 messageDelivery.getNotification(), messageDelivery.getUserRecipientId()));
74
75 if (!StringUtils.isBlank(messageDelivery.getNotification().getTitle())) {
76 document.setTitle(messageDelivery.getNotification().getTitle());
77 } else {
78 LOG.error("Encountered notification with no title set: Message Delivery #" + messageDelivery.getId()
79 + ", Notification #" + messageDelivery.getNotification().getId());
80 }
81
82
83 String actionRequested;
84 if (NotificationConstants.DELIVERY_TYPES.ACK.equals(messageDelivery.getNotification().getDeliveryType())) {
85 actionRequested = NotificationConstants.KEW_CONSTANTS.ACK_AD_HOC_ROUTE;
86 } else {
87 actionRequested = NotificationConstants.KEW_CONSTANTS.FYI_AD_HOC_ROUTE;
88 }
89
90
91
92
93
94
95
96
97
98
99
100 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipal(recipientUserId);
101
102 document.adHocToPrincipal(ActionRequestType.fromCode(actionRequested), annotation, principal.getPrincipalId(),
103 messageDelivery.getNotification().getProducer().getName(), true);
104
105
106 document.route(annotation);
107
108 return document.getDocumentId();
109 }
110
111
112
113
114
115
116
117 public WorkflowDocument getNotificationWorkflowDocumentByDocumentId(String initiatorUserId,
118 String workflowDocumentId) {
119
120
121
122
123
124 return NotificationWorkflowDocument.loadNotificationDocument(initiatorUserId, workflowDocumentId);
125 }
126
127
128
129
130
131 public void clearAllFyisAndAcknowledgeNotificationWorkflowDocument(String initiatorUserId,
132 WorkflowDocument workflowDocument, String annotation) {
133 List<ActionRequest> reqs = workflowDocument.getRootActionRequests();
134 for (int i = 0; i < reqs.size(); i++) {
135 LOG.info("Action Request[" + i + "] = " + reqs.get(i).getActionRequested());
136 if (reqs.get(i).getActionRequested().equals(ActionRequestType.ACKNOWLEDGE)) {
137 workflowDocument.acknowledge(annotation);
138 } else if (reqs.get(i).getActionRequested().equals(ActionRequestType.FYI)) {
139 workflowDocument.logAnnotation(annotation);
140 workflowDocument.fyi();
141 } else {
142 throw new WorkflowRuntimeException("Invalid notification action request in workflow document ("
143 + workflowDocument.getDocumentId()
144 + ") was encountered. Should be either an acknowledge or fyi and was not.");
145 }
146 }
147 }
148
149
150
151
152 public void terminateWorkflowDocument(WorkflowDocument document) {
153 document.superUserCancel("terminating document: documentId=" + document.getDocumentId() + ", appDocId="
154 + document.getApplicationDocumentId());
155 }
156 }