View Javadoc

1   /*
2    * Copyright 2005-2007 The Kuali Foundation
3    *
4    *
5    * Licensed under the Educational Community License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    * http://www.opensource.org/licenses/ecl2.php
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * A collection of handy workflow queries to be used from style sheets.
31   *
32   * @author Kuali Rice Team (rice.collab@kuali.org)
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 		//get list of previous node names
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 		//see if node name is in the list of previous node names
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 }