1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.rice.kew.edl;
18
19 import org.kuali.rice.core.exception.RiceRuntimeException;
20 import org.kuali.rice.kew.dto.RouteNodeInstanceDTO;
21 import org.kuali.rice.kew.exception.WorkflowException;
22 import org.kuali.rice.kew.exception.WorkflowRuntimeException;
23 import org.kuali.rice.kew.service.WorkflowInfo;
24 import org.kuali.rice.kew.util.Utilities;
25 import org.kuali.rice.kew.web.session.UserSession;
26 import org.kuali.rice.kim.bo.Person;
27
28
29
30
31
32
33
34
35 public class WorkflowFunctions {
36
37
38 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(WorkflowFunctions.class);
39
40 public static boolean isUserInitiator(String id) throws WorkflowException {
41 boolean initiator = false;
42 UserSession userSession = UserSession.getAuthenticatedUser();
43 if (userSession != null) {
44 try {
45 long documentId = Long.parseLong(id.trim());
46 WorkflowInfo workflowInfo = new WorkflowInfo();
47 if (userSession.getPrincipalId().equals(workflowInfo.getRouteHeader(documentId).getInitiatorPrincipalId())) {
48 initiator = true;
49 }
50 } catch (Exception e) {
51 LOG.debug("Exception encountered trying to determine if user is the document initiator:" + e );
52 }
53 }
54 return initiator;
55 }
56
57 public static boolean isUserRouteLogAuthenticated(String id) {
58 boolean authenticated=false;
59 WorkflowInfo workflowInfo = new WorkflowInfo();
60 UserSession userSession=UserSession.getAuthenticatedUser();
61 if(userSession!=null){
62 String principalId = userSession.getPrincipalId();
63 try {
64 Long routeHeaderId = new Long(id);
65 authenticated = workflowInfo.isUserAuthenticatedByRouteLog(routeHeaderId, principalId, true);
66 } catch (NumberFormatException e) {
67 LOG.debug("Invalid format routeHeaderId (should be LONG): " + id);
68 } catch (WorkflowException e) {
69 LOG.debug("Error checking if user is route log authenticated: userId: " + principalId + ";routeHeaderId: " + id);
70
71 } catch (RiceRuntimeException e) {
72 LOG.error("Runtime Exception checking if user is route log authenticated: userId: " + principalId + ";routeHeaderId: " + id);
73
74 }
75 }
76
77 return authenticated;
78 }
79
80 public static boolean isPrincipalIdAuthenticated(String principalId) {
81 return UserSession.getAuthenticatedUser().getPrincipalId().equals(principalId);
82 }
83
84 public static boolean isPrincipalNameAuthenticated(String principalName) {
85 return UserSession.getAuthenticatedUser().getPrincipalName().equals(principalName);
86 }
87
88 public static boolean isEmployeeIdAuthenticated(String employeeId) {
89 return UserSession.getAuthenticatedUser().getPerson().getEmployeeId().equals(employeeId);
90 }
91
92 public static boolean isUserInGroup(String namespace, String groupName){
93 boolean isUserInGroup=false;
94 UserSession userSession=UserSession.getAuthenticatedUser();
95 if(userSession!=null){
96 if(!Utilities.isEmpty(groupName)){
97
98 try{
99 isUserInGroup = userSession.isMemberOfGroupWithName(namespace, groupName);
100 }catch(Exception e){
101 LOG.error("Exception encountered trying to determine if user is member of a group: userId: " + userSession.getPrincipalId() + ";groupNamespace/Name: "
102 + namespace + "/" + groupName + " resulted in error:" + e);
103 }
104
105 }
106 }
107 return isUserInGroup;
108 }
109
110
111 public static Person getAuthenticatedPerson(){
112 UserSession userSession=UserSession.getAuthenticatedUser();
113 Person user = userSession.getPerson();
114 return user;
115 }
116
117 public static String getUserId() {
118 return getAuthenticatedPerson().getPrincipalId();
119 }
120
121 public static String getLastName() {
122 return getAuthenticatedPerson().getLastName();
123 }
124
125 public static String getGivenName() {
126 return getAuthenticatedPerson().getFirstName();
127 }
128
129 public static String getEmailAddress() {
130 return getAuthenticatedPerson().getEmailAddress();
131 }
132
133 public static boolean isNodeInPreviousNodeList(String nodeName, String id) {
134 LOG.debug("nodeName came in as: " + nodeName);
135 LOG.debug("id came in as: " + id);
136
137 String[] previousNodeNames;
138 WorkflowInfo workflowInfo = new WorkflowInfo();
139 try {
140 previousNodeNames = workflowInfo.getPreviousRouteNodeNames(new Long(id));
141 } catch (Exception e) {
142 throw new WorkflowRuntimeException("Problem generating list of previous node names for documentID = " + id, e);
143 }
144
145 for (int i = 0; i < previousNodeNames.length; i++) {
146 if (previousNodeNames[i].equals(nodeName)) {
147 return true;
148 }
149 }
150 return false;
151 }
152
153 public static String escapeJavascript(String value) {
154 return value.replace("\\", "\\\\").replace("\"", "\\\"");
155 }
156
157 public static boolean isNodeBetween(String firstNodeName, String lastNodeName, String id) {
158 if (isNodeInPreviousNodeList(firstNodeName, id)) {
159 if (isNodeInPreviousNodeList(lastNodeName, id)) {
160 return false;
161 }else {
162 return true;
163 }
164 } else {
165 return false;
166 }
167 }
168
169 public static boolean isAtNode(String documentId, String nodeName) throws Exception {
170 WorkflowInfo workflowInfo = new WorkflowInfo();
171 RouteNodeInstanceDTO[] activeNodeInstances = workflowInfo.getActiveNodeInstances(new Long(documentId));
172 for (RouteNodeInstanceDTO nodeInstance : activeNodeInstances) {
173 if (nodeInstance.getName().equals(nodeName)) {
174 return true;
175 }
176 }
177 return false;
178 }
179
180 public static boolean hasActiveNode(String documentId) throws Exception {
181 WorkflowInfo workflowInfo = new WorkflowInfo();
182 RouteNodeInstanceDTO[] activeNodeInstances = workflowInfo.getActiveNodeInstances(new Long(documentId));
183 if (activeNodeInstances.length > 0) {
184 return true;
185 }
186 return false;
187 }
188
189 public static String getAuthenticationId() {
190 UserSession userSession=UserSession.getAuthenticatedUser();
191 return userSession.getPrincipalName();
192
193 }
194
195 }