View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.impl.identity;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.core.api.criteria.QueryByCriteria;
20  import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
21  import org.kuali.rice.kim.api.identity.IdentityService;
22  import org.kuali.rice.kim.api.identity.CodedAttribute;
23  import org.kuali.rice.kim.api.identity.address.EntityAddress;
24  import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation;
25  import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationType;
26  import org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship;
27  import org.kuali.rice.kim.api.identity.email.EntityEmail;
28  import org.kuali.rice.kim.api.identity.employment.EntityEmployment;
29  import org.kuali.rice.kim.api.identity.entity.Entity;
30  import org.kuali.rice.kim.api.identity.entity.EntityDefault;
31  import org.kuali.rice.kim.api.identity.entity.EntityDefaultQueryResults;
32  import org.kuali.rice.kim.api.identity.entity.EntityQueryResults;
33  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier;
34  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierType;
35  import org.kuali.rice.kim.api.identity.name.EntityName;
36  import org.kuali.rice.kim.api.identity.personal.EntityBioDemographics;
37  import org.kuali.rice.kim.api.identity.personal.EntityEthnicity;
38  import org.kuali.rice.kim.api.identity.phone.EntityPhone;
39  import org.kuali.rice.kim.api.identity.principal.EntityNamePrincipalName;
40  import org.kuali.rice.kim.api.identity.principal.Principal;
41  import org.kuali.rice.kim.api.identity.principal.PrincipalQueryResults;
42  import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences;
43  import org.kuali.rice.kim.api.identity.residency.EntityResidency;
44  import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo;
45  import org.kuali.rice.kim.api.identity.visa.EntityVisa;
46  import org.kuali.rice.krad.util.ObjectUtils;
47  
48  import javax.jws.WebParam;
49  import java.util.ArrayList;
50  import java.util.List;
51  import java.util.Map;
52  
53  /**
54   * This IdentityService implementation is largely just a knee-jerk delegator, except for
55   * getters returning {@link EntityDefault} in which case the IdentityArchiveService
56   * will be invoked if the inner IndentityService impl returns null.
57   * 
58   * @author Kuali Rice Team (rice.collab@kuali.org)
59   */
60  public class IdentityCurrentAndArchivedServiceImpl implements IdentityService {
61  	private final IdentityArchiveService identityArchiveService;
62  	private final IdentityService innerIdentityService;
63  	
64  	/**
65  	 * This constructs a IdentityCurrentAndArchivedServiceImpl, injecting the
66  	 * needed services.
67  	 */
68  	public IdentityCurrentAndArchivedServiceImpl(IdentityService innerIdentityService, 
69  			IdentityArchiveService identityArchiveService) {
70  		this.innerIdentityService = innerIdentityService;
71  		this.identityArchiveService = identityArchiveService;
72  	}
73  	
74  	/**
75  	 * @see org.kuali.rice.kim.api.identity.IdentityService#getAddressType(java.lang.String)
76  	 */
77      @Override
78  	public CodedAttribute getAddressType(String code) {
79  		return getInnerIdentityService().getAddressType(code);
80  	}
81  
82      @Override
83      public List<CodedAttribute> findAllAddressTypes() {
84          return getInnerIdentityService().findAllAddressTypes();
85      }
86  
87      @Override
88  	public EntityAffiliationType getAffiliationType(String code) {
89  		return getInnerIdentityService().getAffiliationType(code);
90  	}
91  
92      @Override
93      public List<EntityAffiliationType> findAllAffiliationTypes() {
94          return getInnerIdentityService().findAllAffiliationTypes();
95      }
96  
97      /**
98  	 * @see org.kuali.rice.kim.api.identity.IdentityService#getCitizenshipStatus(java.lang.String)
99  	 */       
100     @Override
101 	public CodedAttribute getCitizenshipStatus(String code) {
102 		return CodedAttribute.Builder.create(getInnerIdentityService().getCitizenshipStatus(code)).build();
103 	}
104 
105     @Override
106     public List<CodedAttribute> findAllCitizenshipStatuses() {
107         return getInnerIdentityService().findAllCitizenshipStatuses();
108     }
109 
110     @Override
111 	public EntityNamePrincipalName getDefaultNamesForPrincipalId(String principalId) {
112     	EntityNamePrincipalName name = getInnerIdentityService().getDefaultNamesForPrincipalId(principalId);
113     	if(name == null || ObjectUtils.isNull(name.getDefaultName()) || StringUtils.isBlank(name.getPrincipalName()) || StringUtils.isBlank(name.getDefaultName().getCompositeName())) {
114     		EntityDefault defaultEntity = this.getEntityDefaultByPrincipalId(principalId);
115 			EntityNamePrincipalName.Builder nameBuilder = EntityNamePrincipalName.Builder.create();
116 			for(Principal principal : defaultEntity.getPrincipals()) {
117 				nameBuilder.setPrincipalName(principal.getPrincipalName());
118 			}
119 			nameBuilder.setDefaultName(EntityName.Builder.create(defaultEntity.getName()));
120 			if (StringUtils.isBlank(defaultEntity.getName().getCompositeName())) {
121 				String formattedName = defaultEntity.getName().getLastName() + ", " + defaultEntity.getName().getFirstName() + (defaultEntity.getName().getMiddleName()==null?"":" " + defaultEntity.getName().getMiddleName());
122 				nameBuilder.getDefaultName().setCompositeName(formattedName);
123 			}
124 			return nameBuilder.build();
125     	}
126 		return name;
127 	}
128 
129     @Override
130     public EntityName addNameToEntity(EntityName name) {
131         return getInnerIdentityService().addNameToEntity(name);
132     }
133 
134     @Override
135     public EntityName updateName(EntityName name) {
136         return getInnerIdentityService().updateName(name);
137     }
138 
139     @Override
140     public EntityName inactivateName(String id) {
141         return getInnerIdentityService().inactivateName(id);
142     }
143 
144     @Override
145     public EntityEmployment addEmploymentToEntity(EntityEmployment employment) {
146         return getInnerIdentityService().addEmploymentToEntity(employment);
147     }
148 
149     @Override
150     public EntityEmployment updateEmployment(EntityEmployment employment) {
151         return getInnerIdentityService().updateEmployment(employment);
152     }
153 
154     @Override
155     public EntityEmployment inactivateEmployment(String id) {
156         return getInnerIdentityService().inactivateEmployment(id);
157     }
158 
159     @Override
160     public EntityBioDemographics addBioDemographicsToEntity(EntityBioDemographics bioDemographics) {
161         return getInnerIdentityService().addBioDemographicsToEntity(bioDemographics);
162     }
163 
164     @Override
165     public EntityBioDemographics updateBioDemographics(EntityBioDemographics bioDemographics) {
166         return getInnerIdentityService().updateBioDemographics(bioDemographics);
167     }
168 
169 	/**
170 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getEmailType(java.lang.String)
171 	 */
172     @Override
173 	public CodedAttribute getEmailType(String code) {
174 		return getInnerIdentityService().getEmailType(code);
175 	}
176 
177     @Override
178     public List<CodedAttribute> findAllEmailTypes() {
179         return getInnerIdentityService().findAllEmailTypes();
180     }
181 
182     @Override
183     public PrincipalQueryResults findPrincipals(QueryByCriteria query) throws RiceIllegalArgumentException {
184         return getInnerIdentityService().findPrincipals(query);
185     }
186 
187     /**
188 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getEmploymentStatus(java.lang.String)
189 	 */
190     @Override
191 	public CodedAttribute getEmploymentStatus(String code) {
192 		return getInnerIdentityService().getEmploymentStatus(code);
193 	}
194 
195     @Override
196     public List<CodedAttribute> findAllEmploymentStatuses() {
197         return getInnerIdentityService().findAllEmploymentStatuses();
198     }
199 
200     /**
201 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getEmploymentType(java.lang.String)
202 	 */
203     @Override
204 	public CodedAttribute getEmploymentType(String code) {
205 		return getInnerIdentityService().getEmploymentType(code);
206 	}
207 
208     @Override
209     public List<CodedAttribute> findAllEmploymentTypes() {
210         return getInnerIdentityService().findAllEmploymentTypes();
211     }
212 
213     /**
214 	 * This method first tries the inner IdentityService impl, and resorts to
215 	 * the IdentityArchiveService if need be.
216 	 */
217     @Override
218 	public EntityDefault getEntityDefault(String entityId) {
219 		EntityDefault entity = getInnerIdentityService().getEntityDefault(entityId);
220     	if ( entity == null ) {
221     		entity = getIdentityArchiveService().getEntityDefaultFromArchive(entityId);
222     	} else {
223 			getIdentityArchiveService().saveEntityDefaultToArchive(entity);
224     	}
225 		return entity;
226 	}
227 
228 	/**
229 	 * This method first tries the inner IdentityService impl, and resorts to
230 	 * the IdentityArchiveService if need be.
231 	 */
232     @Override
233 	public EntityDefault getEntityDefaultByPrincipalId(String principalId) {
234 		EntityDefault entity = getInnerIdentityService().getEntityDefaultByPrincipalId(principalId);
235     	if ( entity == null ) {
236     		entity = getIdentityArchiveService().getEntityDefaultFromArchiveByPrincipalId(principalId);
237     	} else {
238 			getIdentityArchiveService().saveEntityDefaultToArchive(entity);
239     	}
240     	return entity;
241 	}
242 
243 	/**
244 	 * This method first tries the inner IdentityService impl, and resorts to
245 	 * the IdentityArchiveService if need be.
246 	 */
247     @Override
248 	public EntityDefault getEntityDefaultByPrincipalName(String principalName) {
249 		EntityDefault entity = getInnerIdentityService().getEntityDefaultByPrincipalName(principalName);
250     	if ( entity == null ) {
251     		entity = getIdentityArchiveService().getEntityDefaultFromArchiveByPrincipalName(principalName);
252     	} else {
253 			getIdentityArchiveService().saveEntityDefaultToArchive(entity);
254     	}
255     	return entity;
256 	}
257 
258     /**
259      * This method first tries the inner IdentityService impl, and resorts to
260      * the IdentityArchiveService if need be.
261      */
262     @Override
263     public EntityDefault getEntityDefaultByEmployeeId(String employeeId) {
264         EntityDefault entity = getInnerIdentityService().getEntityDefaultByEmployeeId(employeeId);
265         if ( entity == null ) {
266             entity = getIdentityArchiveService().getEntityDefaultFromArchiveByEmployeeId( employeeId );
267         } else {
268             getIdentityArchiveService().saveEntityDefaultToArchive(entity);
269         }
270         return entity;
271     }
272 
273     @Override
274     public EntityDefaultQueryResults findEntityDefaults( QueryByCriteria queryByCriteria) {
275         return getInnerIdentityService().findEntityDefaults(queryByCriteria);
276     }
277 
278     @Override
279     public EntityQueryResults findEntities(QueryByCriteria queryByCriteria) {
280         return getInnerIdentityService().findEntities(queryByCriteria);
281     }
282 
283     @Override
284 	public Entity getEntity(String entityId) {
285 		return getInnerIdentityService().getEntity(entityId);
286 	}
287 
288     @Override
289 	public Entity getEntityByPrincipalId(String principalId) {
290 		return getInnerIdentityService().getEntityByPrincipalId(principalId);
291 	}
292 
293     @Override
294 	public Entity getEntityByPrincipalName(String principalName) {
295 		return getInnerIdentityService().getEntityByPrincipalName(principalName);
296 	}
297     
298     @Override
299 	public Entity getEntityByEmployeeId(String employeeId) {
300 		return getInnerIdentityService().getEntityByEmployeeId(employeeId);
301 	}
302 
303     @Override
304     public Entity createEntity(Entity entity) {
305         return getInnerIdentityService().createEntity(entity);
306     }
307 
308     @Override
309     public Entity updateEntity(Entity entity) {
310         return getInnerIdentityService().updateEntity(entity);
311     }
312 
313     @Override
314     public Entity inactivateEntity(String entityId) {
315         return getInnerIdentityService().inactivateEntity(entityId);
316     }
317 
318     /**
319 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getNameType(java.lang.String)
320 	 */
321     @Override
322 	public CodedAttribute getNameType(String code) {
323 		return getInnerIdentityService().getNameType(code);
324 	}
325 
326     @Override
327     public List<CodedAttribute> findAllNameTypes() {
328         return getInnerIdentityService().findAllNameTypes();
329     }
330 
331     @Override
332 	public EntityPrivacyPreferences getEntityPrivacyPreferences(
333 			String entityId) {
334 		return getInnerIdentityService().getEntityPrivacyPreferences(entityId);
335 	}
336 
337     @Override
338     public EntityPrivacyPreferences addPrivacyPreferencesToEntity(EntityPrivacyPreferences privacyPreferences) {
339         return getInnerIdentityService().addPrivacyPreferencesToEntity(privacyPreferences);
340     }
341 
342     @Override
343     public EntityPrivacyPreferences updatePrivacyPreferences(EntityPrivacyPreferences privacyPreferences) {
344         return getInnerIdentityService().updatePrivacyPreferences(privacyPreferences);
345     }
346 
347     @Override
348     public EntityCitizenship addCitizenshipToEntity(EntityCitizenship citizenship) {
349         return getInnerIdentityService().addCitizenshipToEntity(citizenship);
350     }
351 
352     @Override
353     public EntityCitizenship updateCitizenship(EntityCitizenship citizenship) {
354         return getInnerIdentityService().updateCitizenship(citizenship);
355     }
356 
357     @Override
358     public EntityCitizenship inactivateCitizenship(String id) {
359         return getInnerIdentityService().inactivateCitizenship(id);
360     }
361 
362     @Override
363     public EntityEthnicity addEthnicityToEntity(EntityEthnicity ethnicity) {
364         return getInnerIdentityService().addEthnicityToEntity(ethnicity);
365     }
366 
367     @Override
368     public EntityEthnicity updateEthnicity(EntityEthnicity ethnicity) {
369         return getInnerIdentityService().updateEthnicity(ethnicity);
370     }
371 
372     @Override
373     public EntityResidency addResidencyToEntity(EntityResidency residency) {
374         return getInnerIdentityService().addResidencyToEntity(residency);
375     }
376 
377     @Override
378     public EntityResidency updateResidency(EntityResidency residency) {
379         return getInnerIdentityService().updateResidency(residency);
380     }
381 
382     @Override
383     public EntityVisa addVisaToEntity(EntityVisa visa) {
384         return getInnerIdentityService().addVisaToEntity(visa);
385     }
386 
387     @Override
388     public EntityVisa updateVisa(EntityVisa visa) {
389         return getInnerIdentityService().updateVisa(visa);
390     }
391 
392     /**
393 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getEntityType(java.lang.String)
394 	 */
395     @Override
396 	public CodedAttribute getEntityType(String code) {
397 		return getInnerIdentityService().getEntityType(code);
398 	}
399 
400     @Override
401     public List<CodedAttribute> findAllEntityTypes() {
402         return getInnerIdentityService().findAllEntityTypes();
403     }
404 
405     @Override
406 	public EntityExternalIdentifierType getExternalIdentifierType(String code) {
407 		return getInnerIdentityService().getExternalIdentifierType(code);
408 	}
409 
410     @Override
411     public List<EntityExternalIdentifierType> findAllExternalIdendtifierTypes() {
412         return getInnerIdentityService().findAllExternalIdendtifierTypes();
413     }
414 
415     /**
416 	 * @see org.kuali.rice.kim.api.identity.IdentityService#getPhoneType(java.lang.String)
417 	 */
418     @Override
419 	public CodedAttribute getPhoneType(String code) {
420 		return getInnerIdentityService().getPhoneType(code);
421 	}
422 
423     @Override
424     public List<CodedAttribute> findAllPhoneTypes() {
425         return getInnerIdentityService().findAllPhoneTypes();
426     }
427 
428     @Override
429 	public Principal getPrincipal(String principalId) {
430 		return getInnerIdentityService().getPrincipal(principalId);
431 	}
432 
433     /**
434      * Gets a list of {@link org.kuali.rice.kim.api.identity.principal.Principal} from a string list of principalId.
435      *
436      * <p>
437      * This method will only return principals that exist.  It will return null if the none of the principals exist.
438      * </p>
439      *
440      * @param principalIds the unique id to retrieve the principal by. cannot be null.
441      * @return a list of {@link org.kuali.rice.kim.api.identity.principal.Principal} or null
442      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if the principalId is blank
443      */
444     @Override
445     public List<Principal> getPrincipals(@WebParam(name = "principalIds") List<String> principalIds) {
446         List<Principal> ret = new ArrayList<Principal>();
447         for(String p: principalIds) {
448             Principal principalInfo = getPrincipal(p);
449 
450             if (principalInfo != null) {
451                 ret.add(principalInfo) ;
452             }
453             else {
454                 return null;
455             }
456         }
457         return ret;
458     }
459 
460     @Override
461 	public Principal getPrincipalByPrincipalName(String principalName) {
462 		return getInnerIdentityService().getPrincipalByPrincipalName(principalName);
463 	}
464 
465     @Override
466 	public Principal getPrincipalByPrincipalNameAndPassword(
467 			String principalName, String password) {
468 		return getInnerIdentityService().getPrincipalByPrincipalNameAndPassword(
469 				principalName, password);
470 	}
471 
472     @Override
473     public Principal addPrincipalToEntity(Principal principal) {
474         return getInnerIdentityService().addPrincipalToEntity(principal);
475     }
476 
477     @Override
478     public Principal updatePrincipal(Principal principal) {
479         return getInnerIdentityService().updatePrincipal(principal);
480     }
481 
482     @Override
483     public Principal inactivatePrincipal(String principalId) {
484         return getInnerIdentityService().inactivatePrincipal(principalId);
485     }
486 
487     @Override
488     public Principal inactivatePrincipalByName(String principalName) {
489         return getInnerIdentityService().inactivatePrincipalByName(principalName);
490     }
491 
492     @Override
493     public EntityTypeContactInfo addEntityTypeContactInfoToEntity(EntityTypeContactInfo entityTypeContactInfo) {
494         return getInnerIdentityService().addEntityTypeContactInfoToEntity(entityTypeContactInfo);
495     }
496 
497     @Override
498     public EntityTypeContactInfo updateEntityTypeContactInfo(EntityTypeContactInfo entityTypeContactInfo) {
499         return getInnerIdentityService().updateEntityTypeContactInfo(entityTypeContactInfo);
500     }
501 
502     @Override
503     public EntityTypeContactInfo inactivateEntityTypeContactInfo(String entityId, String entityTypeCode) {
504         return getInnerIdentityService().inactivateEntityTypeContactInfo(entityId, entityTypeCode);
505     }
506 
507     @Override
508     public EntityAddress addAddressToEntity(EntityAddress address) {
509         return getInnerIdentityService().addAddressToEntity(address);
510     }
511 
512     @Override
513     public EntityAddress updateAddress(EntityAddress address) {
514         return getInnerIdentityService().updateAddress(address);
515     }
516 
517     @Override
518     public EntityAddress inactivateAddress(String addressId) {
519         return getInnerIdentityService().inactivateAddress(addressId);
520     }
521 
522     @Override
523     public EntityEmail addEmailToEntity(EntityEmail email) {
524         return getInnerIdentityService().addEmailToEntity(email);
525     }
526 
527     @Override
528     public EntityEmail updateEmail(EntityEmail email) {
529         return getInnerIdentityService().updateEmail(email);
530     }
531 
532     @Override
533     public EntityEmail inactivateEmail(String emailId) {
534         return getInnerIdentityService().inactivateEmail(emailId);
535     }
536 
537     @Override
538     public EntityPhone addPhoneToEntity(EntityPhone phone) {
539         return getInnerIdentityService().addPhoneToEntity(phone);
540     }
541 
542     @Override
543     public EntityPhone updatePhone(EntityPhone phone) {
544         return getInnerIdentityService().updatePhone(phone);
545     }
546 
547     @Override
548     public EntityPhone inactivatePhone(String phoneId) {
549         return getInnerIdentityService().inactivatePhone(phoneId);
550     }
551 
552     @Override
553     public EntityExternalIdentifier addExternalIdentifierToEntity(EntityExternalIdentifier externalId) {
554         return getInnerIdentityService().addExternalIdentifierToEntity(externalId);
555     }
556 
557     @Override
558     public EntityExternalIdentifier updateExternalIdentifier(EntityExternalIdentifier externalId) {
559         return getInnerIdentityService().updateExternalIdentifier(externalId);
560     }
561 
562     @Override
563     public EntityAffiliation addAffiliationToEntity(EntityAffiliation affiliation) {
564         return getInnerIdentityService().addAffiliationToEntity(affiliation);
565     }
566 
567     @Override
568     public EntityAffiliation updateAffiliation(EntityAffiliation affiliation) {
569         return getInnerIdentityService().updateAffiliation(affiliation);
570     }
571 
572     @Override
573     public EntityAffiliation inactivateAffiliation(String id) {
574         return getInnerIdentityService().inactivateAffiliation(id);
575     }
576 
577 
578 	private IdentityService getInnerIdentityService() {
579 		return innerIdentityService;
580 	}
581 	
582 	private IdentityArchiveService getIdentityArchiveService() {
583 		return identityArchiveService;
584 	}
585 }