001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kew.engine.simulation;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.core.api.exception.RiceRuntimeException;
020 import org.kuali.rice.kew.actionrequest.KimPrincipalRecipient;
021 import org.kuali.rice.kew.actionrequest.Recipient;
022 import org.kuali.rice.kew.api.action.RoutingReportActionToTake;
023 import org.kuali.rice.kew.api.action.RoutingReportCriteria;
024 import org.kuali.rice.kew.service.KEWServiceLocator;
025 import org.kuali.rice.kim.api.identity.Person;
026 import org.kuali.rice.kim.api.identity.principal.Principal;
027 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
028
029 import java.util.ArrayList;
030 import java.util.List;
031
032 /**
033 * Criteria which acts as input to the {@link SimulationEngine}.
034 *
035 * @author Kuali Rice Team (rice.collab@kuali.org)
036 * @see SimulationEngine
037 */
038 public class SimulationCriteria {
039
040 // fields related to document simulation
041 private String documentId;
042 private String destinationNodeName;
043 private List<Recipient> destinationRecipients = new ArrayList<Recipient>();
044
045 // fields related to document type simulation
046 private String documentTypeName;
047 private String xmlContent;
048 private List<String> nodeNames = new ArrayList<String>();
049 private List<String> ruleTemplateNames = new ArrayList<String>();
050
051 // fields related to both simulation types
052 private Boolean activateRequests;
053 private Person routingUser;
054 private List<SimulationActionToTake> actionsToTake = new ArrayList<SimulationActionToTake>();
055 private boolean flattenNodes;
056
057 public SimulationCriteria() {
058 this.activateRequests = null;
059 this.flattenNodes = false;
060 }
061
062 public static SimulationCriteria createSimulationCritUsingDocumentId(String documentId) {
063 return new SimulationCriteria(null, documentId);
064 }
065
066 public static SimulationCriteria createSimulationCritUsingDocTypeName(String documentTypeName) {
067 return new SimulationCriteria(documentTypeName, null);
068 }
069
070 private SimulationCriteria(String documentTypeName, String documentId) {
071 if (StringUtils.isNotBlank(documentId)) {
072 this.documentId = documentId;
073 } else if (StringUtils.isNotBlank(documentTypeName)) {
074 this.documentTypeName = documentTypeName;
075 }
076 }
077
078 public Boolean isActivateRequests() {
079 return this.activateRequests;
080 }
081
082 public void setActivateRequests(Boolean activateRequests) {
083 this.activateRequests = activateRequests;
084 }
085
086 public String getDocumentId() {
087 return documentId;
088 }
089
090 public void setDocumentId(String documentId) {
091 this.documentId = documentId;
092 }
093
094 public String getDestinationNodeName() {
095 return destinationNodeName;
096 }
097
098 public void setDestinationNodeName(String destinationNodeName) {
099 this.destinationNodeName = destinationNodeName;
100 }
101
102 public List<Recipient> getDestinationRecipients() {
103 return destinationRecipients;
104 }
105
106 public void setDestinationRecipients(List<Recipient> destinationRecipients) {
107 this.destinationRecipients = destinationRecipients;
108 }
109
110 public String getDocumentTypeName() {
111 return documentTypeName;
112 }
113
114 public void setDocumentTypeName(String documentTypeName) {
115 this.documentTypeName = documentTypeName;
116 }
117
118 public List<String> getRuleTemplateNames() {
119 return ruleTemplateNames;
120 }
121
122 public void setRuleTemplateNames(List<String> ruleTemplateNames) {
123 this.ruleTemplateNames = ruleTemplateNames;
124 }
125
126 public String getXmlContent() {
127 return xmlContent;
128 }
129
130 public void setXmlContent(String xmlContent) {
131 this.xmlContent = xmlContent;
132 }
133
134 public List<String> getNodeNames() {
135 return nodeNames;
136 }
137
138 public void setNodeNames(List<String> nodeNames) {
139 this.nodeNames = nodeNames;
140 }
141
142 public boolean isDocumentSimulation() {
143 return documentId != null;
144 }
145
146 public boolean isDocumentTypeSimulation() {
147 return !org.apache.commons.lang.StringUtils.isEmpty(documentTypeName);
148 }
149
150 public List<SimulationActionToTake> getActionsToTake() {
151 return actionsToTake;
152 }
153
154 public void setActionsToTake(List<SimulationActionToTake> actionsToTake) {
155 this.actionsToTake = actionsToTake;
156 }
157
158 public Person getRoutingUser() {
159 return routingUser;
160 }
161
162 public void setRoutingUser(Person routingUser) {
163 this.routingUser = routingUser;
164 }
165
166 public boolean isFlattenNodes() {
167 return this.flattenNodes;
168 }
169
170 public void setFlattenNodes(boolean flattenNodes) {
171 this.flattenNodes = flattenNodes;
172 }
173
174 public static SimulationCriteria from(RoutingReportCriteria criteriaVO) {
175 if (criteriaVO == null) {
176 return null;
177 }
178 SimulationCriteria criteria = new SimulationCriteria();
179 criteria.setDestinationNodeName(criteriaVO.getTargetNodeName());
180 criteria.setDocumentId(criteriaVO.getDocumentId());
181 criteria.setDocumentTypeName(criteriaVO.getDocumentTypeName());
182 criteria.setXmlContent(criteriaVO.getXmlContent());
183 criteria.setActivateRequests(criteriaVO.isActivateRequests());
184 criteria.setFlattenNodes(criteriaVO.isFlattenNodes());
185 if (criteriaVO.getRoutingPrincipalId() != null) {
186 Principal kPrinc = KEWServiceLocator.getIdentityHelperService().
187 getPrincipal(criteriaVO.getRoutingPrincipalId());
188 Person user = KimApiServiceLocator.getPersonService().getPerson(kPrinc.getPrincipalId());
189 if (user == null) {
190 throw new RiceRuntimeException(
191 "Could not locate user for the given id: " + criteriaVO.getRoutingPrincipalId());
192 }
193 criteria.setRoutingUser(user);
194 }
195 if (criteriaVO.getRuleTemplateNames() != null) {
196 criteria.setRuleTemplateNames(criteriaVO.getRuleTemplateNames());
197 }
198 if (criteriaVO.getNodeNames() != null) {
199 criteria.setNodeNames(criteriaVO.getNodeNames());
200 }
201 if (criteriaVO.getTargetPrincipalIds() != null) {
202 for (String targetPrincipalId : criteriaVO.getTargetPrincipalIds()) {
203 Principal principal = KEWServiceLocator.getIdentityHelperService().getPrincipal(targetPrincipalId);
204 criteria.getDestinationRecipients().add(new KimPrincipalRecipient(principal));
205 }
206 }
207
208 if (criteriaVO.getActionsToTake() != null) {
209 for (RoutingReportActionToTake actionToTake : criteriaVO.getActionsToTake()) {
210 criteria.getActionsToTake().add(SimulationActionToTake.from(actionToTake));
211 }
212 }
213
214 return criteria;
215 }
216 }