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    }