001    /*-----------------------------------------------------------------------
002     *  Copyright (C) 2006
003     *  Associated Universities, Inc. Washington DC, USA.
004     *  This program is free software; you can redistribute it and/or
005     *  modify it under the terms of the GNU General Public License as
006     *  published by the Free Software Foundation; either version 2 of
007     *  the License, or (at your option) any later version.
008     *
009     *  This program is distributed in the hope that it will be useful,
010     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
011     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012     *  GNU General Public License for more details.
013     *
014     *  Correspondence concerning this software should be addressed as follows:
015     *         Internet email: switz@nrao.edu
016     *         Postal address: User Database
017     *                         National Radio Astronomy Observatory
018     *                         Post Office Box 0
019     *                         Socorro, NM 87801  USA
020     *-----------------------------------------------------------------------*/
021    package edu.nrao.sss.model.user;
022    
023    import java.util.HashSet;
024    import java.util.Iterator;
025    import java.util.Set;
026    
027    import edu.nrao.sss.xml.XMLTransform;
028    
029    public class Address extends Contact implements XMLable {
030    
031            private static final long serialVersionUID = 1L;
032    
033            private AddressCountry addressCountry;
034    
035            private AddressState addressState;
036    
037            private Set<AddressType> addressTypes;
038    
039            private String city;
040    
041            private String postalCode;
042    
043            private String region;
044    
045            private String street1;
046    
047            private String street2;
048    
049            private String street3;
050    
051            private String street4;
052    
053            public Address() {
054                    super();
055                    this.contactType = ContactType.ADDRESS;
056            }
057    
058            public Address(Address address) {
059                    copy(address);
060            }
061    
062            public void addToAddressTypes(AddressType addressType) {
063                    if (addressType == null)
064                            return;
065                    if (addressTypes == null)
066                            addressTypes = new HashSet<AddressType>();
067                    addressTypes.add(addressType);
068            }
069    
070            public void copy(Address address) {
071                    super.copy(address);
072                    set(address);
073            }
074    
075            public boolean equals(Object obj) {
076                    if (null == obj)
077                            return false;
078                    if (!(obj instanceof Address))
079                            return false;
080                    else {
081                            Address mObj = (Address) obj;
082                            return (this.getId() == mObj.getId());
083                    }
084            }
085    
086            public AddressCountry getAddressCountry() {
087                    return addressCountry;
088            }
089    
090            public AddressState getAddressState() {
091                    return addressState;
092            }
093    
094            public Set<AddressType> getAddressTypes() {
095                    if (addressTypes == null)
096                            addressTypes = new HashSet<AddressType>();
097                    return addressTypes;
098            }
099    
100            public String getCity() {
101                    return city;
102            }
103    
104            public String getPostalCode() {
105                    return postalCode;
106            }
107    
108            public String getRegion() {
109                    return region;
110            }
111    
112            public String getStreet1() {
113                    return street1;
114            }
115    
116            public String getStreet2() {
117                    return street2;
118            }
119    
120            public String getStreet3() {
121                    return street3;
122            }
123    
124            public String getStreet4() {
125                    return street4;
126            }
127    
128            private void set(Address address) {
129                    this.setAddressCountry(address.getAddressCountry());
130                    this.setAddressState(address.getAddressState());
131                    this.setPostalCode(address.getPostalCode());
132                    this.setRegion(address.getRegion());
133                    this.setCity(address.getCity());
134                    this.setStreet1(address.getStreet1());
135                    this.setStreet2(address.getStreet2());
136                    this.setStreet3(address.getStreet3());
137                    this.setStreet4(address.getStreet4());
138                    addressTypes = new HashSet<AddressType>();
139                    for (Iterator<AddressType> iter = address.getAddressTypes().iterator(); iter
140                                    .hasNext();) {
141                            this.addToAddressTypes(iter.next());
142                    }
143            }
144    
145            public void setAddressCountry(AddressCountry addressCountry) {
146                    this.addressCountry = addressCountry;
147            }
148    
149            public void setAddressState(AddressState addressState) {
150                    this.addressState = addressState;
151            }
152    
153            public void setAddressTypes(Set<AddressType> addressTypes) {
154                    this.addressTypes = addressTypes;
155            }
156    
157            public void setCity(String city) {
158                    this.city = city;
159            }
160    
161            public void setPostalCode(String postalCode) {
162                    this.postalCode = postalCode;
163            }
164    
165            public void setRegion(String region) {
166                    this.region = region;
167            }
168    
169            public void setStreet1(String street1) {
170                    this.street1 = street1;
171            }
172    
173            public void setStreet2(String street2) {
174                    this.street2 = street2;
175            }
176    
177            public void setStreet3(String street3) {
178                    this.street3 = street3;
179            }
180    
181            public void setStreet4(String street4) {
182                    this.street4 = street4;
183            }
184    
185            public final String toXML() {
186                    StringBuffer result = new StringBuffer();
187                    String slines[] = { getStreet1(), getStreet2(), getStreet3(),
188                                    getStreet4() };
189                    AddressCountry aC = getAddressCountry();
190                    AddressState aS = getAddressState();
191    
192                    if (isDefaultContact()) {
193                            result.append("<default-postal-address>\n");
194                    } else {
195                            result.append("<additional-postal-address>\n");
196                    }
197    
198                    for (AddressType at : getAddressTypes()) {
199                            result.append("<address-type>"
200                                            + XMLTransform.encode(at.getAddressType())
201                                            + "</address-type>\n");
202                    }
203    
204                    for (String sline : slines) {
205                            if (sline != null && sline.trim().length() > 0)
206                                    result.append("<streetline>" + XMLTransform.encode(sline)
207                                                    + "</streetline>\n");
208                    }
209    
210                    if (getCity() != null)
211                            result.append("<city>" + XMLTransform.encode(getCity())
212                                            + "</city>\n");
213    
214                    if (aS != null)
215                            result
216                                            .append("<state>"
217                                                            + XMLTransform.encode(aS.getStateFullName())
218                                                            + "</state>\n");
219    
220                    if (getRegion() != null && getRegion().trim().length() > 0)
221                            result.append("<region>" + XMLTransform.encode(getRegion())
222                                            + "</region>\n");
223    
224                    if (aC != null)
225                            result.append("<country>"
226                                            + XMLTransform.encode(aC.getAddressCountry())
227                                            + "</country>\n");
228    
229                    if (getPostalCode() != null && getPostalCode().trim().length() > 0)
230                            result
231                                            .append("<postal-code>"
232                                                            + XMLTransform.encode(getPostalCode())
233                                                            + "</postal-code>\n");
234    
235                    if (isDefaultContact()) {
236                            result.append("</default-postal-address>\n");
237                    } else {
238                            result.append("</additional-postal-address>\n");
239                    }
240                    return result.toString();
241            }
242    
243    }