001 /**
002 * Copyright 2005-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kim.api.identity.email;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.core.api.CoreConstants;
020 import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
021 import org.kuali.rice.core.api.mo.ModelBuilder;
022 import org.kuali.rice.kim.api.KimApiConstants;
023 import org.kuali.rice.kim.api.identity.CodedAttribute;
024
025 import javax.xml.bind.Element;
026 import javax.xml.bind.annotation.XmlAccessType;
027 import javax.xml.bind.annotation.XmlAccessorType;
028 import javax.xml.bind.annotation.XmlAnyElement;
029 import javax.xml.bind.annotation.XmlElement;
030 import javax.xml.bind.annotation.XmlRootElement;
031 import javax.xml.bind.annotation.XmlType;
032 import java.io.Serializable;
033 import java.util.Collection;
034
035 @XmlRootElement(name = EntityEmail.Constants.ROOT_ELEMENT_NAME)
036 @XmlAccessorType(XmlAccessType.NONE)
037 @XmlType(name = EntityEmail.Constants.TYPE_NAME, propOrder = {
038 EntityEmail.Elements.ID,
039 EntityEmail.Elements.ENTITY_TYPE_CODE,
040 EntityEmail.Elements.ENTITY_ID,
041 EntityEmail.Elements.EMAIL_TYPE,
042 EntityEmail.Elements.EMAIL_ADDRESS,
043 EntityEmail.Elements.EMAIL_ADDRESS_UNMASKED,
044 EntityEmail.Elements.SUPPRESS_EMAIL,
045 EntityEmail.Elements.DEFAULT_VALUE,
046 EntityEmail.Elements.ACTIVE,
047 CoreConstants.CommonElements.VERSION_NUMBER,
048 CoreConstants.CommonElements.OBJECT_ID,
049 CoreConstants.CommonElements.FUTURE_ELEMENTS
050 })
051 public class EntityEmail extends AbstractDataTransferObject implements EntityEmailContract{
052
053 @XmlElement(name = Elements.ID, required = false)
054 private final String id;
055 @XmlElement(name = Elements.ENTITY_TYPE_CODE, required = false)
056 private final String entityTypeCode;
057 @XmlElement(name = Elements.ENTITY_ID, required = false)
058 private final String entityId;
059 @XmlElement(name = Elements.EMAIL_TYPE, required = false)
060 private final CodedAttribute emailType;
061 @XmlElement(name = Elements.EMAIL_ADDRESS, required = false)
062 private final String emailAddress;
063 @XmlElement(name = Elements.EMAIL_ADDRESS_UNMASKED, required = false)
064 private final String emailAddressUnmasked;
065 @XmlElement(name = Elements.SUPPRESS_EMAIL, required = false)
066 private final boolean suppressEmail;
067 @XmlElement(name = Elements.DEFAULT_VALUE, required = false)
068 private final boolean defaultValue;
069 @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
070 private final Long versionNumber;
071 @XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false)
072 private final String objectId;
073 @XmlElement(name = Elements.ACTIVE, required = false)
074 private final boolean active;
075 @SuppressWarnings("unused")
076 @XmlAnyElement
077 private final Collection<Element> _futureElements = null;
078
079 /**
080 * Private constructor used only by JAXB.
081 *
082 */
083 private EntityEmail() {
084 this.id = null;
085 this.entityId = null;
086 this.entityTypeCode = null;
087 this.emailType = null;
088 this.emailAddress = null;
089 this.emailAddressUnmasked = null;
090 this.suppressEmail = false;
091 this.defaultValue = false;
092 this.versionNumber = null;
093 this.objectId = null;
094 this.active = false;
095 }
096
097 private EntityEmail(Builder builder) {
098 this.id = builder.getId();
099 this.entityId = builder.getEntityId();
100 this.entityTypeCode = builder.getEntityTypeCode();
101 this.emailType = (builder.getEmailType() != null) ? builder.getEmailType().build() : null;
102 this.emailAddress = builder.getEmailAddress();
103 this.emailAddressUnmasked = builder.getEmailAddressUnmasked();
104 this.suppressEmail = builder.isSuppressEmail();
105 this.defaultValue = builder.isDefaultValue();
106 this.versionNumber = builder.getVersionNumber();
107 this.objectId = builder.getObjectId();
108 this.active = builder.isActive();
109 }
110
111 @Override
112 public String getId() {
113 return this.id;
114 }
115
116 @Override
117 public String getEntityId() {
118 return this.entityId;
119 }
120
121 @Override
122 public String getEntityTypeCode() {
123 return this.entityTypeCode;
124 }
125
126 @Override
127 public CodedAttribute getEmailType() {
128 return this.emailType;
129 }
130
131 @Override
132 public String getEmailAddress() {
133 return this.emailAddress;
134 }
135
136 @Override
137 public String getEmailAddressUnmasked() {
138 return this.emailAddressUnmasked;
139 }
140
141 @Override
142 public boolean isSuppressEmail() {
143 return this.suppressEmail;
144 }
145
146 @Override
147 public boolean isDefaultValue() {
148 return this.defaultValue;
149 }
150
151 @Override
152 public Long getVersionNumber() {
153 return this.versionNumber;
154 }
155
156 @Override
157 public String getObjectId() {
158 return this.objectId;
159 }
160
161 @Override
162 public boolean isActive() {
163 return this.active;
164 }
165
166 /**
167 * A builder which can be used to construct {@link EntityEmail} instances. Enforces the constraints of the {@link org.kuali.rice.kim.api.identity.email.EntityEmailContract}.
168 *
169 */
170 public final static class Builder
171 implements Serializable, ModelBuilder, EntityEmailContract
172 {
173
174 private String id;
175 private String entityId;
176 private String entityTypeCode;
177 private CodedAttribute.Builder emailType;
178 private String emailAddressUnmasked;
179 private boolean suppressEmail;
180 private boolean defaultValue;
181 private Long versionNumber;
182 private String objectId;
183 private boolean active;
184
185 private Builder() {
186
187 }
188
189 public static Builder create() {
190 return new Builder();
191 }
192
193 public static Builder create(EntityEmailContract contract) {
194 if (contract == null) {
195 throw new IllegalArgumentException("contract was null");
196 }
197 Builder builder = create();
198 builder.setId(contract.getId());
199 builder.setEntityId(contract.getEntityId());
200 builder.setEntityTypeCode(contract.getEntityTypeCode());
201 builder.setSuppressEmail(contract.isSuppressEmail());
202 if (contract.getEmailType() != null) {
203 builder.setEmailType(CodedAttribute.Builder.create(contract.getEmailType()));
204 }
205 builder.setEmailAddress(contract.getEmailAddressUnmasked());
206 builder.setDefaultValue(contract.isDefaultValue());
207 builder.setVersionNumber(contract.getVersionNumber());
208 builder.setObjectId(contract.getObjectId());
209 builder.setActive(contract.isActive());
210 return builder;
211 }
212
213 public EntityEmail build() {
214 return new EntityEmail(this);
215 }
216
217 @Override
218 public String getId() {
219 return this.id;
220 }
221
222 @Override
223 public String getEntityTypeCode() {
224 return this.entityTypeCode;
225 }
226
227 @Override
228 public String getEntityId() {
229 return this.entityId;
230 }
231
232 @Override
233 public CodedAttribute.Builder getEmailType() {
234 return this.emailType;
235 }
236
237 @Override
238 public String getEmailAddress() {
239 if (isSuppressEmail()) {
240 return KimApiConstants.RestrictedMasks.RESTRICTED_DATA_MASK;
241 }
242 return this.emailAddressUnmasked;
243 }
244
245 @Override
246 public String getEmailAddressUnmasked() {
247 return this.emailAddressUnmasked;
248 }
249
250 @Override
251 public boolean isSuppressEmail() {
252 return this.suppressEmail;
253 }
254
255 @Override
256 public boolean isDefaultValue() {
257 return this.defaultValue;
258 }
259
260 @Override
261 public Long getVersionNumber() {
262 return this.versionNumber;
263 }
264
265 @Override
266 public String getObjectId() {
267 return this.objectId;
268 }
269
270 @Override
271 public boolean isActive() {
272 return this.active;
273 }
274
275 public void setId(String id) {
276 if (StringUtils.isWhitespace(id)) {
277 throw new IllegalArgumentException("id is blank");
278 }
279 this.id = id;
280 }
281
282 public void setEntityTypeCode(String entityTypeCode) {
283 this.entityTypeCode = entityTypeCode;
284 }
285
286 public void setEntityId(String entityId) {
287 this.entityId = entityId;
288 }
289
290 public void setEmailType(CodedAttribute.Builder emailType) {
291 this.emailType = emailType;
292 }
293
294 public void setEmailAddress(String emailAddress) {
295 this.emailAddressUnmasked = emailAddress;
296 }
297
298 private void setSuppressEmail(boolean suppressEmail) {
299 this.suppressEmail = suppressEmail;
300 }
301
302 public void setDefaultValue(boolean defaultValue) {
303 this.defaultValue = defaultValue;
304 }
305
306 public void setVersionNumber(Long versionNumber) {
307 this.versionNumber = versionNumber;
308 }
309
310 public void setObjectId(String objectId) {
311 this.objectId = objectId;
312 }
313
314 public void setActive(boolean active) {
315 this.active = active;
316 }
317
318 }
319
320
321 /**
322 * Defines some internal constants used on this class.
323 *
324 */
325 static class Constants {
326
327 final static String ROOT_ELEMENT_NAME = "entityEmail";
328 final static String TYPE_NAME = "EntityEmailType";
329 }
330
331
332 /**
333 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
334 *
335 */
336 static class Elements {
337
338 final static String ID = "id";
339 final static String ENTITY_TYPE_CODE = "entityTypeCode";
340 final static String ENTITY_ID = "entityId";
341 final static String EMAIL_TYPE = "emailType";
342 final static String EMAIL_ADDRESS = "emailAddress";
343 final static String EMAIL_ADDRESS_UNMASKED = "emailAddressUnmasked";
344 final static String SUPPRESS_EMAIL = "suppressEmail";
345 final static String DEFAULT_VALUE = "defaultValue";
346 final static String ACTIVE = "active";
347
348 }
349
350 }