Merge branch 'release/5.45.0'
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / agent / Address.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.cdm.model.agent;
10
11 import javax.persistence.Entity;
12 import javax.persistence.FetchType;
13 import javax.persistence.ManyToOne;
14 import javax.xml.bind.annotation.XmlAccessType;
15 import javax.xml.bind.annotation.XmlAccessorType;
16 import javax.xml.bind.annotation.XmlElement;
17 import javax.xml.bind.annotation.XmlIDREF;
18 import javax.xml.bind.annotation.XmlRootElement;
19 import javax.xml.bind.annotation.XmlSchemaType;
20 import javax.xml.bind.annotation.XmlTransient;
21 import javax.xml.bind.annotation.XmlType;
22
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
25 import org.hibernate.envers.Audited;
26
27 import eu.etaxonomy.cdm.model.common.VersionableEntity;
28 import eu.etaxonomy.cdm.model.location.Country;
29 import eu.etaxonomy.cdm.model.location.Point;
30
31 /**
32 * This class represents atomized postal addresses.
33 * <P>
34 * This class corresponds to: <ul>
35 * <li> Address according to the TDWG ontology
36 * <li> Address according to the TCS
37 * <li> Address according to the ABCD schema
38 * </ul>
39 *
40 * @author m.doering
41 * @since 08-Nov-2007 13:06:09
42 */
43 @XmlAccessorType(XmlAccessType.FIELD)
44 @XmlType(name = "Address", propOrder = {
45 "pobox",
46 "street",
47 "postcode",
48 "locality",
49 "region",
50 "country",
51 "location"
52 })
53 @XmlRootElement(name = "Address")
54 @Entity
55 @Audited
56 public class Address extends VersionableEntity {
57
58 private static final long serialVersionUID = 682106303069088972L;
59 @SuppressWarnings("unused")
60 private static final Logger logger = LogManager.getLogger();
61
62 public static Address NewInstance(){
63 return new Address();
64 }
65
66 public static Address NewInstance(Country country,
67 String locality, String pobox, String postcode,
68 String region, String street, Point location) {
69 return new Address(country, locality, location, pobox, postcode,
70 region, street);
71 }
72
73 private Address(){
74
75 }
76
77 private Address(Country country, String locality, Point location,
78 String pobox, String postcode, String region, String street) {
79 super();
80 this.country = country;
81 this.locality = locality;
82 this.location = location;
83 this.pobox = pobox;
84 this.postcode = postcode;
85 this.region = region;
86 this.street = street;
87 }
88
89 @XmlElement(name = "POBox")
90 private String pobox;
91
92 @XmlElement(name = "Street")
93 private String street;
94
95 @XmlElement(name = "Postcode")
96 private String postcode;
97
98 @XmlElement(name = "Locality", required = true)
99 private String locality;
100
101 @XmlElement(name = "Region")
102 private String region;
103
104 @XmlElement(name = "Country")
105 @XmlIDREF
106 @XmlSchemaType(name = "IDREF")
107 @ManyToOne(fetch = FetchType.LAZY)
108 private Country country;
109
110 @XmlElement(name = "Location")
111 private Point location;
112
113 /**
114 * Returns the {@link Country country} involved in <i>this</i> postal address.
115 *
116 * @return the country
117 */
118 public Country getCountry(){
119 return this.country;
120 }
121
122 /**
123 * @see #getCountry()
124 */
125 public void setCountry(Country country){
126 this.country = country;
127 }
128
129 /**
130 * Returns the geophysical {@link Point location} (coordinates) of <i>this</i> postal address.
131 * The location can be useful for instance to visualize the address on a map.
132 *
133 * @return the point corresponding to <i>this</i> address
134 * @see eu.etaxonomy.cdm.model.location.Point
135 */
136 @XmlTransient
137 public Point getLocation(){
138 return this.location;
139 }
140
141 /**
142 * @see #getLocation()
143 */
144 public void setLocation(Point location){
145 this.location = location;
146 }
147
148 /**
149 * Returns a string corresponding to the post office box
150 * involved in <i>this</i> postal address.
151 *
152 * @return the post office box string
153 */
154 public String getPobox(){
155 return this.pobox;
156 }
157
158 /**
159 * @see #getPobox()
160 */
161 public void setPobox(String pobox){
162 this.pobox = pobox == "" ? null : pobox;
163 }
164
165 /**
166 * Returns the street name and number involved in <i>this</i> postal address.
167 * Street numbers are part of the street string.
168 *
169 * @return the string composed of street name and number
170 */
171 public String getStreet(){
172 return this.street;
173 }
174
175 /**
176 * @see #getStreet()
177 */
178 public void setStreet(String street){
179 this.street = street == "" ? null : street;
180 }
181
182 /**
183 * Returns the post code number involved in <i>this</i> postal address.
184 *
185 * @return the post code number string
186 */
187 public String getPostcode(){
188 return this.postcode;
189 }
190
191 /**
192 * @see #getPostcode()
193 */
194 public void setPostcode(String postcode){
195 this.postcode = postcode == "" ? null : postcode;
196 }
197
198 /**
199 * Returns the town (possibly with locality or suburb) involved in <i>this</i> postal address.
200 *
201 * @return the string representing a town
202 */
203 public String getLocality(){
204 return this.locality;
205 }
206
207 /**
208 * @see #getLocality()
209 */
210 public void setLocality(String locality){
211 this.locality = locality == "" ? null: locality;
212 }
213
214 /**
215 * Returns the region or state involved in <i>this</i> postal address.
216 *
217 * @return the string representing a region or a state
218 */
219 public String getRegion(){
220 return this.region;
221 }
222
223 /**
224 * @see #getRegion()
225 */
226 public void setRegion(String region){
227 this.region = region == "" ? null: region;
228 }
229
230 //************************ CLONE ************************ //
231 /**
232 * Clones this Address.
233 * Set fields for nextVersion, previousVersion, updated, updatedBy and createdBy are set to <tt>null</tt>
234 * The id is set to 0.
235 * The uuid is created new.
236 * The createdWhen is set to the current date.
237 * @see java.lang.Object#clone()
238 */
239 @Override
240 public Address clone() throws CloneNotSupportedException{
241 Address result = (Address)super.clone();
242
243 //no changes to: -
244 return result;
245 }
246 }