View Javadoc

1   package org.kuali.rice.kim.api.identity.entity;
2   
3   import org.apache.commons.collections.CollectionUtils;
4   import org.kuali.rice.core.api.CoreConstants;
5   import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
6   import org.kuali.rice.core.api.mo.ModelBuilder;
7   import org.kuali.rice.kim.api.identity.EntityUtils;
8   import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation;
9   import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationContract;
10  import org.kuali.rice.kim.api.identity.employment.EntityEmployment;
11  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier;
12  import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierContract;
13  import org.kuali.rice.kim.api.identity.name.EntityName;
14  import org.kuali.rice.kim.api.identity.principal.Principal;
15  import org.kuali.rice.kim.api.identity.principal.PrincipalContract;
16  import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences;
17  import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfoContract;
18  import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfoDefault;
19  import org.w3c.dom.Element;
20  
21  import javax.xml.bind.annotation.XmlAccessType;
22  import javax.xml.bind.annotation.XmlAccessorType;
23  import javax.xml.bind.annotation.XmlAnyElement;
24  import javax.xml.bind.annotation.XmlElement;
25  import javax.xml.bind.annotation.XmlElementWrapper;
26  import javax.xml.bind.annotation.XmlRootElement;
27  import javax.xml.bind.annotation.XmlType;
28  import java.io.Serializable;
29  import java.util.ArrayList;
30  import java.util.Collection;
31  import java.util.Collections;
32  import java.util.List;
33  
34  @XmlRootElement(name = EntityDefault.Constants.ROOT_ELEMENT_NAME)
35  @XmlAccessorType(XmlAccessType.NONE)
36  @XmlType(name = EntityDefault.Constants.TYPE_NAME, propOrder = {
37      EntityDefault.Elements.ENTITY_ID,
38      EntityDefault.Elements.NAME,
39      EntityDefault.Elements.PRINCIPALS,
40      EntityDefault.Elements.ENTITY_TYPE_CONTACT_INFOS,
41      EntityDefault.Elements.AFFILIATIONS,
42      EntityDefault.Elements.DEFAULT_AFFILIATION,
43      EntityDefault.Elements.EMPLOYMENT,
44      EntityDefault.Elements.EXTERNAL_IDENTIFIERS,
45      EntityDefault.Elements.PRIVACY_PREFERENCES,
46      EntityDefault.Elements.ACTIVE,
47      CoreConstants.CommonElements.FUTURE_ELEMENTS
48  })
49  public class EntityDefault extends AbstractDataTransferObject {
50      @XmlElement(name = Elements.ENTITY_ID, required = false)
51      private final String entityId;
52      @XmlElement(name = Elements.NAME, required = false)
53      private final EntityName name;
54      @XmlElementWrapper(name = Elements.PRINCIPALS, required = false)
55      @XmlElement(name = Elements.PRINCIPAL, required = false)
56      private final List<Principal> principals;
57      @XmlElementWrapper(name = Elements.ENTITY_TYPE_CONTACT_INFOS, required = false)
58      @XmlElement(name = Elements.ENTITY_TYPE_CONTACT_INFO, required = false)
59      private final List<EntityTypeContactInfoDefault> entityTypeContactInfos;
60      @XmlElementWrapper(name = Elements.AFFILIATIONS, required = false)
61      @XmlElement(name = Elements.AFFILIATION, required = false)
62      private final List<EntityAffiliation> affiliations;
63      @XmlElement(name = Elements.DEFAULT_AFFILIATION, required = false)
64      private final EntityAffiliation defaultAffiliation;
65      @XmlElement(name = Elements.EMPLOYMENT, required = false)
66      private final EntityEmployment employment;
67      @XmlElementWrapper(name = Elements.EXTERNAL_IDENTIFIERS, required = false)
68      @XmlElement(name = Elements.EXTERNAL_IDENTIFIER, required = false)
69      private final List<EntityExternalIdentifier> externalIdentifiers;
70      @XmlElement(name = Elements.PRIVACY_PREFERENCES, required = false)
71      private final EntityPrivacyPreferences privacyPreferences;
72      @XmlElement(name = Elements.ACTIVE, required = false)
73      private final boolean active;
74      @SuppressWarnings("unused")
75      @XmlAnyElement
76      private final Collection<Element> _futureElements = null;
77  
78      private EntityDefault() {
79          entityId = null;
80          name = null;
81          principals = null;
82          affiliations = null;
83          defaultAffiliation = null;
84          entityTypeContactInfos = null;
85          employment = null;
86          externalIdentifiers = null;
87          privacyPreferences = null;
88          active = false;
89      }
90  
91      public EntityDefault(String entityId, EntityName name, List<Principal> principals,
92              List<EntityTypeContactInfoDefault> entityTypes, List<EntityAffiliation> affiliations,
93              EntityAffiliation defaultAffiliation, EntityEmployment employment,
94              List<EntityExternalIdentifier> externalIdentifiers, EntityPrivacyPreferences privacyPreferences, boolean active) {
95          this.entityId = entityId;
96          this.name = name;
97          this.principals = principals;
98          this.entityTypeContactInfos = entityTypes;
99          this.affiliations = affiliations;
100         this.defaultAffiliation = defaultAffiliation;
101         this.employment = employment;
102         this.externalIdentifiers = externalIdentifiers;
103         this.privacyPreferences = privacyPreferences;
104         this.active = active;
105     }
106 
107     public EntityDefault(Builder builder) {
108         this.entityId = builder.entityId;
109         this.name = builder.getName() == null ? null : builder.getName().build();
110         this.principals = new ArrayList<Principal>();
111         if (CollectionUtils.isNotEmpty(builder.getPrincipals())) {
112             for (Principal.Builder principal : builder.getPrincipals()) {
113                 this.principals.add(principal.build());
114             }
115         }
116         this.entityTypeContactInfos = new ArrayList<EntityTypeContactInfoDefault>();
117         if (CollectionUtils.isNotEmpty(builder.getEntityTypeContactInfos())) {
118             for (EntityTypeContactInfoDefault.Builder entityType : builder.getEntityTypeContactInfos()) {
119                 this.entityTypeContactInfos.add(entityType.build());
120             }
121         }
122         this.affiliations = new ArrayList<EntityAffiliation>();
123         if (CollectionUtils.isNotEmpty(builder.getAffiliations())) {
124             for (EntityAffiliation.Builder affiliation : builder.getAffiliations()) {
125                 this.affiliations.add(affiliation.build());
126             }
127         }
128         if (builder.getDefaultAffiliation() == null
129                 && CollectionUtils.isNotEmpty(this.affiliations)) {
130             this.defaultAffiliation = EntityUtils.getDefaultItem(this.affiliations);
131         } else {
132             this.defaultAffiliation = builder.getDefaultAffiliation() == null ? null : builder.getDefaultAffiliation().build();
133         }
134         this.employment = builder.getEmployment() == null ? null : builder.getEmployment().build();
135         this.externalIdentifiers = new ArrayList<EntityExternalIdentifier>();
136         if (CollectionUtils.isNotEmpty(builder.getExternalIdentifiers())) {
137             for (EntityExternalIdentifier.Builder externalId : builder.getExternalIdentifiers()) {
138                 this.externalIdentifiers.add(externalId.build());
139             }
140         }
141         this.privacyPreferences = builder.getPrivacyPreferences() == null ? null : builder.getPrivacyPreferences().build();
142         this.active = builder.isActive();
143     }
144 
145     public String getEntityId() {
146         return entityId;
147     }
148 
149     public EntityName getName() {
150         return name;
151     }
152 
153     public List<Principal> getPrincipals() {
154         return Collections.unmodifiableList(principals);
155     }
156 
157     public List<EntityTypeContactInfoDefault> getEntityTypeContactInfos() {
158         return Collections.unmodifiableList(entityTypeContactInfos);
159     }
160 
161     public List<EntityAffiliation> getAffiliations() {
162         return Collections.unmodifiableList(affiliations);
163     }
164 
165     public EntityAffiliation getDefaultAffiliation() {
166         return defaultAffiliation;
167     }
168 
169     public EntityEmployment getEmployment() {
170         return employment;
171     }
172 
173     public List<EntityExternalIdentifier> getExternalIdentifiers() {
174         return Collections.unmodifiableList(externalIdentifiers);
175     }
176 
177     public EntityPrivacyPreferences getPrivacyPreferences() {
178         return privacyPreferences;
179     }
180 
181     public boolean isActive() {
182         return active;
183     }
184 
185     /**
186      * Gets this {@link EntityDefault}'s {@link KimEntityEntityTypeDefaultInfo} for the given type code.
187      * @return the {@link org.kuali.rice.kim.api.identity.type.EntityTypeContactInfoDefault} for the given type code for this {@link KimEntityDefaultInfo},
188      * or null if none has been assigned.
189      */
190     public EntityTypeContactInfoDefault getEntityType(String entityTypeCode) {
191         if (entityTypeContactInfos == null) {
192             return null;
193         }
194         for (EntityTypeContactInfoDefault entType : entityTypeContactInfos) {
195             if (entType.getEntityTypeCode().equals(entityTypeCode)) {
196                 return entType;
197             }
198         }
199         return null;
200     }
201 
202    
203     /**
204      * A builder which can be used to construct {@link EntityDefault} instances.
205      * 
206      */
207     public final static class Builder
208         implements Serializable, ModelBuilder
209     {
210         private String entityId;
211         private EntityName.Builder name;
212         private List<Principal.Builder> principals;
213         private List<EntityTypeContactInfoDefault.Builder> entityTypeContactInfos;
214         private List<EntityAffiliation.Builder> affiliations;
215         private EntityAffiliation.Builder defaultAffiliation;
216         private EntityEmployment.Builder employment;
217         private List<EntityExternalIdentifier.Builder> externalIdentifiers;
218         private EntityPrivacyPreferences.Builder privacyPreferences;
219         private boolean active;
220 
221         private Builder() { }
222 
223         public static Builder create() {
224             return new Builder();
225         }
226 
227         public static Builder create(String entityId) {
228             Builder builder = new Builder();
229             builder.setEntityId(entityId);
230             return builder;
231         }
232         
233         public static Builder create(EntityContract contract) {
234             if (contract == null) {
235                 throw new IllegalArgumentException("contract was null");
236             }
237             Builder builder = new Builder();
238             builder.setEntityId(contract.getId());
239             builder.setActive(contract.isActive());
240             List<Principal.Builder> principalBuilders = new ArrayList<Principal.Builder>();
241             for ( PrincipalContract p : contract.getPrincipals() ) {
242               principalBuilders.add( Principal.Builder.create(p) );
243             }
244             builder.setPrincipals(principalBuilders);
245           
246             builder.setPrivacyPreferences(contract.getPrivacyPreferences() == null ?
247                     EntityPrivacyPreferences.Builder.create(contract.getId()) : EntityPrivacyPreferences.Builder.create(contract.getPrivacyPreferences()));
248 
249             builder.setName(contract.getDefaultName() == null ? null : EntityName.Builder.create(contract.getDefaultName()));
250             List<EntityTypeContactInfoDefault.Builder> typeBuilders = new ArrayList<EntityTypeContactInfoDefault.Builder>();
251             for ( EntityTypeContactInfoContract etContract : contract.getEntityTypeContactInfos() ) {
252                 typeBuilders.add(EntityTypeContactInfoDefault.Builder.create(etContract));
253             }
254             builder.setEntityTypeContactInfos(typeBuilders);
255           
256             List<EntityAffiliation.Builder> affiliationBuilders = new ArrayList<EntityAffiliation.Builder>( );
257             for ( EntityAffiliationContract aff : contract.getAffiliations() ) {
258                 affiliationBuilders.add(EntityAffiliation.Builder.create(aff));
259                 if ( aff.isActive() && aff.isDefaultValue() ) {
260                   builder.setDefaultAffiliation( EntityAffiliation.Builder.create(aff) );
261                 }
262             }
263             builder.setAffiliations(affiliationBuilders);
264           
265             builder.setEmployment(contract.getPrimaryEmployment() == null ? null : EntityEmployment.Builder.create(contract.getPrimaryEmployment()) );
266             List<EntityExternalIdentifier.Builder> externalIdBuilders = new ArrayList<EntityExternalIdentifier.Builder>();
267             for ( EntityExternalIdentifierContract id : contract.getExternalIdentifiers() ) {
268                 externalIdBuilders.add( EntityExternalIdentifier.Builder.create(id) );
269             }
270             builder.setExternalIdentifiers( externalIdBuilders );
271 
272             return builder;
273         }
274 
275         public EntityDefault build() {
276             return new EntityDefault(this);
277         }
278 
279         public String getEntityId() {
280             return entityId;
281         }
282 
283         public void setEntityId(String entityId) {
284             this.entityId = entityId;
285         }
286 
287         public EntityName.Builder getName() {
288             return name;
289         }
290 
291         public void setName(EntityName.Builder name) {
292             this.name = name;
293         }
294 
295         public List<Principal.Builder> getPrincipals() {
296             return principals;
297         }
298 
299         public void setPrincipals(List<Principal.Builder> principals) {
300             this.principals = principals;
301         }
302 
303         public List<EntityTypeContactInfoDefault.Builder> getEntityTypeContactInfos() {
304             return entityTypeContactInfos;
305         }
306 
307         public void setEntityTypeContactInfos(List<EntityTypeContactInfoDefault.Builder> entityTypeContactInfos) {
308             this.entityTypeContactInfos = entityTypeContactInfos;
309         }
310 
311         public List<EntityAffiliation.Builder> getAffiliations() {
312             return affiliations;
313         }
314 
315         public void setAffiliations(List<EntityAffiliation.Builder> affiliations) {
316             this.affiliations = affiliations;
317         }
318 
319         public EntityAffiliation.Builder getDefaultAffiliation() {
320             return defaultAffiliation;
321         }
322 
323         public void setDefaultAffiliation(EntityAffiliation.Builder defaultAffiliation) {
324             this.defaultAffiliation = defaultAffiliation;
325         }
326 
327         public EntityEmployment.Builder getEmployment() {
328             return employment;
329         }
330 
331         public void setEmployment(EntityEmployment.Builder employment) {
332             this.employment = employment;
333         }
334 
335         public List<EntityExternalIdentifier.Builder> getExternalIdentifiers() {
336             return externalIdentifiers;
337         }
338 
339         public void setExternalIdentifiers(List<EntityExternalIdentifier.Builder> externalIdentifiers) {
340             this.externalIdentifiers = externalIdentifiers;
341         }
342 
343         public EntityPrivacyPreferences.Builder getPrivacyPreferences() {
344             return privacyPreferences;
345         }
346 
347         public void setPrivacyPreferences(EntityPrivacyPreferences.Builder privacyPreferences) {
348             this.privacyPreferences = privacyPreferences;
349         }
350 
351         public boolean isActive() {
352             return this.active;
353         }
354 
355         public void setActive(boolean active) {
356             this.active = active;
357         }
358     }
359     /**
360      * Defines some internal constants used on this class.
361      *
362      */
363     static class Constants {
364 
365         final static String ROOT_ELEMENT_NAME = "entityDefault";
366         final static String TYPE_NAME = "EntityDefaultType";
367     }
368 
369 
370     /**
371      * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
372      *
373      */
374     static class Elements {
375         final static String ENTITY_ID = "entityId";
376         final static String NAME = "name";
377         final static String PRINCIPALS = "principals";
378         final static String PRINCIPAL = "principal";
379         final static String ENTITY_TYPE_CONTACT_INFOS = "entityTypeContactInfos";
380         final static String ENTITY_TYPE_CONTACT_INFO = "entityTypeContactInfo";
381         final static String AFFILIATIONS = "affiliations";
382         final static String AFFILIATION = "affiliation";
383         final static String DEFAULT_AFFILIATION = "defaultAffiliation";
384         final static String EMPLOYMENT = "employment";
385         final static String EXTERNAL_IDENTIFIERS = "externalIdentifiers";
386         final static String EXTERNAL_IDENTIFIER = "externalIdentifier";
387         final static String PRIVACY_PREFERENCES = "privacyPreferences";
388         final static String ACTIVE = "active";
389 
390     }
391 }