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 }