001 /**
002 * Copyright 2005-2012 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.rule;
017
018 import org.apache.commons.lang.ObjectUtils;
019 import org.apache.commons.lang.builder.HashCodeBuilder;
020 import org.hibernate.annotations.GenericGenerator;
021 import org.hibernate.annotations.Parameter;
022 import org.kuali.rice.core.api.reflect.ObjectDefinition;
023 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
024 import org.kuali.rice.kew.actionrequest.ActionRequestValue;
025 import org.kuali.rice.kew.api.rule.RuleResponsibilityContract;
026 import org.kuali.rice.kew.service.KEWServiceLocator;
027 import org.kuali.rice.kew.api.KewApiConstants;
028 import org.kuali.rice.kim.api.group.Group;
029 import org.kuali.rice.kim.api.identity.principal.Principal;
030 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
031 import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
032
033 import javax.persistence.Column;
034 import javax.persistence.Entity;
035 import javax.persistence.FetchType;
036 import javax.persistence.GeneratedValue;
037 import javax.persistence.Id;
038 import javax.persistence.JoinColumn;
039 import javax.persistence.ManyToOne;
040 import javax.persistence.Table;
041 import java.util.List;
042
043
044 /**
045 * A model bean representing the responsibility of a user, workgroup, or role
046 * to perform some action on a document. Used by the rule system to
047 * identify the appropriate responsibile parties to generate
048 * {@link ActionRequestValue}s to.
049 *
050 * @author Kuali Rice Team (rice.collab@kuali.org)
051 */
052 @Entity
053 @Table(name="KREW_RULE_RSP_T")
054 //@Sequence(name="KREW_RSP_S", property="id")
055 public class RuleResponsibilityBo extends PersistableBusinessObjectBase implements RuleResponsibilityContract {
056
057 private static final long serialVersionUID = -1565688857123316797L;
058 @Id
059 @GeneratedValue(generator="KREW_RSP_S")
060 @GenericGenerator(name="KREW_RSP_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={
061 @Parameter(name="sequence_name",value="KREW_RSP_S"),
062 @Parameter(name="value_column",value="id")
063 })
064 @Column(name="RULE_RSP_ID")
065 private String id;
066 @Column(name="RSP_ID")
067 private String responsibilityId;
068 @Column(name="RULE_ID", insertable=false, updatable=false)
069 private String ruleBaseValuesId;
070 @Column(name="ACTN_RQST_CD")
071 private String actionRequestedCd;
072 @Column(name="NM")
073 private String ruleResponsibilityName;
074 @Column(name="TYP")
075 private String ruleResponsibilityType;
076 @Column(name="PRIO")
077 private Integer priority;
078 @Column(name="APPR_PLCY")
079 private String approvePolicy;
080
081 @ManyToOne(fetch=FetchType.EAGER)
082 @JoinColumn(name="RULE_ID")
083 private RuleBaseValues ruleBaseValues;
084 //@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE},
085 // mappedBy="ruleResponsibility")
086 //private List<RuleDelegation> delegationRules = new ArrayList<RuleDelegation>();
087
088 public Principal getPrincipal()
089 {
090 if (isUsingPrincipal()) {
091 return KEWServiceLocator.getIdentityHelperService().getPrincipal(ruleResponsibilityName);
092 }
093 return null;
094 }
095
096 public Group getGroup() {
097 if (isUsingGroup()) {
098 return KimApiServiceLocator.getGroupService().getGroup(ruleResponsibilityName);
099 }
100 return null;
101 }
102
103 public String getRole() {
104 if (isUsingRole()) {
105 return ruleResponsibilityName;
106 }
107 return null;
108 }
109
110 public String getResolvedRoleName() {
111 if (isUsingRole()) {
112 return getRole().substring(getRole().indexOf("!") + 1, getRole().length());
113 }
114 return null;
115 }
116
117 public String getRoleAttributeName() {
118 return getRole().substring(0, getRole().indexOf("!"));
119 }
120
121 public RoleAttribute resolveRoleAttribute() {
122 if (isUsingRole()) {
123 String attributeName = getRoleAttributeName();
124 return (RoleAttribute) GlobalResourceLoader.getResourceLoader().getObject(new ObjectDefinition(attributeName));
125 }
126 return null;
127 }
128
129 @Override
130 public boolean isUsingRole() {
131 return (ruleResponsibilityName != null && ruleResponsibilityType != null && ruleResponsibilityType.equals(KewApiConstants.RULE_RESPONSIBILITY_ROLE_ID));
132 }
133
134 @Override
135 public boolean isUsingPrincipal() {
136 return (ruleResponsibilityName != null && !ruleResponsibilityName.trim().equals("") && ruleResponsibilityType != null && ruleResponsibilityType.equals(KewApiConstants.RULE_RESPONSIBILITY_WORKFLOW_ID));
137 }
138
139 @Override
140 public boolean isUsingGroup() {
141 return (ruleResponsibilityName != null && !ruleResponsibilityName.trim().equals("") && ruleResponsibilityType != null && ruleResponsibilityType.equals(KewApiConstants.RULE_RESPONSIBILITY_GROUP_ID));
142 }
143
144 public String getRuleBaseValuesId() {
145 return ruleBaseValuesId;
146 }
147
148 public void setRuleBaseValuesId(String ruleBaseValuesId) {
149 this.ruleBaseValuesId = ruleBaseValuesId;
150 }
151
152 public RuleBaseValues getRuleBaseValues() {
153 return ruleBaseValues;
154 }
155
156 public void setRuleBaseValues(RuleBaseValues ruleBaseValues) {
157 this.ruleBaseValues = ruleBaseValues;
158 }
159
160 public String getActionRequestedCd() {
161 return actionRequestedCd;
162 }
163
164 public void setActionRequestedCd(String actionRequestedCd) {
165 this.actionRequestedCd = actionRequestedCd;
166 }
167
168 public String getId() {
169 return id;
170 }
171
172 public void setId(String ruleResponsibilityId) {
173 this.id = ruleResponsibilityId;
174 }
175 public Integer getPriority() {
176 return priority;
177 }
178
179 public void setPriority(Integer priority) {
180 this.priority = priority;
181 }
182
183 public String getApprovePolicy() {
184 return approvePolicy;
185 }
186
187 public void setApprovePolicy(String approvePolicy) {
188 this.approvePolicy = approvePolicy;
189 }
190
191 public Object copy(boolean preserveKeys) {
192 RuleResponsibilityBo ruleResponsibilityClone = new RuleResponsibilityBo();
193 ruleResponsibilityClone.setApprovePolicy(getApprovePolicy());
194 if (actionRequestedCd != null) {
195 ruleResponsibilityClone.setActionRequestedCd(actionRequestedCd);
196 }
197 if (id != null && preserveKeys) {
198 ruleResponsibilityClone.setId(id);
199 }
200
201 if (responsibilityId != null) {
202 ruleResponsibilityClone.setResponsibilityId(responsibilityId);
203 }
204
205 if (ruleResponsibilityName != null) {
206 ruleResponsibilityClone.setRuleResponsibilityName(ruleResponsibilityName);
207 }
208 if (ruleResponsibilityType != null) {
209 ruleResponsibilityClone.setRuleResponsibilityType(ruleResponsibilityType);
210 }
211 if (priority != null) {
212 ruleResponsibilityClone.setPriority(priority);
213 }
214 // if (delegationRules != null) {
215 // for (Iterator iter = delegationRules.iterator(); iter.hasNext();) {
216 // RuleDelegation delegation = (RuleDelegation) iter.next();
217 // RuleDelegation delegationClone = (RuleDelegation)delegation.copy(preserveKeys);
218 // delegationClone.setRuleResponsibility(ruleResponsibilityClone);
219 // ruleResponsibilityClone.getDelegationRules().add(delegationClone);
220 //
221 // }
222 // }
223 return ruleResponsibilityClone;
224 }
225
226 public String getRuleResponsibilityName() {
227 return ruleResponsibilityName;
228 }
229
230 public void setRuleResponsibilityName(String ruleResponsibilityName) {
231 this.ruleResponsibilityName = ruleResponsibilityName;
232 }
233
234 public String getRuleResponsibilityType() {
235 return ruleResponsibilityType;
236 }
237
238 public void setRuleResponsibilityType(String ruleResponsibilityType) {
239 this.ruleResponsibilityType = ruleResponsibilityType;
240 }
241
242 public String getResponsibilityId() {
243 return responsibilityId;
244 }
245 public void setResponsibilityId(String responsibilityId) {
246 this.responsibilityId = responsibilityId;
247 }
248
249 public List<RuleDelegationBo> getDelegationRules() {
250 return KEWServiceLocator.getRuleDelegationService().findByResponsibilityId(getResponsibilityId());
251 }
252
253 public RuleDelegationBo getDelegationRule(int index) {
254 return getDelegationRules().get(index);
255 }
256
257 // public boolean isDelegating() {
258 // return !getDelegationRules().isEmpty();
259 // }
260 //
261 // public List getDelegationRules() {
262 // return delegationRules;
263 // }
264 // public void setDelegationRules(List delegationRules) {
265 // this.delegationRules = delegationRules;
266 // }
267 //
268 // public RuleDelegation getDelegationRule(int index) {
269 // while (getDelegationRules().size() <= index) {
270 // RuleDelegation ruleDelegation = new RuleDelegation();
271 // ruleDelegation.setRuleResponsibility(this);
272 // ruleDelegation.setDelegationRuleBaseValues(new RuleBaseValues());
273 // getDelegationRules().add(ruleDelegation);
274 // }
275 // return (RuleDelegation) getDelegationRules().get(index);
276 // }
277
278 // convenience methods for the web-tier
279
280 public String getActionRequestedDisplayValue() {
281 return KewApiConstants.ACTION_REQUEST_CODES.get(getActionRequestedCd());
282 }
283
284 public String getRuleResponsibilityTypeDisplayValue() {
285 return KewApiConstants.RULE_RESPONSIBILITY_TYPES.get(getRuleResponsibilityType());
286 }
287
288 public boolean equals(Object o) {
289 if (o == null) return false;
290 if (!(o instanceof RuleResponsibilityBo)) return false;
291 RuleResponsibilityBo pred = (RuleResponsibilityBo) o;
292 return ObjectUtils.equals(ruleResponsibilityName, pred.getRuleResponsibilityName()) &&
293 ObjectUtils.equals(actionRequestedCd, pred.getActionRequestedCd()) &&
294 ObjectUtils.equals(priority, pred.getPriority()) &&
295 ObjectUtils.equals(approvePolicy, pred.getApprovePolicy());
296 }
297
298 /**
299 * @see java.lang.Object#hashCode()
300 */
301 @Override
302 public int hashCode() {
303 return new HashCodeBuilder()
304 .append(this.actionRequestedCd)
305 .append(this.approvePolicy)
306 .append(this.priority)
307 .append(this.ruleResponsibilityName).toHashCode();
308 }
309
310 @Override
311 public String getGroupId() {
312 if (!isUsingGroup()) {
313 return null;
314 }
315 return getGroup().getId();
316 }
317
318 @Override
319 public String getPrincipalId() {
320 if (getPrincipal() == null) {
321 return null;
322 }
323 return getPrincipal().getPrincipalId();
324 }
325
326 @Override
327 public String getRoleName() {
328 return getRole();
329 }
330
331 public static org.kuali.rice.kew.api.rule.RuleResponsibility to(RuleResponsibilityBo bo) {
332 if (bo == null) {
333 return null;
334 }
335 return org.kuali.rice.kew.api.rule.RuleResponsibility.Builder.create(bo).build();
336 /*org.kuali.rice.kew.api.rule.RuleResponsibility.Builder builder = org.kuali.rice.kew.api.rule.RuleResponsibility.Builder.create();
337 builder.setPriority(bo.getPriority());
338 builder.setResponsibilityId(bo.getResponsibilityId());
339 builder.setActionRequestedCd(bo.getActionRequestedCd());
340 builder.setApprovePolicy(bo.getApprovePolicy());
341 builder.setPrincipalId(bo.getPrincipal() == null ? null : bo.getPrincipal().getPrincipalId());
342 builder.setGroupId(bo.getGroup() == null ? null : bo.getGroup().getId());
343 builder.setRoleName(bo.getResolvedRoleName());
344 if (CollectionUtils.isNotEmpty(bo.getDelegationRules())) {
345 List<org.kuali.rice.kew.api.rule.RuleDelegation.Builder> delegationRuleBuilders =
346 new ArrayList<org.kuali.rice.kew.api.rule.RuleDelegation.Builder>();
347 for (RuleDelegation delegationRule : bo.getDelegationRules()) {
348 delegationRuleBuilders.add(
349 org.kuali.rice.kew.api.rule.RuleDelegation.Builder.create(RuleDelegation.to(delegationRule)));
350 }
351 builder.setDelegationRules(delegationRuleBuilders);
352 } else {
353 builder.setDelegationRules(Collections.<org.kuali.rice.kew.api.rule.RuleDelegation.Builder>emptyList());
354 }
355 return builder.build();*/
356 }
357 }