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 }