2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.model
.occurrence
;
14 import java
.util
.HashSet
;
17 import javax
.persistence
.Entity
;
18 import javax
.persistence
.FetchType
;
19 import javax
.persistence
.ManyToMany
;
20 import javax
.persistence
.ManyToOne
;
21 import javax
.persistence
.Transient
;
22 import javax
.xml
.bind
.annotation
.XmlAccessType
;
23 import javax
.xml
.bind
.annotation
.XmlAccessorType
;
24 import javax
.xml
.bind
.annotation
.XmlElement
;
25 import javax
.xml
.bind
.annotation
.XmlElementWrapper
;
26 import javax
.xml
.bind
.annotation
.XmlIDREF
;
27 import javax
.xml
.bind
.annotation
.XmlRootElement
;
28 import javax
.xml
.bind
.annotation
.XmlSchemaType
;
29 import javax
.xml
.bind
.annotation
.XmlType
;
31 import org
.apache
.log4j
.Logger
;
32 import org
.hibernate
.annotations
.Cascade
;
33 import org
.hibernate
.annotations
.CascadeType
;
34 import org
.hibernate
.envers
.Audited
;
35 import org
.hibernate
.search
.annotations
.Indexed
;
36 import org
.hibernate
.search
.annotations
.IndexedEmbedded
;
37 import org
.joda
.time
.Partial
;
39 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
40 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
41 import eu
.etaxonomy
.cdm
.model
.common
.EventBase
;
42 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
43 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
44 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
49 * @created 08-Nov-2007 13:06:21
51 @XmlAccessorType(XmlAccessType
.FIELD
)
52 @XmlType(name
= "DeterminationEvent", propOrder
= {
59 @XmlRootElement(name
= "DeterminationEvent")
63 public class DeterminationEvent
extends EventBase
{
64 private static final long serialVersionUID
= 5065341354427569773L;
66 private static final Logger logger
= Logger
.getLogger(DeterminationEvent
.class);
68 @XmlElement(name
= "IdentifiedUnit")
70 @XmlSchemaType(name
= "IDREF")
71 @ManyToOne(fetch
= FetchType
.LAZY
)
72 @Cascade(CascadeType
.SAVE_UPDATE
)
73 private SpecimenOrObservationBase identifiedUnit
;
75 @XmlElement(name
= "Taxon")
77 @XmlSchemaType(name
= "IDREF")
78 @ManyToOne(fetch
= FetchType
.LAZY
)
80 @Cascade(CascadeType
.SAVE_UPDATE
)
81 private TaxonBase taxon
;
83 @XmlElement(name
= "Modifier")
85 @XmlSchemaType(name
= "IDREF")
86 @ManyToOne(fetch
= FetchType
.LAZY
)
87 private DefinedTerm modifier
;
89 @XmlElement(name
= "PreferredFlag")
90 private boolean preferredFlag
;
92 @XmlElementWrapper(name
= "SetOfReferences")
93 @XmlElement(name
= "Reference")
95 @XmlSchemaType(name
= "IDREF")
96 @ManyToMany(fetch
= FetchType
.LAZY
)
97 @Cascade(CascadeType
.SAVE_UPDATE
)
98 private Set
<Reference
> setOfReferences
= new HashSet
<Reference
>();
106 public static DeterminationEvent
NewInstance(){
107 return new DeterminationEvent();
114 public static DeterminationEvent
NewInstance(Taxon taxon
, SpecimenOrObservationBase identifiedUnit
){
115 DeterminationEvent result
= new DeterminationEvent();
116 result
.setTaxon(taxon
);
117 result
.setIdentifiedUnit(identifiedUnit
);
118 identifiedUnit
.addDetermination(result
);
125 protected DeterminationEvent() {
129 public DefinedTerm
getModifier() {
133 public void setModifier(DefinedTerm modifier
) {
134 this.modifier
= modifier
;
137 public TaxonBase
getTaxon(){
145 public void setTaxon(TaxonBase taxon
){
150 public Partial
getIdentificationDate(){
151 return this.getTimeperiod().getStart();
156 * @param identificationDate identificationDate
158 public void setIdentificationDate(Partial identificationDate
){
159 this.getTimeperiod().setStart(identificationDate
);
163 public AgentBase
getDeterminer() {
164 return this.getActor();
167 public void setDeterminer(AgentBase determiner
) {
168 this.setActor(determiner
);
171 public SpecimenOrObservationBase
getIdentifiedUnit() {
172 return identifiedUnit
;
175 public void setIdentifiedUnit(SpecimenOrObservationBase identifiedUnit
) {
176 this.identifiedUnit
= identifiedUnit
;
179 public boolean getPreferredFlag() {
180 return preferredFlag
;
183 public void setPreferredFlag(boolean preferredFlag
) {
184 this.preferredFlag
= preferredFlag
;
187 public Set
<Reference
> getReferences() {
188 return setOfReferences
;
191 public void setReferences(Set
<Reference
> references
) {
192 this.setOfReferences
= references
;
195 public void addReference(Reference reference
) {
196 this.setOfReferences
.add(reference
);
199 //*********** CLONE **********************************/
202 * Clones <i>this</i> determination event. This is a shortcut that enables to
203 * create a new instance that differs only slightly from <i>this</i> determination event
204 * by modifying only some of the attributes.<BR>
205 * This method overrides the clone method from {@link EventBase EventBase}.
207 * @see EventBase#clone()
208 * @see java.lang.Object#clone()
211 public DeterminationEvent
clone(){
213 DeterminationEvent result
= (DeterminationEvent
)super.clone();
215 result
.setIdentifiedUnit(this.getIdentifiedUnit());
217 result
.setModifier(this.getModifier());
219 result
.setTaxon(this.getTaxon()); //TODO
220 //no changes to: preferredFlag
222 } catch (CloneNotSupportedException e
) {
223 logger
.warn("Object does not implement cloneable");