add documentation
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / occurrence / SpecimenOrObservationBase.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.occurrence;
11
12
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;
28
29 import org.apache.log4j.Logger;
30 import org.hibernate.annotations.Cascade;
31 import org.hibernate.annotations.CascadeType;
32
33 import java.util.*;
34
35 import javax.persistence.*;
36
37 /**
38 * type figures are observations with at least a figure object in media
39 * @author m.doering
40 * @version 1.0
41 * @created 08-Nov-2007 13:06:41
42 */
43 @Entity
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();
49 private Sex sex;
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();
57
58
59 @ManyToMany
60 @Cascade( { CascadeType.SAVE_UPDATE })
61 public Set<DerivationEvent> getDerivationEvents() {
62 return derivationEvents;
63 }
64 protected void setDerivationEvents(Set<DerivationEvent> derivationEvents) {
65 this.derivationEvents = derivationEvents;
66 }
67 public void addDerivationEvent(DerivationEvent event) {
68 this.derivationEvents.add(event);
69 }
70 public void removeDerivationEvent(DerivationEvent event) {
71 this.derivationEvents.remove(event);
72 }
73
74
75 @OneToMany(mappedBy="identifiedUnit")
76 @Cascade({CascadeType.SAVE_UPDATE})
77 public Set<DeterminationEvent> getDeterminations() {
78 return determinations;
79 }
80 protected void setDeterminations(Set<DeterminationEvent> determinations) {
81 this.determinations = determinations;
82 }
83 public void addDetermination(DeterminationEvent determination) {
84 // FIXME bidirectional integrity. Use protected Determination setter
85 this.determinations.add(determination);
86 }
87 public void removeDetermination(DeterminationEvent determination) {
88 // FIXME bidirectional integrity. Use protected Determination setter
89 this.determinations.remove(determination);
90 }
91
92
93 @ManyToOne
94 public Sex getSex() {
95 return sex;
96 }
97
98 public void setSex(Sex sex) {
99 this.sex = sex;
100 }
101
102 @ManyToOne
103 public Stage getLifeStage() {
104 return lifeStage;
105 }
106
107 public void setLifeStage(Stage lifeStage) {
108 this.lifeStage = lifeStage;
109 }
110
111
112 public String generateTitle(){
113 return "";
114 }
115
116
117 public Integer getIndividualCount() {
118 return individualCount;
119 }
120
121 public void setIndividualCount(Integer individualCount) {
122 this.individualCount = individualCount;
123 }
124
125
126 public MultilanguageSet getDefinition(){
127 return this.description;
128 }
129 private void setDefinition(MultilanguageSet description){
130 this.description = description;
131 }
132 public void addDefinition(LanguageString description){
133 this.description.add(description);
134 }
135 public void addDefinition(String text, Language lang){
136 this.description.add(text, lang);
137 }
138 public void removeDefinition(Language lang){
139 this.description.remove(lang);
140 }
141
142
143 /**
144 * for derived units get the single next higher parental/original unit.
145 * If multiple original units exist throw error
146 * @return
147 */
148 @Transient
149 public SpecimenOrObservationBase getOriginalUnit(){
150 return null;
151 }
152
153 @Transient
154 public abstract GatheringEvent getGatheringEvent();
155
156 }