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