001 /**
002 * Copyright 2005-2013 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.citizenship;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.joda.time.DateTime;
020 import org.kuali.rice.core.api.CoreConstants;
021 import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
022 import org.kuali.rice.core.api.mo.ModelBuilder;
023 import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter;
024 import org.kuali.rice.kim.api.identity.CodedAttribute;
025 import org.w3c.dom.Element;
026
027 import javax.xml.bind.annotation.XmlAccessType;
028 import javax.xml.bind.annotation.XmlAccessorType;
029 import javax.xml.bind.annotation.XmlAnyElement;
030 import javax.xml.bind.annotation.XmlElement;
031 import javax.xml.bind.annotation.XmlRootElement;
032 import javax.xml.bind.annotation.XmlType;
033 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
034 import java.io.Serializable;
035 import java.util.Collection;
036
037 @XmlRootElement(name = EntityCitizenship.Constants.ROOT_ELEMENT_NAME)
038 @XmlAccessorType(XmlAccessType.NONE)
039 @XmlType(name = EntityCitizenship.Constants.TYPE_NAME, propOrder = {
040 EntityCitizenship.Elements.ID,
041 EntityCitizenship.Elements.ENTITY_ID,
042 EntityCitizenship.Elements.STATUS,
043 EntityCitizenship.Elements.COUNTRY_CODE,
044 EntityCitizenship.Elements.START_DATE,
045 EntityCitizenship.Elements.END_DATE,
046 CoreConstants.CommonElements.VERSION_NUMBER,
047 CoreConstants.CommonElements.OBJECT_ID,
048 EntityCitizenship.Elements.ACTIVE,
049 CoreConstants.CommonElements.FUTURE_ELEMENTS
050 })
051 public final class EntityCitizenship extends AbstractDataTransferObject
052 implements EntityCitizenshipContract
053 {
054 @XmlElement(name = Elements.ID, required = false)
055 private final String id;
056 @XmlElement(name = Elements.ENTITY_ID, required = false)
057 private final String entityId;
058 @XmlElement(name = Elements.STATUS, required = false)
059 private final CodedAttribute status;
060 @XmlElement(name = Elements.COUNTRY_CODE, required = false)
061 private final String countryCode;
062 @XmlJavaTypeAdapter(DateTimeAdapter.class)
063 @XmlElement(name = Elements.START_DATE, required = false)
064 private final DateTime startDate;
065 @XmlJavaTypeAdapter(DateTimeAdapter.class)
066 @XmlElement(name = Elements.END_DATE, required = false)
067 private final DateTime endDate;
068 @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
069 private final Long versionNumber;
070 @XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false)
071 private final String objectId;
072 @XmlElement(name = Elements.ACTIVE, required = false)
073 private final boolean active;
074 @SuppressWarnings("unused")
075 @XmlAnyElement
076 private final Collection<Element> _futureElements = null;
077
078 /**
079 * Private constructor used only by JAXB.
080 *
081 */
082 private EntityCitizenship() {
083 this.status = null;
084 this.countryCode = null;
085 this.startDate = null;
086 this.endDate = null;
087 this.versionNumber = null;
088 this.objectId = null;
089 this.active = false;
090 this.id = null;
091 this.entityId = null;
092 }
093
094 private EntityCitizenship(Builder builder) {
095 this.status = builder.getStatus() != null ? builder.getStatus().build() : null;
096 this.countryCode = builder.getCountryCode();
097 this.startDate = builder.getStartDate();
098 this.endDate = builder.getEndDate();
099 this.versionNumber = builder.getVersionNumber();
100 this.objectId = builder.getObjectId();
101 this.active = builder.isActive();
102 this.id = builder.getId();
103 this.entityId = builder.getEntityId();
104 }
105
106 @Override
107 public String getEntityId() {
108 return this.entityId;
109 }
110
111 @Override
112 public CodedAttribute getStatus() {
113 return this.status;
114 }
115
116 @Override
117 public String getCountryCode() {
118 return this.countryCode;
119 }
120
121 @Override
122 public DateTime getStartDate() {
123 return this.startDate;
124 }
125
126 @Override
127 public DateTime getEndDate() {
128 return this.endDate;
129 }
130
131 @Override
132 public Long getVersionNumber() {
133 return this.versionNumber;
134 }
135
136 @Override
137 public String getObjectId() {
138 return this.objectId;
139 }
140
141 @Override
142 public boolean isActive() {
143 return this.active;
144 }
145
146 @Override
147 public String getId() {
148 return this.id;
149 }
150
151 /**
152 * A builder which can be used to construct {@link EntityCitizenship} instances. Enforces the constraints of the {@link EntityCitizenshipContract}.
153 *
154 */
155 public final static class Builder
156 implements Serializable, ModelBuilder, EntityCitizenshipContract
157 {
158 private String entityId;
159 private CodedAttribute.Builder status;
160 private String countryCode;
161 private DateTime startDate;
162 private DateTime endDate;
163 private Long versionNumber;
164 private String objectId;
165 private boolean active;
166 private String id;
167
168 private Builder() {
169 }
170
171 public static Builder create() {
172 return new Builder();
173 }
174
175 public static Builder create(EntityCitizenshipContract contract) {
176 if (contract == null) {
177 throw new IllegalArgumentException("contract was null");
178 }
179 Builder builder = create();
180 builder.setEntityId(contract.getEntityId());
181 if (contract.getStatus() != null) {
182 builder.setStatus(CodedAttribute.Builder.create(contract.getStatus()));
183 }
184 builder.setCountryCode(contract.getCountryCode());
185 builder.setStartDate(contract.getStartDate());
186 builder.setEndDate(contract.getEndDate());
187 builder.setVersionNumber(contract.getVersionNumber());
188 builder.setObjectId(contract.getObjectId());
189 builder.setActive(contract.isActive());
190 builder.setId(contract.getId());
191 return builder;
192 }
193
194 public EntityCitizenship build() {
195 return new EntityCitizenship(this);
196 }
197
198 @Override
199 public String getEntityId() {
200 return this.entityId;
201 }
202
203 @Override
204 public CodedAttribute.Builder getStatus() {
205 return this.status;
206 }
207
208 @Override
209 public String getCountryCode() {
210 return this.countryCode;
211 }
212
213 @Override
214 public DateTime getStartDate() {
215 return this.startDate;
216 }
217
218 @Override
219 public DateTime getEndDate() {
220 return this.endDate;
221 }
222
223 @Override
224 public Long getVersionNumber() {
225 return this.versionNumber;
226 }
227
228 @Override
229 public String getObjectId() {
230 return this.objectId;
231 }
232
233 @Override
234 public boolean isActive() {
235 return this.active;
236 }
237
238 @Override
239 public String getId() {
240 return this.id;
241 }
242
243 public void setEntityId(String entityId) {
244 this.entityId = entityId;
245 }
246 public void setStatus(CodedAttribute.Builder status) {
247 this.status = status;
248 }
249
250 public void setCountryCode(String countryCode) {
251 this.countryCode = countryCode;
252 }
253
254 public void setStartDate(DateTime startDate) {
255 this.startDate = startDate;
256 }
257
258 public void setEndDate(DateTime endDate) {
259 this.endDate = endDate;
260 }
261
262 public void setVersionNumber(Long versionNumber) {
263 this.versionNumber = versionNumber;
264 }
265
266 public void setObjectId(String objectId) {
267 this.objectId = objectId;
268 }
269
270 public void setActive(boolean active) {
271 this.active = active;
272 }
273
274 public void setId(String id) {
275 if (StringUtils.isWhitespace(id)) {
276 throw new IllegalArgumentException("id is blank");
277 }
278 this.id = id;
279 }
280
281 }
282
283
284 /**
285 * Defines some internal constants used on this class.
286 *
287 */
288 static class Constants {
289
290 final static String ROOT_ELEMENT_NAME = "entityCitizenship";
291 final static String TYPE_NAME = "EntityCitizenshipType";
292 }
293
294
295 /**
296 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
297 *
298 */
299 static class Elements {
300 final static String ENTITY_ID = "entityId";
301 final static String STATUS = "status";
302 final static String COUNTRY_CODE = "countryCode";
303 final static String START_DATE = "startDate";
304 final static String END_DATE = "endDate";
305 final static String ACTIVE = "active";
306 final static String ID = "id";
307
308 }
309
310 }