1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.api.identity.phone;
17
18 import org.apache.commons.lang.StringUtils;
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.KimApiConstants;
23 import org.kuali.rice.kim.api.identity.CodedAttribute;
24 import org.w3c.dom.Element;
25
26 import javax.xml.bind.annotation.XmlAccessType;
27 import javax.xml.bind.annotation.XmlAccessorType;
28 import javax.xml.bind.annotation.XmlAnyElement;
29 import javax.xml.bind.annotation.XmlElement;
30 import javax.xml.bind.annotation.XmlRootElement;
31 import javax.xml.bind.annotation.XmlType;
32 import java.io.Serializable;
33 import java.util.Collection;
34
35 @XmlRootElement(name = EntityPhone.Constants.ROOT_ELEMENT_NAME)
36 @XmlAccessorType(XmlAccessType.NONE)
37 @XmlType(name = EntityPhone.Constants.TYPE_NAME, propOrder = {
38 EntityPhone.Elements.ID,
39 EntityPhone.Elements.ENTITY_TYPE_CODE,
40 EntityPhone.Elements.ENTITY_ID,
41 EntityPhone.Elements.PHONE_TYPE,
42 EntityPhone.Elements.COUNTRY_CODE,
43 EntityPhone.Elements.PHONE_NUMBER,
44 EntityPhone.Elements.EXTENSION_NUMBER,
45 EntityPhone.Elements.FORMATTED_PHONE_NUMBER,
46 EntityPhone.Elements.COUNTRY_CODE_UNMASKED,
47 EntityPhone.Elements.PHONE_NUMBER_UNMASKED,
48 EntityPhone.Elements.EXTENSION_NUMBER_UNMASKED,
49 EntityPhone.Elements.FORMATTED_PHONE_NUMBER_UNMASKED,
50 EntityPhone.Elements.SUPPRESS_PHONE,
51 EntityPhone.Elements.DEFAULT_VALUE,
52 EntityPhone.Elements.ACTIVE,
53 CoreConstants.CommonElements.VERSION_NUMBER,
54 CoreConstants.CommonElements.OBJECT_ID,
55 CoreConstants.CommonElements.FUTURE_ELEMENTS
56 })
57 public final class EntityPhone extends AbstractDataTransferObject
58 implements EntityPhoneContract
59 {
60
61 @XmlElement(name = Elements.ID, required = false)
62 private final String id;
63 @XmlElement(name = Elements.ENTITY_TYPE_CODE, required = false)
64 private final String entityTypeCode;
65 @XmlElement(name = Elements.ENTITY_ID, required = false)
66 private final String entityId;
67 @XmlElement(name = Elements.PHONE_TYPE, required = false)
68 private final CodedAttribute phoneType;
69 @XmlElement(name = Elements.PHONE_NUMBER, required = false)
70 private final String phoneNumber;
71 @XmlElement(name = Elements.EXTENSION_NUMBER, required = false)
72 private final String extensionNumber;
73 @XmlElement(name = Elements.COUNTRY_CODE, required = false)
74 private final String countryCode;
75 @XmlElement(name = Elements.PHONE_NUMBER_UNMASKED, required = false)
76 private final String phoneNumberUnmasked;
77 @XmlElement(name = Elements.EXTENSION_NUMBER_UNMASKED, required = false)
78 private final String extensionNumberUnmasked;
79 @XmlElement(name = Elements.COUNTRY_CODE_UNMASKED, required = false)
80 private final String countryCodeUnmasked;
81 @XmlElement(name = Elements.FORMATTED_PHONE_NUMBER, required = false)
82 private final String formattedPhoneNumber;
83 @XmlElement(name = Elements.FORMATTED_PHONE_NUMBER_UNMASKED, required = false)
84 private final String formattedPhoneNumberUnmasked;
85 @XmlElement(name = Elements.SUPPRESS_PHONE, required = false)
86 private final boolean suppressPhone;
87 @XmlElement(name = Elements.DEFAULT_VALUE, required = false)
88 private final boolean defaultValue;
89 @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
90 private final Long versionNumber;
91 @XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false)
92 private final String objectId;
93 @XmlElement(name = Elements.ACTIVE, required = false)
94 private final boolean active;
95 @SuppressWarnings("unused")
96 @XmlAnyElement
97 private final Collection<Element> _futureElements = null;
98
99
100
101
102
103 private EntityPhone() {
104 this.id = null;
105 this.entityId = null;
106 this.entityTypeCode = null;
107 this.phoneType = null;
108 this.phoneNumber = null;
109 this.extensionNumber = null;
110 this.countryCode = null;
111 this.phoneNumberUnmasked = null;
112 this.extensionNumberUnmasked = null;
113 this.countryCodeUnmasked = null;
114 this.formattedPhoneNumber = null;
115 this.formattedPhoneNumberUnmasked = null;
116 this.suppressPhone = false;
117 this.defaultValue = false;
118 this.versionNumber = null;
119 this.objectId = null;
120 this.active = false;
121 }
122
123 private EntityPhone(Builder builder) {
124 this.id = builder.getId();
125 this.entityId = builder.getEntityId();
126 this.entityTypeCode = builder.getEntityTypeCode();
127 this.phoneType = (builder.getPhoneType() != null) ? builder.getPhoneType().build() : null;
128 this.phoneNumber = builder.getPhoneNumber();
129 this.extensionNumber = builder.getExtensionNumber();
130 this.countryCode = builder.getCountryCode();
131 this.phoneNumberUnmasked = builder.getPhoneNumberUnmasked();
132 this.extensionNumberUnmasked = builder.getExtensionNumberUnmasked();
133 this.countryCodeUnmasked = builder.getCountryCodeUnmasked();
134 this.formattedPhoneNumber = builder.getFormattedPhoneNumber();
135 this.formattedPhoneNumberUnmasked = builder.getFormattedPhoneNumberUnmasked();
136 this.suppressPhone = builder.isSuppressPhone();
137 this.defaultValue = builder.isDefaultValue();
138 this.versionNumber = builder.getVersionNumber();
139 this.objectId = builder.getObjectId();
140 this.active = builder.isActive();
141 }
142
143 @Override
144 public String getId() {
145 return this.id;
146 }
147
148 @Override
149 public String getEntityId() {
150 return this.entityId;
151 }
152
153 @Override
154 public String getEntityTypeCode() {
155 return this.entityTypeCode;
156 }
157
158 @Override
159 public CodedAttribute getPhoneType() {
160 return this.phoneType;
161 }
162
163 @Override
164 public String getPhoneNumber() {
165 return this.phoneNumber;
166 }
167
168 @Override
169 public String getExtensionNumber() {
170 return this.extensionNumber;
171 }
172
173 @Override
174 public String getCountryCode() {
175 return this.countryCode;
176 }
177
178 @Override
179 public String getPhoneNumberUnmasked() {
180 return this.phoneNumberUnmasked;
181 }
182
183 @Override
184 public String getExtensionNumberUnmasked() {
185 return this.extensionNumberUnmasked;
186 }
187
188 @Override
189 public String getCountryCodeUnmasked() {
190 return this.countryCodeUnmasked;
191 }
192
193 @Override
194 public String getFormattedPhoneNumber() {
195 return this.formattedPhoneNumber;
196 }
197
198 @Override
199 public String getFormattedPhoneNumberUnmasked() {
200 return this.formattedPhoneNumberUnmasked;
201 }
202
203 @Override
204 public boolean isSuppressPhone() {
205 return this.suppressPhone;
206 }
207
208 @Override
209 public boolean isDefaultValue() {
210 return this.defaultValue;
211 }
212
213 @Override
214 public Long getVersionNumber() {
215 return this.versionNumber;
216 }
217
218 @Override
219 public String getObjectId() {
220 return this.objectId;
221 }
222
223 @Override
224 public boolean isActive() {
225 return this.active;
226 }
227
228
229
230
231
232 public final static class Builder
233 implements Serializable, ModelBuilder, EntityPhoneContract
234 {
235
236 private String id;
237 private String entityId;
238 private String entityTypeCode;
239 private CodedAttribute.Builder phoneType;
240
241
242
243 private String phoneNumberUnmasked;
244 private String extensionNumberUnmasked;
245 private String countryCodeUnmasked;
246
247
248 private boolean suppressPhone;
249 private boolean defaultValue;
250 private Long versionNumber;
251 private String objectId;
252 private boolean active;
253
254 private Builder() {
255
256 }
257
258 public static Builder create() {
259 return new Builder();
260 }
261
262 public static Builder create(EntityPhoneContract contract) {
263 if (contract == null) {
264 throw new IllegalArgumentException("contract was null");
265 }
266 Builder builder = create();
267 builder.setId(contract.getId());
268 builder.setEntityId(contract.getEntityId());
269 builder.setEntityTypeCode(contract.getEntityTypeCode());
270 builder.setSuppressPhone(contract.isSuppressPhone());
271 if (contract.getPhoneType() != null) {
272 builder.setPhoneType(CodedAttribute.Builder.create(contract.getPhoneType()));
273 }
274 builder.setPhoneNumber(contract.getPhoneNumberUnmasked());
275 builder.setExtensionNumber(contract.getExtensionNumberUnmasked());
276 builder.setCountryCode(contract.getCountryCodeUnmasked());
277 builder.setDefaultValue(contract.isDefaultValue());
278 builder.setVersionNumber(contract.getVersionNumber());
279 builder.setObjectId(contract.getObjectId());
280 builder.setActive(contract.isActive());
281 return builder;
282 }
283
284 public EntityPhone build() {
285 return new EntityPhone(this);
286 }
287
288 @Override
289 public String getId() {
290 return this.id;
291 }
292
293 @Override
294 public String getEntityTypeCode() {
295 return this.entityTypeCode;
296 }
297
298 @Override
299 public String getEntityId() {
300 return this.entityId;
301 }
302
303 @Override
304 public CodedAttribute.Builder getPhoneType() {
305 return this.phoneType;
306 }
307
308 @Override
309 public String getPhoneNumber() {
310 if (isSuppressPhone()) {
311 return KimApiConstants.RestrictedMasks.RESTRICTED_DATA_MASK_PHONE;
312 }
313 return this.phoneNumberUnmasked;
314 }
315
316 @Override
317 public String getExtensionNumber() {
318 if (isSuppressPhone()) {
319 return KimApiConstants.RestrictedMasks.RESTRICTED_DATA_MASK;
320 }
321 return this.extensionNumberUnmasked;
322 }
323
324 @Override
325 public String getCountryCode() {
326 if (isSuppressPhone()) {
327 return KimApiConstants.RestrictedMasks.RESTRICTED_DATA_MASK_CODE;
328 }
329 return this.countryCodeUnmasked;
330 }
331
332 @Override
333 public String getPhoneNumberUnmasked() {
334 return this.phoneNumberUnmasked;
335 }
336
337 @Override
338 public String getExtensionNumberUnmasked() {
339 return this.extensionNumberUnmasked;
340 }
341
342 @Override
343 public String getCountryCodeUnmasked() {
344 return this.countryCodeUnmasked;
345 }
346
347 @Override
348 public String getFormattedPhoneNumber() {
349 if (isSuppressPhone()) {
350 return KimApiConstants.RestrictedMasks.RESTRICTED_DATA_MASK;
351 }
352 return this.getFormattedPhoneNumberUnmasked();
353 }
354
355 @Override
356 public String getFormattedPhoneNumberUnmasked() {
357 StringBuffer sb = new StringBuffer( 30 );
358
359
360
361 sb.append( this.phoneNumberUnmasked );
362 if ( StringUtils.isNotBlank( this.extensionNumberUnmasked) ) {
363 sb.append( " x" );
364 sb.append( this.extensionNumberUnmasked );
365 }
366
367 return sb.toString();
368 }
369
370 @Override
371 public boolean isSuppressPhone() {
372 return this.suppressPhone;
373 }
374
375 @Override
376 public boolean isDefaultValue() {
377 return this.defaultValue;
378 }
379
380 @Override
381 public Long getVersionNumber() {
382 return this.versionNumber;
383 }
384
385 @Override
386 public String getObjectId() {
387 return this.objectId;
388 }
389
390 @Override
391 public boolean isActive() {
392 return this.active;
393 }
394
395 public void setId(String id) {
396 if (StringUtils.isWhitespace(id)) {
397 throw new IllegalArgumentException("id is blank");
398 }
399 this.id = id;
400 }
401
402 public void setEntityTypeCode(String entityTypeCode) {
403 this.entityTypeCode = entityTypeCode;
404 }
405
406 public void setEntityId(String entityId) {
407 this.entityId = entityId;
408 }
409
410 public void setPhoneType(CodedAttribute.Builder phoneType) {
411 this.phoneType = phoneType;
412 }
413
414 public void setPhoneNumber(String phoneNumber) {
415 this.phoneNumberUnmasked = phoneNumber;
416 }
417
418 public void setExtensionNumber(String extensionNumber) {
419 this.extensionNumberUnmasked = extensionNumber;
420 }
421
422 public void setCountryCode(String countryCode) {
423 this.countryCodeUnmasked = countryCode;
424 }
425
426 private void setSuppressPhone(boolean suppressPhone) {
427 this.suppressPhone = suppressPhone;
428 }
429
430 public void setDefaultValue(boolean defaultValue) {
431 this.defaultValue = defaultValue;
432 }
433
434 public void setVersionNumber(Long versionNumber) {
435 this.versionNumber = versionNumber;
436 }
437
438 public void setObjectId(String objectId) {
439 this.objectId = objectId;
440 }
441
442 public void setActive(boolean active) {
443 this.active = active;
444 }
445
446 }
447
448
449
450
451
452
453 static class Constants {
454
455 final static String ROOT_ELEMENT_NAME = "entityPhone";
456 final static String TYPE_NAME = "EntityPhoneType";
457 }
458
459
460
461
462
463
464 static class Elements {
465
466 final static String ID = "id";
467 final static String ENTITY_TYPE_CODE = "entityTypeCode";
468 final static String ENTITY_ID = "entityId";
469 final static String PHONE_TYPE = "phoneType";
470 final static String PHONE_NUMBER = "phoneNumber";
471 final static String EXTENSION_NUMBER = "extensionNumber";
472 final static String COUNTRY_CODE = "countryCode";
473 final static String PHONE_NUMBER_UNMASKED = "phoneNumberUnmasked";
474 final static String EXTENSION_NUMBER_UNMASKED = "extensionNumberUnmasked";
475 final static String COUNTRY_CODE_UNMASKED = "countryCodeUnmasked";
476 final static String FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
477 final static String FORMATTED_PHONE_NUMBER_UNMASKED = "formattedPhoneNumberUnmasked";
478 final static String SUPPRESS_PHONE = "suppressPhone";
479 final static String DEFAULT_VALUE = "defaultValue";
480 final static String ACTIVE = "active";
481
482 }
483
484 }