partOf now using the field directly
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / location / NamedArea.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
10 package eu.etaxonomy.cdm.model.location;
11
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.Set;
16 import java.util.UUID;
17
18 import javax.persistence.Entity;
19 import javax.persistence.FetchType;
20 import javax.persistence.JoinTable;
21 import javax.persistence.ManyToMany;
22 import javax.persistence.ManyToOne;
23 import javax.persistence.Transient;
24 import javax.xml.bind.annotation.XmlAccessType;
25 import javax.xml.bind.annotation.XmlAccessorType;
26 import javax.xml.bind.annotation.XmlElement;
27 import javax.xml.bind.annotation.XmlElementWrapper;
28 import javax.xml.bind.annotation.XmlIDREF;
29 import javax.xml.bind.annotation.XmlRootElement;
30 import javax.xml.bind.annotation.XmlSchemaType;
31 import javax.xml.bind.annotation.XmlSeeAlso;
32 import javax.xml.bind.annotation.XmlType;
33
34 import org.apache.log4j.Logger;
35 import org.hibernate.annotations.Cascade;
36 import org.hibernate.annotations.CascadeType;
37 import org.hibernate.envers.Audited;
38
39 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
40 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
41 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
42 import eu.etaxonomy.cdm.model.common.TermVocabulary;
43 import eu.etaxonomy.cdm.model.common.TimePeriod;
44 import eu.etaxonomy.cdm.model.media.Media;
45
46 /**
47 * @author m.doering
48 * @version 1.0
49 * @created 08-Nov-2007 13:06:36
50 */
51 @XmlAccessorType(XmlAccessType.PROPERTY)
52 @XmlType(name = "NamedArea", propOrder = {
53 "kindOf",
54 "generalizationOf",
55 "partOf",
56 "includes",
57 "validPeriod",
58 "shape",
59 "pointApproximation",
60 "waterbodiesOrCountries",
61 "type",
62 "level"
63 })
64 @XmlRootElement(name = "NamedArea")
65 @XmlSeeAlso({TdwgArea.class})
66 @Entity
67 @Audited
68 public class NamedArea extends OrderedTermBase<NamedArea> {
69 private static final long serialVersionUID = 6248434369557403036L;
70 private static final Logger logger = Logger.getLogger(NamedArea.class);
71
72 //description of time valid context of this area. e.g. year range
73 private TimePeriod validPeriod = TimePeriod.NewInstance();
74
75 //Binary shape definition for user's defined area as polygon
76 @ManyToOne(fetch = FetchType.LAZY)
77 @Cascade(CascadeType.SAVE_UPDATE)
78 private Media shape;
79
80 private Point pointApproximation;
81
82 @ManyToMany(fetch = FetchType.LAZY)
83 @JoinTable(name="DefinedTermBase_WaterbodyOrCountry")
84 private Set<WaterbodyOrCountry> waterbodiesOrCountries = new HashSet<WaterbodyOrCountry>();
85
86 @ManyToOne(fetch = FetchType.LAZY)
87 private NamedAreaType type;
88
89 @ManyToOne(fetch = FetchType.LAZY)
90 private NamedAreaLevel level;
91
92 /**
93 * Factory method
94 * @return
95 */
96 public static NamedArea NewInstance(){
97 logger.debug("NewInstance");
98 return new NamedArea();
99 }
100
101 /**
102 * Factory method
103 * @return
104 */
105 public static NamedArea NewInstance(String term, String label, String labelAbbrev){
106 return new NamedArea(term, label, labelAbbrev);
107 }
108
109 /**
110 * Constructor
111 */
112 public NamedArea() {
113 super();
114 }
115
116 public NamedArea(String term, String label, String labelAbbrev) {
117 super(term, label, labelAbbrev);
118 }
119
120 @XmlElement(name = "NamedAreaType")
121 @XmlIDREF
122 @XmlSchemaType(name = "IDREF")
123 public NamedAreaType getType(){
124 return this.type;
125 }
126
127 public void setType(NamedAreaType type){
128 this.type = type;
129 }
130
131 @XmlElement(name = "NamedAreaLevel")
132 @XmlIDREF
133 @XmlSchemaType(name = "IDREF")
134 public NamedAreaLevel getLevel(){
135 return this.level;
136 }
137
138 public void setLevel(NamedAreaLevel level){
139 this.level = level;
140 }
141
142 @XmlElement(name = "ValidPeriod")
143 public TimePeriod getValidPeriod(){
144 return this.validPeriod;
145 }
146
147 public void setValidPeriod(TimePeriod validPeriod){
148 this.validPeriod = validPeriod;
149 }
150
151 @XmlElement(name = "Shape")
152 @XmlIDREF
153 @XmlSchemaType(name = "IDREF")
154 public Media getShape(){
155 return this.shape;
156 }
157 public void setShape(Media shape){
158 this.shape = shape;
159 }
160
161 @XmlElementWrapper(name = "WaterbodiesOrCountries")
162 @XmlElement(name = "WaterbodiesOrCountry")
163 @XmlIDREF
164 @XmlSchemaType(name = "IDREF")
165 public Set<WaterbodyOrCountry> getWaterbodiesOrCountries() {
166 return waterbodiesOrCountries;
167 }
168
169 public void addWaterbodyOrCountry(WaterbodyOrCountry waterbodyOrCountry) {
170 this.waterbodiesOrCountries.add(waterbodyOrCountry);
171 }
172
173 public void removeWaterbodyOrCountry(WaterbodyOrCountry waterbodyOrCountry) {
174 this.waterbodiesOrCountries.remove(waterbodyOrCountry);
175 }
176
177 @XmlElement(name = "PointApproximation")
178 public Point getPointApproximation() {
179 return pointApproximation;
180 }
181 public void setPointApproximation(Point pointApproximation) {
182 this.pointApproximation = pointApproximation;
183 }
184
185 @XmlElement(name = "KindOf", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
186 @XmlIDREF
187 @XmlSchemaType(name = "IDREF")
188 public NamedArea getKindOf(){
189 return super.getKindOf();
190 }
191
192 public void setKindOf(NamedArea kindOf){
193 super.setKindOf(kindOf);
194 }
195
196 @XmlElement(name = "PartOf", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
197 @XmlIDREF
198 @XmlSchemaType(name = "IDREF")
199 public NamedArea getPartOf(){
200 /*
201 * Object area = super.getPartOf();
202
203 if(!(area instanceof NamedArea)){
204 area = HibernateProxyHelper.deproxy(area, NamedArea.class);
205 }
206
207 return (NamedArea) area;
208
209 TODO workaround replaced by field
210 the partOf getter and setter seem to be superfluous, can the be removed?
211 */
212 return partOf;
213 }
214
215 public void setPartOf(NamedArea partOf){
216 this.partOf = partOf;
217 }
218
219 @XmlElementWrapper(name = "Generalizations", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
220 @XmlElement(name = "GeneralizationOf", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
221 @XmlIDREF
222 @XmlSchemaType(name = "IDREF")
223 public Set<NamedArea> getGeneralizationOf(){
224 return super.getGeneralizationOf();
225 }
226
227 protected void setGeneralizationOf(Set<NamedArea> value){
228 super.setGeneralizationOf(value);
229 }
230
231 @XmlElementWrapper(name = "Includes", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
232 @XmlElement(name = "Include", namespace = "http://etaxonomy.eu/cdm/model/common/1.0")
233 @XmlIDREF
234 @XmlSchemaType(name = "IDREF")
235 public Set<NamedArea> getIncludes(){
236 return super.getIncludes();
237 }
238
239 protected void setIncludes(Set<NamedArea> includes) {
240 super.setIncludes(includes);
241 }
242
243
244 /* (non-Javadoc)
245 * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#readCsvLine(java.util.List)
246 */
247 @Override
248 public NamedArea readCsvLine(Class<NamedArea> termClass, List<String> csvLine, Map<UUID,DefinedTermBase> terms) {
249 NamedArea newInstance = super.readCsvLine(termClass, csvLine, terms);
250
251 String levelString = (String)csvLine.get(6);
252
253 if(levelString != null && levelString.length() != 0) {
254 UUID levelUuid = UUID.fromString(levelString);
255 NamedAreaLevel level = (NamedAreaLevel)terms.get(levelUuid);
256 newInstance.setLevel(level);
257 }
258
259 String partOfString = (String)csvLine.get(7);
260
261 if(partOfString != null && partOfString.length() != 0) {
262 UUID partOfUuid = UUID.fromString(partOfString);
263 NamedArea partOf = (NamedArea)terms.get(partOfUuid);
264 partOf.addIncludes(newInstance);
265 }
266 return newInstance;
267 }
268
269 @Override
270 protected void setDefaultTerms(TermVocabulary<NamedArea> termVocabulary) {
271 // TODO Auto-generated method stub
272
273 }
274 }