View Javadoc
1   /**
2    * Copyright 2005-2014 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.api.identity.entity;
17  
18  import org.apache.commons.collections.CollectionUtils;
19  import org.apache.commons.lang.StringUtils;
20  import org.kuali.rice.core.api.CoreConstants;
21  import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
22  import org.kuali.rice.core.api.mo.ModelBuilder;
23  import org.kuali.rice.kim.api.KimConstants;
24  import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation;
25  import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationContract;
26  import org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship;
27  import org.kuali.rice.kim.api.identity.citizenship.EntityCitizenshipContract;
28  import org.kuali.rice.kim.api.identity.employment.EntityEmployment;
29  import org.kuali.rice.kim.api.identity.employment.EntityEmploymentContract;
30  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier;
31  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierContract;
32  import org.kuali.rice.kim.api.identity.name.EntityName;
33  import org.kuali.rice.kim.api.identity.name.EntityNameContract;
34  import org.kuali.rice.kim.api.identity.personal.EntityBioDemographics;
35  import org.kuali.rice.kim.api.identity.personal.EntityEthnicity;
36  import org.kuali.rice.kim.api.identity.personal.EntityEthnicityContract;
37  import org.kuali.rice.kim.api.identity.principal.Principal;
38  import org.kuali.rice.kim.api.identity.principal.PrincipalContract;
39  import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences;
40  import org.kuali.rice.kim.api.identity.residency.EntityResidency;
41  import org.kuali.rice.kim.api.identity.residency.EntityResidencyContract;
42  import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo;
43  import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfoContract;
44  import org.kuali.rice.kim.api.identity.visa.EntityVisa;
45  import org.kuali.rice.kim.api.identity.visa.EntityVisaContract;
46  import org.w3c.dom.Element;
47  
48  import javax.xml.bind.annotation.XmlAccessType;
49  import javax.xml.bind.annotation.XmlAccessorType;
50  import javax.xml.bind.annotation.XmlAnyElement;
51  import javax.xml.bind.annotation.XmlElement;
52  import javax.xml.bind.annotation.XmlElementWrapper;
53  import javax.xml.bind.annotation.XmlRootElement;
54  import javax.xml.bind.annotation.XmlType;
55  import java.io.Serializable;
56  import java.util.ArrayList;
57  import java.util.Collection;
58  import java.util.List;
59  
60  @XmlRootElement(name = Entity.Constants.ROOT_ELEMENT_NAME)
61  @XmlAccessorType(XmlAccessType.NONE)
62  @XmlType(name = Entity.Constants.TYPE_NAME, propOrder = {
63      Entity.Elements.ID,
64      Entity.Elements.PRINCIPALS,
65      Entity.Elements.ENTITY_TYPE_CONTACT_INFOS,
66      Entity.Elements.EXTERNAL_IDENTIFIERS,
67      Entity.Elements.AFFILIATIONS,
68      Entity.Elements.NAMES,
69      Entity.Elements.EMPLOYMENT_INFORMATION,
70      Entity.Elements.PRIVACY_PREFERENCES,
71      Entity.Elements.BIO_DEMOGRAPHICS,
72      Entity.Elements.CITIZENSHIPS,
73      Entity.Elements.PRIMARY_EMPLOYMENT,
74      Entity.Elements.DEFAULT_AFFILIATION,
75      Entity.Elements.DEFAULT_NAME,
76      Entity.Elements.ETHNICITIES,
77      Entity.Elements.RESIDENCIES,
78      Entity.Elements.VISAS,
79      CoreConstants.CommonElements.VERSION_NUMBER,
80      CoreConstants.CommonElements.OBJECT_ID,
81      Entity.Elements.ACTIVE,
82      CoreConstants.CommonElements.FUTURE_ELEMENTS
83  })
84  public final class Entity extends AbstractDataTransferObject
85      implements EntityContract
86  {
87      @XmlElement(name = Elements.ID, required = false)
88      private final String id;
89  
90      @XmlElementWrapper(name = Elements.PRINCIPALS, required = false)
91      @XmlElement(name = Elements.PRINCIPAL, required = false)
92      private final List<Principal> principals;
93  
94      @XmlElementWrapper(name = Elements.ENTITY_TYPE_CONTACT_INFOS, required = false)
95      @XmlElement(name = Elements.ENTITY_TYPE_CONTACT_INFO, required = false)
96      private final List<EntityTypeContactInfo> entityTypeContactInfos;
97  
98      @XmlElementWrapper(name = Elements.EXTERNAL_IDENTIFIERS, required = false)
99      @XmlElement(name = Elements.EXTERNAL_IDENTIFIER, required = false)
100     private final List<EntityExternalIdentifier> externalIdentifiers;
101 
102     @XmlElementWrapper(name = Elements.AFFILIATIONS, required = false)
103     @XmlElement(name = Elements.AFFILIATION, required = false)
104     private final List<EntityAffiliation> affiliations;
105 
106     @XmlElementWrapper(name = Elements.NAMES, required = false)
107     @XmlElement(name = Elements.NAME, required = false)
108     private final List<EntityName> names;
109 
110     @XmlElementWrapper(name = Elements.EMPLOYMENT_INFORMATION, required = false)
111     @XmlElement(name = Elements.EMPLOYMENT, required = false)
112     private final List<EntityEmployment> employmentInformation;
113 
114     @XmlElement(name = Elements.PRIVACY_PREFERENCES, required = false)
115     private final EntityPrivacyPreferences privacyPreferences;
116 
117     @XmlElement(name = Elements.BIO_DEMOGRAPHICS, required = false)
118     private final EntityBioDemographics bioDemographics;
119 
120     @XmlElementWrapper(name = Elements.CITIZENSHIPS, required = false)
121     @XmlElement(name = Elements.CITIZENSHIP, required = false)
122     private final List<EntityCitizenship> citizenships;
123 
124     @XmlElement(name = Elements.PRIMARY_EMPLOYMENT, required = false)
125     private final EntityEmployment primaryEmployment;
126 
127     @XmlElement(name = Elements.DEFAULT_AFFILIATION, required = false)
128     private final EntityAffiliation defaultAffiliation;
129 
130     @XmlElement(name = Elements.DEFAULT_NAME, required = false)
131     private final EntityName defaultName;
132 
133     @XmlElementWrapper(name = Elements.ETHNICITIES, required = false)
134     @XmlElement(name = Elements.ETHNICITY, required = false)
135     private final List<EntityEthnicity> ethnicities;
136 
137     @XmlElementWrapper(name = Elements.RESIDENCIES, required = false)
138     @XmlElement(name = Elements.RESIDENCY, required = false)
139     private final List<EntityResidency> residencies;
140 
141     @XmlElementWrapper(name = Elements.VISAS, required = false)
142     @XmlElement(name = Elements.VISA, required = false)
143     private final List<EntityVisa> visas;
144 
145     @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
146     private final Long versionNumber;
147 
148     @XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false)
149     private final String objectId;
150 
151     @XmlElement(name = Elements.ACTIVE, required = false)
152     private final boolean active;
153 
154     @SuppressWarnings("unused")
155     @XmlAnyElement
156     private final Collection<Element> _futureElements = null;
157 
158     /**
159      * Private constructor used only by JAXB.
160      * 
161      */
162     private Entity() {
163         this.principals = null;
164         this.entityTypeContactInfos = null;
165         this.externalIdentifiers = null;
166         this.affiliations = null;
167         this.names = null;
168         this.employmentInformation = null;
169         this.privacyPreferences = null;
170         this.bioDemographics = null;
171         this.citizenships = null;
172         this.primaryEmployment = null;
173         this.defaultAffiliation = null;
174         this.defaultName = null;
175         this.ethnicities = null;
176         this.residencies = null;
177         this.visas = null;
178         this.versionNumber = null;
179         this.objectId = null;
180         this.active = false;
181         this.id = null;
182     }
183 
184     private Entity(Builder builder) {
185         this.principals = new ArrayList<Principal>();
186         if (CollectionUtils.isNotEmpty(builder.getPrincipals())) {
187             for (Principal.Builder principal : builder.getPrincipals()) {
188                 this.principals.add(principal.build());
189             }
190         }
191         this.entityTypeContactInfos = new ArrayList<EntityTypeContactInfo>();
192         if (CollectionUtils.isNotEmpty(builder.getEntityTypeContactInfos())) {
193             for (EntityTypeContactInfo.Builder entityTypeData : builder.getEntityTypeContactInfos()) {
194                 this.entityTypeContactInfos.add(entityTypeData.build());
195             }
196         }
197         this.externalIdentifiers = new ArrayList<EntityExternalIdentifier>();
198         if (CollectionUtils.isNotEmpty(builder.getExternalIdentifiers())) {
199             for (EntityExternalIdentifier.Builder externalId : builder.getExternalIdentifiers()) {
200                 this.externalIdentifiers.add(externalId.build());
201             }
202         }
203         this.affiliations = new ArrayList<EntityAffiliation>();
204         if (CollectionUtils.isNotEmpty(builder.getAffiliations())) {
205             for (EntityAffiliation.Builder affiliation : builder.getAffiliations()) {
206                 this.affiliations.add(affiliation.build());
207             }
208         }
209         this.names = new ArrayList<EntityName>();
210         if (CollectionUtils.isNotEmpty(builder.getNames())) {
211             for (EntityName.Builder name : builder.getNames()) {
212                 this.names.add(name.build());
213             }
214         }
215         this.employmentInformation = new ArrayList<EntityEmployment>();
216         if (CollectionUtils.isNotEmpty(builder.getEmploymentInformation())) {
217             for (EntityEmployment.Builder employment : builder.getEmploymentInformation()) {
218                 this.employmentInformation.add(employment.build());
219             }
220         }
221         this.privacyPreferences = builder.getPrivacyPreferences() == null ? null : builder.getPrivacyPreferences().build();
222         this.bioDemographics = builder.getBioDemographics() == null ? null : builder.getBioDemographics().build();
223         this.citizenships = new ArrayList<EntityCitizenship>();
224         if (CollectionUtils.isNotEmpty(builder.getCitizenships())) {
225             for (EntityCitizenship.Builder citizenship : builder.getCitizenships()) {
226                 this.citizenships.add(citizenship.build());
227             }
228         }
229         this.primaryEmployment = builder.getPrimaryEmployment() == null ? null : builder.getPrimaryEmployment().build();
230         this.defaultAffiliation = builder.getDefaultAffiliation() == null ? null : builder.getDefaultAffiliation().build();
231         this.defaultName = builder.getDefaultName() == null ? null : builder.getDefaultName().build();
232         this.ethnicities = new ArrayList<EntityEthnicity>();
233         if (CollectionUtils.isNotEmpty(builder.getEthnicities())) {
234             for (EntityEthnicity.Builder ethnicity : builder.getEthnicities()) {
235                 this.ethnicities.add(ethnicity.build());
236             }
237         }
238         this.residencies = new ArrayList<EntityResidency>();
239         if (CollectionUtils.isNotEmpty(builder.getResidencies())) {
240             for (EntityResidency.Builder residency : builder.getResidencies()) {
241                 this.residencies.add(residency.build());
242             }
243         }
244         this.visas = new ArrayList<EntityVisa>();
245         if (CollectionUtils.isNotEmpty(builder.getVisas())) {
246             for (EntityVisa.Builder visa : builder.getVisas()) {
247                 this.visas.add(visa.build());
248             }
249         }
250         this.versionNumber = builder.getVersionNumber();
251         this.objectId = builder.getObjectId();
252         this.active = builder.isActive();
253         this.id = builder.getId();
254     }
255 
256     @Override
257     public List<Principal> getPrincipals() {
258         return this.principals;
259     }
260 
261     @Override
262     public List<EntityTypeContactInfo> getEntityTypeContactInfos() {
263         return this.entityTypeContactInfos;
264     }
265 
266     @Override
267     public List<EntityExternalIdentifier> getExternalIdentifiers() {
268         return this.externalIdentifiers;
269     }
270 
271     @Override
272     public List<EntityAffiliation> getAffiliations() {
273         return this.affiliations;
274     }
275 
276     @Override
277     public List<EntityName> getNames() {
278         return this.names;
279     }
280 
281     @Override
282     public List<EntityEmployment> getEmploymentInformation() {
283         return this.employmentInformation;
284     }
285 
286     @Override
287     public EntityPrivacyPreferences getPrivacyPreferences() {
288         return this.privacyPreferences;
289     }
290 
291     @Override
292     public EntityBioDemographics getBioDemographics() {
293         return this.bioDemographics;
294     }
295 
296     @Override
297     public List<EntityCitizenship> getCitizenships() {
298         return this.citizenships;
299     }
300 
301     @Override
302     public EntityEmployment getPrimaryEmployment() {
303         return this.primaryEmployment;
304     }
305 
306     @Override
307     public EntityAffiliation getDefaultAffiliation() {
308         return this.defaultAffiliation;
309     }
310 
311     @Override
312     public EntityExternalIdentifier getEntityExternalIdentifier(String externalIdentifierTypeCode) {
313         if (externalIdentifiers == null) {
314             return null;
315         }
316         for (EntityExternalIdentifier externalId : externalIdentifiers) {
317             if (externalId.getExternalIdentifierTypeCode().equals(externalIdentifierTypeCode)) {
318                 return externalId;
319             }
320         }
321         return null;
322     }
323 
324     @Override
325     public EntityNameContract getDefaultName() {
326         return this.defaultName;
327     }
328 
329     @Override
330     public List<EntityEthnicity> getEthnicities() {
331         return this.ethnicities;
332     }
333 
334     @Override
335     public List<EntityResidency> getResidencies() {
336         return this.residencies;
337     }
338 
339     @Override
340     public List<EntityVisa> getVisas() {
341         return this.visas;
342     }
343 
344     @Override
345     public Long getVersionNumber() {
346         return this.versionNumber;
347     }
348 
349     @Override
350     public String getObjectId() {
351         return this.objectId;
352     }
353 
354     @Override
355     public boolean isActive() {
356         return this.active;
357     }
358 
359     @Override
360     public String getId() {
361         return this.id;
362     }
363 
364     public EntityTypeContactInfo getEntityTypeContactInfoByTypeCode(String entityTypeCode) {
365         if (entityTypeContactInfos == null) {
366             return null;
367         }
368         for (EntityTypeContactInfo entType : entityTypeContactInfos) {
369             if (entType.getEntityTypeCode().equals(entityTypeCode)) {
370                 return entType;
371             }
372         }
373         return null;
374     }
375 
376     /**
377      * A builder which can be used to construct {@link Entity} instances.  Enforces the constraints of the {@link EntityContract}.
378      * 
379      */
380     public final static class Builder
381         implements Serializable, ModelBuilder, EntityContract
382     {
383 
384         private List<Principal.Builder> principals;
385         private List<EntityTypeContactInfo.Builder> entityTypeContactInfos;
386         private List<EntityExternalIdentifier.Builder> externalIdentifiers;
387         private List<EntityAffiliation.Builder> affiliations;
388         private List<EntityName.Builder> names;
389         private List<EntityEmployment.Builder> employmentInformation;
390         private EntityPrivacyPreferences.Builder privacyPreferences;
391         private EntityBioDemographics.Builder bioDemographics;
392         private List<EntityCitizenship.Builder> citizenships;
393         private List<EntityEthnicity.Builder> ethnicities;
394         private List<EntityResidency.Builder> residencies;
395         private List<EntityVisa.Builder> visas;
396         private Long versionNumber;
397         private String objectId;
398         private boolean active;
399         private String id;
400 
401         private Builder() { }
402 
403         public static Builder create() {
404             return new Builder();
405         }
406 
407         public static Builder create(EntityContract contract) {
408             if (contract == null) {
409                 throw new IllegalArgumentException("contract was null");
410             }
411             Builder builder = create();
412             if (contract.getPrincipals() != null) {
413                 List<Principal.Builder> tempPrincipals = new ArrayList<Principal.Builder>();
414                 for (PrincipalContract principal : contract.getPrincipals()) {
415                     tempPrincipals.add(Principal.Builder.create(principal));
416                 }
417                 builder.setPrincipals(tempPrincipals);
418             }
419             if (contract.getEntityTypeContactInfos() != null) {
420                 List<EntityTypeContactInfo.Builder> tempTypeData = new ArrayList<EntityTypeContactInfo.Builder>();
421                 for (EntityTypeContactInfoContract typeData : contract.getEntityTypeContactInfos()) {
422                     tempTypeData.add(EntityTypeContactInfo.Builder.create(typeData));
423                 }
424                 builder.setEntityTypes(tempTypeData);
425             }
426             if (contract.getExternalIdentifiers() != null) {
427                 List<EntityExternalIdentifier.Builder> externalIds = new ArrayList<EntityExternalIdentifier.Builder>();
428                 for (EntityExternalIdentifierContract externalId : contract.getExternalIdentifiers()) {
429                     externalIds.add(EntityExternalIdentifier.Builder.create(externalId));
430                 }
431                 builder.setExternalIdentifiers(externalIds);
432             }
433             if (contract.getAffiliations() != null) {
434                 List<EntityAffiliation.Builder> affils = new ArrayList<EntityAffiliation.Builder>();
435                 for (EntityAffiliationContract affil : contract.getAffiliations()) {
436                     affils.add(EntityAffiliation.Builder.create(affil));
437                 }
438                 builder.setAffiliations(affils);
439             }
440             if (contract.getNames() != null) {
441                 List<EntityName.Builder> nms = new ArrayList<EntityName.Builder>();
442                 for (EntityNameContract nm : contract.getNames()) {
443                     nms.add(EntityName.Builder.create(nm));
444                 }
445                 builder.setNames(nms);
446             }
447             if (contract.getEmploymentInformation() != null) {
448                 List<EntityEmployment.Builder> emps = new ArrayList<EntityEmployment.Builder>();
449                 for (EntityEmploymentContract emp : contract.getEmploymentInformation()) {
450                     emps.add(EntityEmployment.Builder.create(emp));
451                 }
452                 builder.setEmploymentInformation(emps);
453             }
454             builder.setPrivacyPreferences(contract.getPrivacyPreferences() == null ? null : EntityPrivacyPreferences.Builder.create(contract.getPrivacyPreferences()));
455             builder.setBioDemographics(contract.getBioDemographics() == null ? null : EntityBioDemographics.Builder.create(contract.getBioDemographics()));
456             if (contract.getCitizenships() != null) {
457                 List<EntityCitizenship.Builder> cits = new ArrayList<EntityCitizenship.Builder>();
458                 for (EntityCitizenshipContract cit : contract.getCitizenships()) {
459                     cits.add(EntityCitizenship.Builder.create(cit));
460                 }
461                 builder.setCitizenships(cits);
462             }
463             if (contract.getEthnicities() != null) {
464                 List<EntityEthnicity.Builder> ethnctys = new ArrayList<EntityEthnicity.Builder>();
465                 for (EntityEthnicityContract ethncty : contract.getEthnicities()) {
466                     ethnctys.add(EntityEthnicity.Builder.create(ethncty));
467                 }
468                 builder.setEthnicities(ethnctys);
469             }
470             if (contract.getResidencies() != null) {
471                 List<EntityResidency.Builder> residencyBuilders = new ArrayList<EntityResidency.Builder>();
472                 for (EntityResidencyContract residency : contract.getResidencies()) {
473                     residencyBuilders.add(EntityResidency.Builder.create(residency));
474                 }
475                 builder.setResidencies(residencyBuilders);
476             }
477             if (contract.getVisas() != null) {
478                 List<EntityVisa.Builder> visaBuilders = new ArrayList<EntityVisa.Builder>();
479                 for (EntityVisaContract visa : contract.getVisas()) {
480                     visaBuilders.add(EntityVisa.Builder.create(visa));
481                 }
482                 builder.setVisas(visaBuilders);
483             }
484             builder.setVersionNumber(contract.getVersionNumber());
485             builder.setObjectId(contract.getObjectId());
486             builder.setActive(contract.isActive());
487             builder.setId(contract.getId());
488             return builder;
489         }
490 
491         public Entity build() {
492             return new Entity(this);
493         }
494 
495         @Override
496         public List<Principal.Builder> getPrincipals() {
497             return this.principals;
498         }
499 
500         @Override
501         public List<EntityTypeContactInfo.Builder> getEntityTypeContactInfos() {
502             return this.entityTypeContactInfos;
503         }
504 
505         @Override
506         public List<EntityExternalIdentifier.Builder> getExternalIdentifiers() {
507             return this.externalIdentifiers;
508         }
509 
510         @Override
511         public List<EntityAffiliation.Builder> getAffiliations() {
512             return this.affiliations;
513         }
514 
515         @Override
516         public List<EntityName.Builder> getNames() {
517             return this.names;
518         }
519 
520         @Override
521         public List<EntityEmployment.Builder> getEmploymentInformation() {
522             return this.employmentInformation;
523         }
524 
525         @Override
526         public EntityPrivacyPreferences.Builder getPrivacyPreferences() {
527             return this.privacyPreferences;
528         }
529 
530         @Override
531         public EntityBioDemographics.Builder getBioDemographics() {
532             return this.bioDemographics;
533         }
534 
535         @Override
536         public List<EntityCitizenship.Builder> getCitizenships() {
537             return this.citizenships;
538         }
539 
540         @Override
541         public EntityTypeContactInfo.Builder getEntityTypeContactInfoByTypeCode(String entityTypeCode) {
542             if (CollectionUtils.isEmpty(this.entityTypeContactInfos)) {
543                 return null;
544             }
545             for (EntityTypeContactInfo.Builder builder : this.entityTypeContactInfos) {
546                 if (builder.getEntityTypeCode().equals(entityTypeCode) && builder.isActive()) {
547                     return builder;
548                 }
549             }
550             return null;
551         }
552 
553         @Override
554         public EntityEmployment.Builder getPrimaryEmployment() {
555             if (CollectionUtils.isEmpty(this.employmentInformation)) {
556                 return null;
557             }
558             for (EntityEmployment.Builder builder : this.employmentInformation) {
559                 if (builder.isPrimary()
560                         && builder.isActive()) {
561                     return builder;
562                 }
563             }
564             return null;
565         }
566 
567         @Override
568         public EntityAffiliation.Builder getDefaultAffiliation() {
569             if (CollectionUtils.isEmpty(this.affiliations)) {
570                 return null;
571             }
572             for (EntityAffiliation.Builder builder : this.affiliations) {
573                 if (builder.isDefaultValue()
574                         && builder.isActive()) {
575                     return builder;
576                 }
577             }
578             return null;
579         }
580 
581         @Override
582         public EntityExternalIdentifier.Builder getEntityExternalIdentifier(String externalIdentifierTypeCode) {
583             if (CollectionUtils.isEmpty(this.externalIdentifiers)) {
584                 return null;
585             }
586             for (EntityExternalIdentifier.Builder builder : this.externalIdentifiers) {
587                 if (builder.getExternalIdentifierTypeCode().equals(externalIdentifierTypeCode)) {
588                     return builder;
589                 }
590             }
591             return null;
592         }
593 
594         @Override
595         public EntityName.Builder getDefaultName() {
596             if (CollectionUtils.isEmpty(this.names)) {
597                 return null;
598             }
599             for (EntityName.Builder builder : this.names) {
600                 if (builder.isDefaultValue()
601                         && builder.isActive()) {
602                     return builder;
603                 }
604             }
605             return null;
606         }
607 
608         @Override
609         public List<EntityEthnicity.Builder> getEthnicities() {
610             return this.ethnicities;
611         }
612 
613         @Override
614         public List<EntityResidency.Builder> getResidencies() {
615             return this.residencies;
616         }
617 
618         @Override
619         public List<EntityVisa.Builder> getVisas() {
620             return this.visas;
621         }
622 
623         @Override
624         public Long getVersionNumber() {
625             return this.versionNumber;
626         }
627 
628         @Override
629         public String getObjectId() {
630             return this.objectId;
631         }
632 
633         @Override
634         public boolean isActive() {
635             return this.active;
636         }
637 
638         @Override
639         public String getId() {
640             return this.id;
641         }
642 
643         public void setPrincipals(List<Principal.Builder> principals) {
644             this.principals = principals;
645         }
646 
647         public void setEntityTypes(List<EntityTypeContactInfo.Builder> entityTypeContactInfos) {
648             this.entityTypeContactInfos = entityTypeContactInfos;
649         }
650 
651         public void setExternalIdentifiers(List<EntityExternalIdentifier.Builder> externalIdentifiers) {
652             this.externalIdentifiers = externalIdentifiers;
653         }
654 
655         public void setAffiliations(List<EntityAffiliation.Builder> affiliations) {
656             this.affiliations = affiliations;
657         }
658 
659         public void setNames(List<EntityName.Builder> names) {
660             this.names = names;
661         }
662 
663         public void setEmploymentInformation(List<EntityEmployment.Builder> employmentInformation) {
664             this.employmentInformation = employmentInformation;
665         }
666 
667         public void setPrivacyPreferences(EntityPrivacyPreferences.Builder privacyPreferences) {
668             this.privacyPreferences = privacyPreferences;
669         }
670 
671         public void setBioDemographics(EntityBioDemographics.Builder bioDemographics) {
672             this.bioDemographics = bioDemographics;
673         }
674 
675         public void setCitizenships(List<EntityCitizenship.Builder> citizenships) {
676             this.citizenships = citizenships;
677         }
678 
679         public void setEthnicities(List<EntityEthnicity.Builder> ethnicities) {
680             this.ethnicities = ethnicities;
681         }
682 
683         public void setResidencies(List<EntityResidency.Builder> residencies) {
684             this.residencies = residencies;
685         }
686 
687         public void setVisas(List<EntityVisa.Builder> visas) {
688             this.visas = visas;
689         }
690 
691         public void setVersionNumber(Long versionNumber) {
692             this.versionNumber = versionNumber;
693         }
694 
695         public void setObjectId(String objectId) {
696             this.objectId = objectId;
697         }
698 
699         public void setActive(boolean active) {
700             this.active = active;
701         }
702 
703         public void setId(String id) {
704             if (StringUtils.isWhitespace(id)) {
705                 throw new IllegalArgumentException("id is blank");
706             }
707             this.id = id;
708         }
709 
710     }
711 
712 
713     /**
714      * Defines some internal constants used on this class.
715      * 
716      */
717     static class Constants {
718 
719         final static String ROOT_ELEMENT_NAME = "entity";
720         final static String TYPE_NAME = "EntityType";
721         final static String[] HASH_CODE_EQUALS_EXCLUDE = new String[] {CoreConstants.CommonElements.FUTURE_ELEMENTS };
722 
723     }
724 
725 
726     /**
727      * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
728      * 
729      */
730     static class Elements {
731 
732         final static String PRINCIPALS = "principals";
733         final static String PRINCIPAL = "principal";
734         final static String ENTITY_TYPE_CONTACT_INFOS = "entityTypeContactInfos";
735         final static String ENTITY_TYPE_CONTACT_INFO = "entityTypeContactInfo";
736         final static String EXTERNAL_IDENTIFIERS = "externalIdentifiers";
737         final static String EXTERNAL_IDENTIFIER = "externalIdentifier";
738         final static String AFFILIATIONS = "affiliations";
739         final static String AFFILIATION = "affiliation";
740         final static String NAMES = "names";
741         final static String NAME = "name";
742         final static String EMPLOYMENT_INFORMATION = "employmentInformation";
743         final static String EMPLOYMENT = "employment";
744         final static String PRIVACY_PREFERENCES = "privacyPreferences";
745         final static String BIO_DEMOGRAPHICS = "bioDemographics";
746         final static String CITIZENSHIPS = "citizenships";
747         final static String CITIZENSHIP = "citizenship";
748         final static String PRIMARY_EMPLOYMENT = "primaryEmployment";
749         final static String DEFAULT_AFFILIATION = "defaultAffiliation";
750         final static String DEFAULT_NAME = "defaultName";
751         final static String ETHNICITIES = "ethnicities";
752         final static String ETHNICITY = "ethnicity";
753         final static String RESIDENCIES = "residencies";
754         final static String RESIDENCY = "residency";
755         final static String VISAS = "visas";
756         final static String VISA = "visa";
757         final static String ACTIVE = "active";
758         final static String ID = "id";
759 
760     }
761 
762     public static class Cache {
763         public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + Entity.Constants.TYPE_NAME;
764     }
765 }