001package org.kuali.ole.deliver.api;
002
003import org.apache.commons.lang.StringUtils;
004import org.kuali.api.jaxb.DateAdapter;
005import org.kuali.rice.core.api.CoreConstants;
006import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
007import org.kuali.rice.core.api.mo.ModelBuilder;
008import org.kuali.rice.kim.api.KimConstants;
009import org.kuali.rice.kim.api.identity.address.EntityAddress;
010import org.w3c.dom.Element;
011
012import javax.xml.bind.annotation.*;
013import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
014import java.io.Serializable;
015import java.util.Collection;
016import java.util.Date;
017
018/**
019 * Created with IntelliJ IDEA.
020 * User: ?
021 * Date: 5/24/12
022 * Time: 8:26 PM
023 * To change this template use File | Settings | File Templates.
024 */
025@XmlRootElement(name = org.kuali.ole.deliver.api.OleAddressDefinition.Constants.ROOT_ELEMENT_NAME)
026@XmlAccessorType(XmlAccessType.NONE)
027@XmlType(name = org.kuali.ole.deliver.api.OleAddressDefinition.Constants.TYPE_NAME, propOrder = {
028        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.OLE_ADDRESS_ID,
029        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.OLE_PTRN_ID,
030        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ID,
031        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ADDRESS_VERIFIED,
032        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ADDRESS_VALID_FROM,
033        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ADDRESS_VALID_TO,
034        //OleAddressDefinition.Elements.ENTITY_ADDRESS,
035        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ADDRESS_SOURCE,
036        org.kuali.ole.deliver.api.OleAddressDefinition.Elements.ADDRESS_SOURCE_BO,
037        //OlePatronDefinition.Elements.OLE_BORROWER_TYPE,
038        //OlePatronDefinition.Elements.ENTITY,
039
040        CoreConstants.CommonElements.VERSION_NUMBER,
041        //CoreConstants.CommonElements.OBJECT_ID,
042        CoreConstants.CommonElements.FUTURE_ELEMENTS
043})
044public class OleAddressDefinition extends AbstractDataTransferObject implements OleAddressContract {
045
046    private static final long serialVersionUID = 1L;
047
048    @XmlElement(name = Elements.OLE_ADDRESS_ID, required = false)
049    private final String oleAddressId;
050
051    @XmlElement(name = Elements.OLE_PTRN_ID, required = false)
052    private final String olePatronId;
053
054    @XmlElement(name = Elements.ID, required = false)
055    private final String id;
056
057    @XmlElement(name = Elements.ADDRESS_VALID_FROM, required = false)
058    @XmlJavaTypeAdapter(value = DateAdapter.class, type = Date.class)
059    private final Date addressValidFrom;
060
061    @XmlElement(name = Elements.ADDRESS_VALID_TO, required = false)
062    @XmlJavaTypeAdapter(value = DateAdapter.class, type = Date.class)
063    private final Date addressValidTo;
064
065    @XmlElement(name = Elements.ADDRESS_VERIFIED, required = false)
066    private final boolean addressVerified;
067
068   /* @XmlElement(name = Elements.ENTITY_ADDRESS, required = false)
069    private final EntityAddress entityAddress;*/
070
071    @XmlElement(name = Elements.ADDRESS_SOURCE, required = false)
072    private final String addressSource;
073
074    @XmlElement(name = Elements.ADDRESS_SOURCE_BO, required = false)
075    private final OleAddressSourceDefinition addressSourceBo;
076
077    /* @XmlElement(name = Elements.EXPIRATION_DATE, required = false)
078 @XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class)
079 private final Date expirationDate;*/
080
081    @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
082    private final Long versionNumber;
083
084    /*@XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false)
085    private final String objectId;*/
086    @SuppressWarnings("unused")
087    @XmlAnyElement
088    private final Collection<Element> _futureElements = null;
089
090    public OleAddressDefinition() {
091        this.oleAddressId = null;
092        this.addressVerified = false;
093        this.olePatronId = null;
094        this.id = null;
095        this.addressValidFrom = null;
096        this.addressValidTo = null;
097        // this.entityAddress = null;
098        this.addressSource = null;
099        this.addressSourceBo = null;
100        this.versionNumber = null;
101
102        //this.objectId = null;
103    }
104
105
106    private OleAddressDefinition(Builder builder) {
107        this.oleAddressId = builder.getOleAddressId();
108        this.addressVerified = builder.isAddressVerified();
109        this.olePatronId = builder.getOlePatronId();
110        this.id = builder.getId();
111        this.addressValidFrom = builder.getAddressValidFrom();
112        this.addressValidTo = builder.getAddressValidTo();
113        // this.entityAddress = builder.getEntityAddress().build();
114        this.addressSource = builder.getAddressSource();
115        if (builder.getAddressSourceBo() != null)
116            this.addressSourceBo = builder.getAddressSourceBo().build();
117        else
118            this.addressSourceBo = new OleAddressSourceDefinition();
119        this.versionNumber = builder.getVersionNumber();
120        //this.objectId = builder.getObjectId();
121    }
122
123    @Override
124    public String getOleAddressId() {
125        return oleAddressId;
126    }
127
128    @Override
129    public boolean isAddressVerified() {
130        return addressVerified;
131    }
132
133    public static long getSerialVersionUID() {
134        return serialVersionUID;
135    }
136
137    public String getOlePatronId() {
138        return olePatronId;
139    }
140
141    public Date getAddressValidFrom() {
142        return addressValidFrom;
143    }
144
145    public Date getAddressValidTo() {
146        return addressValidTo;
147    }
148
149   /* public EntityAddress getEntityAddress() {
150        return entityAddress;
151    }*/
152
153    public String getAddressSource() {
154        return addressSource;
155    }
156
157    public OleAddressSourceDefinition getAddressSourceBo() {
158        return addressSourceBo;
159    }
160    /* @Override
161    public boolean isActive() {
162        return this.activeIndicator;
163    }*/
164
165    @Override
166    public Long getVersionNumber() {
167        return this.versionNumber;
168    }
169
170    @Override
171    public String getId() {
172        return this.id;
173    }
174
175
176    //@Override
177    /*public OleBorrowerTypeDefinition getOleBorrowerType() {
178        return this.oleBorrowerType;
179    }*/
180
181    public static class Builder
182            implements Serializable, ModelBuilder, OleAddressContract {
183        private String oleAddressId;
184        private String olePatronId;
185        private String id;
186        private boolean addressVerified;
187        private Date addressValidFrom;
188        private Date addressValidTo;
189        private String addressSource;
190        private OleAddressSourceDefinition.Builder addressSourceBo;
191        private EntityAddress.Builder entityAddress;
192        private Long versionNumber;
193        private String objectId;
194
195        private Builder() {
196        }
197
198        public static Builder create() {
199            return new Builder();
200        }
201
202        public static Builder create(OleAddressContract contract) {
203            if (contract == null) {
204                throw new IllegalArgumentException("contract was null");
205            }
206            Builder builder = create();
207            if (contract.getOleAddressId() != null) {
208                builder.setOleAddressId(contract.getOleAddressId());
209            }
210            if (contract.isAddressVerified()) {
211                builder.setAddressVerified(contract.isAddressVerified());
212            }
213            if (contract.getAddressValidFrom() != null) {
214                builder.setAddressValidFrom(contract.getAddressValidFrom());
215            }
216            if (contract.getAddressValidTo() != null) {
217                builder.setAddressValidTo(contract.getAddressValidTo());
218            }
219            if (contract.getOlePatronId() != null) {
220                builder.setOlePatronId(contract.getOlePatronId());
221            }
222            if (contract.getId() != null) {
223                builder.setId(contract.getId());
224            }
225            if (contract.getAddressSource() != null) {
226                builder.setAddressSource(contract.getAddressSource());
227            }
228            if (contract.getAddressSourceBo() != null) {
229                builder.setAddressSourceBo(OleAddressSourceDefinition.Builder.create(contract.getAddressSourceBo()));
230            }
231           /* if (contract.getEntityAddress() != null) {
232                builder.setEntityAddress(EntityAddress.Builder.create(contract.getEntityAddress()));
233            }*/
234            builder.setVersionNumber(contract.getVersionNumber());
235            /*builder.setObjectId(contract.getObjectId());
236            builder.setActive(contract.isActive());*/
237            builder.setId(contract.getId());
238            return builder;
239        }
240
241
242        public org.kuali.ole.deliver.api.OleAddressDefinition build() {
243            return new org.kuali.ole.deliver.api.OleAddressDefinition(this);
244        }
245
246        public String getOleAddressId() {
247            return oleAddressId;
248        }
249
250        public void setOleAddressId(String oleAddressId) {
251            this.oleAddressId = oleAddressId;
252        }
253
254        public String getOlePatronId() {
255            return olePatronId;
256        }
257
258        public void setOlePatronId(String olePatronId) {
259            this.olePatronId = olePatronId;
260        }
261
262        public Date getAddressValidFrom() {
263            return addressValidFrom;
264        }
265
266        public void setAddressValidFrom(Date addressValidFrom) {
267            this.addressValidFrom = addressValidFrom;
268        }
269
270        public Date getAddressValidTo() {
271            return addressValidTo;
272        }
273
274        public void setAddressValidTo(Date addressValidTo) {
275            this.addressValidTo = addressValidTo;
276        }
277
278        public boolean isAddressVerified() {
279            return addressVerified;
280        }
281
282        public void setAddressVerified(boolean addressVerified) {
283            this.addressVerified = addressVerified;
284        }
285
286        public EntityAddress.Builder getEntityAddress() {
287            return entityAddress;
288        }
289
290        public void setEntityAddress(EntityAddress.Builder entityAddress) {
291            this.entityAddress = entityAddress;
292        }
293
294        public String getAddressSource() {
295            return addressSource;
296        }
297
298        public void setAddressSource(String addressSource) {
299            this.addressSource = addressSource;
300        }
301
302        public OleAddressSourceDefinition.Builder getAddressSourceBo() {
303            return addressSourceBo;
304        }
305
306        public void setAddressSourceBo(OleAddressSourceDefinition.Builder addressSourceBo) {
307            this.addressSourceBo = addressSourceBo;
308        }
309
310        @Override
311        public Long getVersionNumber() {
312            return versionNumber;
313        }
314
315        public void setVersionNumber(Long versionNumber) {
316            this.versionNumber = versionNumber;
317        }
318
319        /*@Override
320        public String getObjectId() {
321            return objectId;
322        }*/
323
324        public void setObjectId(String objectId) {
325            this.objectId = objectId;
326        }
327
328        @Override
329        public String getId() {
330            return this.id;
331        }
332
333
334        public void setId(String id) {
335            if (StringUtils.isWhitespace(id)) {
336                throw new IllegalArgumentException("id is blank");
337            }
338            this.id = id;
339        }
340    }
341
342    static class Constants {
343
344        final static String ROOT_ELEMENT_NAME = "oleAddress";
345        final static String TYPE_NAME = "OleAddressType";
346        final static String[] HASH_CODE_EQUALS_EXCLUDE = new String[]{CoreConstants.CommonElements.FUTURE_ELEMENTS};
347    }
348
349    static class Elements {
350        final static String OLE_ADDRESS_ID = "oleAddressId";
351        //final static String ENTITY_ID = "entityId";
352        final static String OLE_PTRN_ID = "olePatronId";
353        final static String ID = "id";
354        final static String ADDRESS_VERIFIED = "addressVerified";
355        final static String ADDRESS_VALID_FROM = "addressValidFrom";
356        final static String ADDRESS_VALID_TO = "addressValidTo";
357        final static String ADDRESS_SOURCE = "addressSource";
358        //final static String ENTITY_ADDRESS = "entityAddress";
359        final static String ADDRESS_SOURCE_BO = "addressSourceBo";
360    }
361
362    public static class Cache {
363        public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + Constants.TYPE_NAME;
364    }
365}