001/**
002 * Copyright 2005-2018 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 */
016package org.kuali.rice.kim.api.identity.type;
017
018import org.kuali.rice.core.api.CoreConstants;
019import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
020import org.kuali.rice.core.api.mo.ModelBuilder;
021import org.kuali.rice.kim.api.identity.address.EntityAddress;
022import org.kuali.rice.kim.api.identity.email.EntityEmail;
023import org.kuali.rice.kim.api.identity.phone.EntityPhone;
024import org.w3c.dom.Element;
025
026import javax.xml.bind.annotation.XmlAccessType;
027import javax.xml.bind.annotation.XmlAccessorType;
028import javax.xml.bind.annotation.XmlAnyElement;
029import javax.xml.bind.annotation.XmlElement;
030import javax.xml.bind.annotation.XmlRootElement;
031import javax.xml.bind.annotation.XmlType;
032import java.io.Serializable;
033import java.util.Collection;
034
035@XmlRootElement(name = EntityTypeContactInfoDefault.Constants.ROOT_ELEMENT_NAME)
036@XmlAccessorType(XmlAccessType.NONE)
037@XmlType(name = EntityTypeContactInfoDefault.Constants.TYPE_NAME, propOrder = {
038    EntityTypeContactInfoDefault.Elements.ENTITY_TYPE_CODE,
039    EntityTypeContactInfoDefault.Elements.DEFAULT_ADDRESS,
040    EntityTypeContactInfoDefault.Elements.DEFAULT_EMAIL_ADDRESS,
041    EntityTypeContactInfoDefault.Elements.DEFAULT_PHONE_NUMBER,
042    CoreConstants.CommonElements.FUTURE_ELEMENTS
043})
044public final class EntityTypeContactInfoDefault extends AbstractDataTransferObject
045{
046    @XmlElement(name = Elements.ENTITY_TYPE_CODE, required = true)
047    private final String entityTypeCode;
048    @XmlElement(name = Elements.DEFAULT_ADDRESS, required = false)
049    private final EntityAddress defaultAddress;
050    @XmlElement(name = Elements.DEFAULT_EMAIL_ADDRESS, required = false)
051    private final EntityEmail defaultEmailAddress;
052    @XmlElement(name = Elements.DEFAULT_PHONE_NUMBER, required = false)
053    private final EntityPhone defaultPhoneNumber;
054    @SuppressWarnings("unused")
055    @XmlAnyElement
056    private final Collection<Element> _futureElements = null;
057
058    /**
059     * Private constructor used only by JAXB.
060     */
061    private EntityTypeContactInfoDefault() {
062        this.entityTypeCode = null;
063        this.defaultAddress = null;
064        this.defaultEmailAddress = null;
065        this.defaultPhoneNumber = null;
066
067    }
068
069    public EntityTypeContactInfoDefault(String entityTypeCode, EntityAddress defaultAddress,
070            EntityEmail defaultEmailAddress, EntityPhone defaultPhoneNumber) {
071        this.entityTypeCode = entityTypeCode;
072        this.defaultAddress = defaultAddress;
073        this.defaultEmailAddress = defaultEmailAddress;
074        this.defaultPhoneNumber = defaultPhoneNumber;
075    }
076
077    public EntityTypeContactInfoDefault(Builder builder) {
078        this.entityTypeCode = builder.getEntityTypeCode();
079        this.defaultAddress = builder.getDefaultAddress() == null ? null : builder.getDefaultAddress().build();
080        this.defaultEmailAddress = builder.getDefaultEmailAddress() == null ? null : builder.getDefaultEmailAddress().build();
081        this.defaultPhoneNumber = builder.getDefaultPhoneNumber() == null ? null : builder.getDefaultPhoneNumber().build();
082
083    }
084
085    public String getEntityTypeCode() {
086        return this.entityTypeCode;
087    }
088    public EntityAddress getDefaultAddress() {
089        return this.defaultAddress;
090    }
091
092    public EntityEmail getDefaultEmailAddress() {
093        return this.defaultEmailAddress;
094    }
095
096    public EntityPhone getDefaultPhoneNumber() {
097        return this.defaultPhoneNumber;
098    }
099
100    public final static class Builder
101        implements Serializable, ModelBuilder
102    {
103        private String entityTypeCode;
104        private EntityAddress.Builder defaultAddress;
105        private EntityEmail.Builder defaultEmailAddress;
106        private EntityPhone.Builder defaultPhoneNumber;
107
108        private Builder() { }
109
110        public static Builder create() {
111            return new Builder();
112        }
113
114        public static Builder create(EntityTypeContactInfoDefault immutable) {
115            if (immutable == null) {
116                throw new IllegalArgumentException("EntityTypeDataDefault is null");
117            }
118            Builder builder = new Builder();
119            builder.setEntityTypeCode(immutable.entityTypeCode);
120            if (immutable.getDefaultAddress() != null) {
121                builder.setDefaultAddress(EntityAddress.Builder.create(immutable.getDefaultAddress()));
122            }
123            if (immutable.getDefaultEmailAddress() != null) {
124                builder.setDefaultEmailAddress(EntityEmail.Builder.create(immutable.getDefaultEmailAddress()));
125            }
126            if (immutable.getDefaultPhoneNumber() != null) {
127                builder.setDefaultPhoneNumber(EntityPhone.Builder.create(immutable.getDefaultPhoneNumber()));
128            }
129            return builder;
130        }
131
132        public static Builder create(EntityTypeContactInfoContract contract) {
133            if (contract == null) {
134                throw new IllegalArgumentException("contract is null");
135            }
136            Builder builder = new Builder();
137            builder.setEntityTypeCode(contract.getEntityTypeCode());
138            if (contract.getDefaultAddress() != null) {
139                builder.setDefaultAddress(EntityAddress.Builder.create(contract.getDefaultAddress()));
140            }
141            if (contract.getDefaultEmailAddress() != null) {
142                builder.setDefaultEmailAddress(EntityEmail.Builder.create(contract.getDefaultEmailAddress()));
143            }
144            if (contract.getDefaultPhoneNumber() != null) {
145                builder.setDefaultPhoneNumber(EntityPhone.Builder.create(contract.getDefaultPhoneNumber()));
146            }
147            return builder;
148        }
149
150        public EntityTypeContactInfoDefault build() {
151            return new EntityTypeContactInfoDefault(this);
152        }
153
154        public String getEntityTypeCode() {
155            return entityTypeCode;
156        }
157
158        public void setEntityTypeCode(String entityTypeCode) {
159            this.entityTypeCode = entityTypeCode;
160        }
161
162        public EntityAddress.Builder getDefaultAddress() {
163            return defaultAddress;
164        }
165
166        public void setDefaultAddress(EntityAddress.Builder defaultAddress) {
167            this.defaultAddress = defaultAddress;
168        }
169
170        public EntityEmail.Builder getDefaultEmailAddress() {
171            return defaultEmailAddress;
172        }
173
174        public void setDefaultEmailAddress(EntityEmail.Builder defaultEmailAddress) {
175            this.defaultEmailAddress = defaultEmailAddress;
176        }
177
178        public EntityPhone.Builder getDefaultPhoneNumber() {
179            return defaultPhoneNumber;
180        }
181
182        public void setDefaultPhoneNumber(EntityPhone.Builder defaultPhoneNumber) {
183            this.defaultPhoneNumber = defaultPhoneNumber;
184        }
185    }
186
187
188
189    /**
190     * Defines some internal constants used on this class.
191     *
192     */
193    static class Constants {
194
195        final static String ROOT_ELEMENT_NAME = "entityTypeDataDefault";
196        final static String TYPE_NAME = "EntityTypeDataDefaultType";
197    }
198
199
200    /**
201     * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
202     *
203     */
204    static class Elements {
205        final static String ENTITY_TYPE_CODE = "entityTypeCode";
206        final static String DEFAULT_ADDRESS = "defaultAddress";
207        final static String DEFAULT_EMAIL_ADDRESS = "defaultEmailAddress";
208        final static String DEFAULT_PHONE_NUMBER = "defaultPhoneNumber";
209
210    }
211
212}