001/** 002 * Copyright 2005-2016 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 */ 016package org.kuali.rice.kew.impl.peopleflow; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.core.api.delegation.DelegationType; 020import org.kuali.rice.core.api.membership.MemberType; 021import org.kuali.rice.kew.api.action.ActionRequestPolicy; 022import org.kuali.rice.kew.api.peopleflow.PeopleFlowDelegate; 023import org.kuali.rice.kew.api.peopleflow.PeopleFlowDelegateContract; 024import org.kuali.rice.kim.api.identity.Person; 025import org.kuali.rice.kim.api.services.KimApiServiceLocator; 026import org.kuali.rice.kim.framework.group.GroupEbo; 027import org.kuali.rice.kim.framework.role.RoleEbo; 028import org.kuali.rice.krad.bo.BusinessObject; 029import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator; 030import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 031import org.kuali.rice.krad.service.ModuleService; 032 033import javax.persistence.Column; 034import javax.persistence.Entity; 035import javax.persistence.GeneratedValue; 036import javax.persistence.Id; 037import javax.persistence.JoinColumn; 038import javax.persistence.ManyToOne; 039import javax.persistence.Table; 040import javax.persistence.Transient; 041import javax.persistence.Version; 042import java.io.Serializable; 043 044@Entity 045@Table(name = "KREW_PPL_FLW_DLGT_T") 046public class PeopleFlowDelegateBo implements Serializable, PeopleFlowDelegateContract, BusinessObject { 047 048 @Id 049 @GeneratedValue(generator = "KREW_PPL_FLW_DLGT_S") 050 @PortableSequenceGenerator(name = "KREW_PPL_FLW_DLGT_S") 051 @Column(name = "PPL_FLW_DLGT_ID", nullable = false) 052 private String id; 053 054 @Column(name = "MBR_ID", nullable = false) 055 private String memberId; 056 057 @Column(name = "MBR_TYP_CD", nullable = false) 058 private String memberTypeCode; 059 060 @Column(name = "ACTN_RQST_PLCY_CD") 061 private String actionRequestPolicyCode; 062 063 @Column(name = "DLGN_TYP_CD", nullable = false) 064 private String delegationTypeCode; 065 066 @Column(name = "RSP_ID", nullable = false) 067 private String responsibilityId; 068 069 @Version 070 @Column(name = "VER_NBR", nullable = false) 071 private Long versionNumber; 072 073 @ManyToOne 074 @JoinColumn(name = "PPL_FLW_MBR_ID", nullable = false) 075 private PeopleFlowMemberBo peopleFlowMember; 076 077 // not-persisted 078 @Transient 079 private String memberName; 080 081 @Transient 082 private Person person; 083 084 @Transient 085 private GroupEbo group; 086 087 @Transient 088 private RoleEbo role; 089 090 public static PeopleFlowDelegate to(PeopleFlowDelegateBo delegateBo) { 091 if (delegateBo == null) { 092 return null; 093 } 094 PeopleFlowDelegate.Builder builder = PeopleFlowDelegate.Builder.create(delegateBo); 095 096 return builder.build(); 097 } 098 099 public static PeopleFlowDelegateBo from(PeopleFlowDelegate delegate, PeopleFlowMemberBo peopleFlowMember) { 100 101 if (delegate == null) { 102 return null; 103 } 104 PeopleFlowDelegateBo delegateBo = new PeopleFlowDelegateBo(); 105 delegateBo.setPeopleFlowMember(peopleFlowMember); 106 delegateBo.setMemberId(delegate.getMemberId()); 107 delegateBo.setMemberType(delegate.getMemberType()); 108 if (delegate.getActionRequestPolicy() != null) { 109 delegateBo.setActionRequestPolicyCode(delegate.getActionRequestPolicy().getCode()); 110 } 111 if (delegate.getDelegationType() != null) { 112 delegateBo.setDelegationTypeCode(delegate.getDelegationType().getCode()); 113 } 114 delegateBo.setResponsibilityId(delegate.getResponsibilityId()); 115 return delegateBo; 116 } 117 118 public String getId() { 119 return id; 120 } 121 122 public void setId(String id) { 123 this.id = id; 124 } 125 126 public String getMemberId() { 127 return memberId; 128 } 129 130 public String getMemberTypeCode() { 131 return memberTypeCode; 132 } 133 134 public void setMemberTypeCode(String memberTypeCode) { 135 this.memberTypeCode = memberTypeCode; 136 } 137 138 public String getActionRequestPolicyCode() { 139 return actionRequestPolicyCode; 140 } 141 142 public void setActionRequestPolicyCode(String actionRequestPolicyCode) { 143 this.actionRequestPolicyCode = actionRequestPolicyCode; 144 } 145 146 public String getDelegationTypeCode() { 147 return delegationTypeCode; 148 } 149 150 public void setDelegationTypeCode(String delegationTypeCode) { 151 this.delegationTypeCode = delegationTypeCode; 152 } 153 154 public String getResponsibilityId() { 155 return responsibilityId; 156 } 157 158 public void setResponsibilityId(String responsibilityId) { 159 this.responsibilityId = responsibilityId; 160 } 161 162 public Long getVersionNumber() { 163 return versionNumber; 164 } 165 166 public void setVersionNumber(Long versionNumber) { 167 this.versionNumber = versionNumber; 168 } 169 170 public PeopleFlowMemberBo getPeopleFlowMember() { 171 return peopleFlowMember; 172 } 173 174 public void setPeopleFlowMember(PeopleFlowMemberBo peopleFlowMember) { 175 this.peopleFlowMember = peopleFlowMember; 176 } 177 178 public String getMemberName() { 179 return memberName; 180 } 181 182 public void setPerson(Person person) { 183 this.person = person; 184 } 185 186 public Person getPerson() { 187 if (MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) { 188 if ((this.person == null) || !person.getPrincipalId().equals(memberId) || !person.getPrincipalName().equals(memberName)) { 189 // use member name first 190 if (StringUtils.isNotBlank(memberName)) { 191 this.person = KimApiServiceLocator.getPersonService().getPersonByPrincipalName(memberName); 192 } else { 193 this.person = KimApiServiceLocator.getPersonService().getPerson(memberId); 194 } 195 } 196 197 if (this.person != null) { 198 memberId = person.getPrincipalId(); 199 memberName = person.getPrincipalName(); 200 201 return this.person; 202 } 203 } 204 205 Person newPerson = null; 206 // TODO - figure out a better way to do this. 207 try { 208 newPerson = KimApiServiceLocator.getPersonService().getPersonImplementationClass().newInstance(); 209 } catch(InstantiationException ie) { 210 throw new IllegalStateException(ie); 211 } catch (IllegalAccessException iae) { 212 throw new IllegalStateException(iae); 213 } 214 215 return newPerson; 216 } 217 218 public GroupEbo getGroup() { 219 if (MemberType.GROUP.getCode().equals(memberTypeCode)) { 220 ModuleService eboModuleService = KRADServiceLocatorWeb.getKualiModuleService().getResponsibleModuleService(GroupEbo.class); 221 group = eboModuleService.retrieveExternalizableBusinessObjectIfNecessary(this, group, "group"); 222 if (group != null) { 223 memberId = group.getId(); 224 memberName = group.getNamespaceCode() + " : " + group.getName(); 225 226 } 227 } 228 return group; 229 } 230 231 232 public RoleEbo getRole() { 233 if (MemberType.ROLE.getCode().equals(memberTypeCode)) { 234 ModuleService eboModuleService = KRADServiceLocatorWeb.getKualiModuleService().getResponsibleModuleService(RoleEbo.class); 235 role = eboModuleService.retrieveExternalizableBusinessObjectIfNecessary(this, role, "role"); 236 if (role != null) { 237 memberId = role.getId(); 238 memberName = role.getNamespaceCode() + " : " + role.getName(); 239 } 240 } 241 return role; 242 } 243 244 public void setMemberName(String memberName) throws InstantiationException, IllegalAccessException { 245 this.memberName = memberName; 246 247 // trigger update of related object (only person can be updated by name) 248 if (MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) { 249 getPerson(); 250 } 251 } 252 253 public void setMemberId(String memberId) { 254 this.memberId = memberId; 255 updateRelatedObject(); 256 } 257 258 // trigger update of related object 259 public void updateRelatedObject() { 260 if (MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) { 261 getPerson(); 262 } else if (MemberType.GROUP.getCode().equals(memberTypeCode)) { 263 getGroup(); 264 } else if (MemberType.ROLE.getCode().equals(memberTypeCode)) { 265 getRole(); 266 } 267 } 268 269 @Override 270 public MemberType getMemberType() { 271 return MemberType.fromCode(memberTypeCode); 272 } 273 274 public void setMemberType(MemberType type) { 275 memberTypeCode = type.getCode(); 276 } 277 278 @Override 279 public ActionRequestPolicy getActionRequestPolicy() { 280 return ActionRequestPolicy.fromCode(actionRequestPolicyCode); 281 } 282 283 @Override 284 public DelegationType getDelegationType() { 285 return DelegationType.fromCode(delegationTypeCode); 286 } 287 288 public void setDelegationType(DelegationType delegationType) { 289 this.delegationTypeCode = delegationType.getCode(); 290 } 291 292 @Override 293 public void refresh() { 294 //To change body of implemented methods use File | Settings | File Templates. 295 } 296}