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
;
13 import eu
.etaxonomy
.cdm
.model
.location
.Point
;
14 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
15 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
16 import eu
.etaxonomy
.cdm
.model
.agent
.Agent
;
17 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
18 import eu
.etaxonomy
.cdm
.model
.common
.IMediaDocumented
;
19 import eu
.etaxonomy
.cdm
.model
.common
.IdentifyableMediaEntity
;
20 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
21 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
22 import eu
.etaxonomy
.cdm
.model
.common
.Media
;
23 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableEntity
;
24 import eu
.etaxonomy
.cdm
.model
.common
.MultilanguageSet
;
25 import eu
.etaxonomy
.cdm
.model
.description
.Sex
;
26 import eu
.etaxonomy
.cdm
.model
.description
.SpecimenDescription
;
27 import eu
.etaxonomy
.cdm
.model
.description
.Stage
;
29 import org
.apache
.log4j
.Logger
;
30 import org
.hibernate
.annotations
.Cascade
;
31 import org
.hibernate
.annotations
.CascadeType
;
35 import javax
.persistence
.*;
38 * type figures are observations with at least a figure object in media
41 * @created 08-Nov-2007 13:06:41
44 @Inheritance(strategy
=InheritanceType
.SINGLE_TABLE
)
45 public abstract class SpecimenOrObservationBase
extends IdentifyableMediaEntity
{
46 static Logger logger
= Logger
.getLogger(SpecimenOrObservationBase
.class);
47 private Set
<SpecimenDescription
> descriptions
= new HashSet();
48 private Set
<DeterminationEvent
> determinations
= new HashSet();
50 private Stage lifeStage
;
51 private Integer individualCount
;
52 // the verbatim description of this occurrence. Free text usable when no atomised data is available.
53 // in conjunction with titleCache which serves as the "citation" string for this object
54 private MultilanguageSet description
;
55 // events that created derivedUnits from this unit
56 private Set
<DerivationEvent
> derivationEvents
= new HashSet();
60 @Cascade( { CascadeType
.SAVE_UPDATE
})
61 public Set
<DerivationEvent
> getDerivationEvents() {
62 return derivationEvents
;
64 protected void setDerivationEvents(Set
<DerivationEvent
> derivationEvents
) {
65 this.derivationEvents
= derivationEvents
;
67 public void addDerivationEvent(DerivationEvent event
) {
68 this.derivationEvents
.add(event
);
70 public void removeDerivationEvent(DerivationEvent event
) {
71 this.derivationEvents
.remove(event
);
75 @OneToMany(mappedBy
="identifiedUnit")
76 @Cascade({CascadeType
.SAVE_UPDATE
})
77 public Set
<DeterminationEvent
> getDeterminations() {
78 return determinations
;
80 protected void setDeterminations(Set
<DeterminationEvent
> determinations
) {
81 this.determinations
= determinations
;
83 public void addDetermination(DeterminationEvent determination
) {
84 // FIXME bidirectional integrity. Use protected Determination setter
85 this.determinations
.add(determination
);
87 public void removeDetermination(DeterminationEvent determination
) {
88 // FIXME bidirectional integrity. Use protected Determination setter
89 this.determinations
.remove(determination
);
98 public void setSex(Sex sex
) {
103 public Stage
getLifeStage() {
107 public void setLifeStage(Stage lifeStage
) {
108 this.lifeStage
= lifeStage
;
112 public String
generateTitle(){
117 public Integer
getIndividualCount() {
118 return individualCount
;
121 public void setIndividualCount(Integer individualCount
) {
122 this.individualCount
= individualCount
;
126 public MultilanguageSet
getDefinition(){
127 return this.description
;
129 private void setDefinition(MultilanguageSet description
){
130 this.description
= description
;
132 public void addDefinition(LanguageString description
){
133 this.description
.add(description
);
135 public void addDefinition(String text
, Language lang
){
136 this.description
.add(text
, lang
);
138 public void removeDefinition(Language lang
){
139 this.description
.remove(lang
);
144 * for derived units get the single next higher parental/original unit.
145 * If multiple original units exist throw error
149 public SpecimenOrObservationBase
getOriginalUnit(){
154 public abstract GatheringEvent
getGatheringEvent();