(no commit message)
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / name / BotanicalName.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.name;
11
12
13 import org.apache.log4j.Logger;
14 import org.hibernate.annotations.Cascade;
15 import org.hibernate.annotations.CascadeType;
16
17 import eu.etaxonomy.cdm.model.agent.Agent;
18 import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;
19 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
20 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
21 import eu.etaxonomy.cdm.strategy.cache.BotanicNameDefaultCacheStrategy;
22 import eu.etaxonomy.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;
23
24 import java.util.*;
25
26 import javax.naming.NameParser;
27 import javax.persistence.*;
28
29 /**
30 * Taxon name class for plants
31 * @author m.doering
32 * @version 1.0
33 * @created 08-Nov-2007 13:06:15
34 */
35 @Entity
36 public class BotanicalName extends NonViralName {
37 static Logger logger = Logger.getLogger(BotanicalName.class);
38 //if set: this name is a hybrid formula (a hybrid that does not have an own name) and no other hybrid flags may be set. A
39 //hybrid name may not have either an authorteam nor other name components.
40 private boolean isHybridFormula = false;
41 private boolean isMonomHybrid = false;
42 private boolean isBinomHybrid = false;
43 private boolean isTrinomHybrid = false;
44 //Only for fungi: to indicate that the type of the name is asexual or not
45 private boolean isAnamorphic;
46 private Set<HybridRelationship> hybridRelationships = new HashSet();
47
48 /**
49 * @param rank
50 * @return
51 */
52 public static BotanicalName NewInstance(Rank rank){
53 return new BotanicalName(rank, null);
54 }
55
56
57 /**
58 * @param rank
59 * @param homotypicalGroup
60 * @return
61 */
62 public static BotanicalName NewInstance(Rank rank, HomotypicalGroup homotypicalGroup){
63 return new BotanicalName(rank, homotypicalGroup);
64 }
65
66 public static BotanicalName NewInstance(Rank rank, String genusOrUninomial, String specificEpithet, String infraSpecificEpithet, TeamOrPersonBase combinationAuthorTeam, INomenclaturalReference nomenclaturalReference, String nomenclMicroRef, HomotypicalGroup homotypicalGroup) {
67 return new BotanicalName(rank, genusOrUninomial, specificEpithet, infraSpecificEpithet, combinationAuthorTeam, nomenclaturalReference, nomenclMicroRef, homotypicalGroup);
68 }
69
70 /**
71 * Returns a parsed Name
72 * @param fullName
73 * @return
74 */
75 public static BotanicalName PARSED_NAME(String fullName){
76 return PARSED_NAME(fullName, Rank.GENUS());
77 }
78
79 /**
80 * Returns a parsed Name
81 * @param fullName
82 * @return
83 */
84 public static BotanicalName PARSED_NAME(String fullName, Rank rank){
85 if (nameParser == null){
86 nameParser = new TaxonNameParserBotanicalNameImpl();
87 }
88 return (BotanicalName)nameParser.parseFullName(fullName, rank);
89 }
90
91 //needed by hibernate
92 protected BotanicalName(){
93 super();
94 this.cacheStrategy = BotanicNameDefaultCacheStrategy.NewInstance();
95 }
96 protected BotanicalName(Rank rank, HomotypicalGroup homotypicalGroup) {
97 super(rank, homotypicalGroup);
98 this.cacheStrategy = BotanicNameDefaultCacheStrategy.NewInstance();
99 }
100 protected BotanicalName(Rank rank, String genusOrUninomial, String specificEpithet, String infraSpecificEpithet, TeamOrPersonBase combinationAuthorTeam, INomenclaturalReference nomenclaturalReference, String nomenclMicroRef, HomotypicalGroup homotypicalGroup) {
101 super(rank, genusOrUninomial, specificEpithet, infraSpecificEpithet, combinationAuthorTeam, nomenclaturalReference, nomenclMicroRef, homotypicalGroup);
102 this.cacheStrategy = BotanicNameDefaultCacheStrategy.NewInstance();
103 }
104
105
106 @OneToMany
107 @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN})
108 public Set<HybridRelationship> getHybridRelationships() {
109 return hybridRelationships;
110 }
111 protected void setHybridRelationships(Set<HybridRelationship> relationships) {
112 this.hybridRelationships = relationships;
113 }
114 public void addHybridRelationship(HybridRelationship relationship) {
115 this.hybridRelationships.add(relationship);
116 }
117 public void removeHybridRelationship(HybridRelationship relationship) {
118 this.hybridRelationships.remove(relationship);
119 }
120
121 @Transient
122 public Set<HybridRelationship> getParentRelationships() {
123 // FIXME: filter relations
124 return hybridRelationships;
125 }
126 @Transient
127 public Set<HybridRelationship> getChildRelationships() {
128 // FIXME: filter relations
129 return hybridRelationships;
130 }
131
132
133
134 public boolean isHybridFormula(){
135 return this.isHybridFormula;
136 }
137
138 /**
139 *
140 * @param isHybridFormula isHybridFormula
141 */
142 public void setHybridFormula(boolean isHybridFormula){
143 this.isHybridFormula = isHybridFormula;
144 }
145
146 public boolean isMonomHybrid(){
147 return this.isMonomHybrid;
148 }
149
150 /**
151 *
152 * @param isMonomHybrid isMonomHybrid
153 */
154 public void setMonomHybrid(boolean isMonomHybrid){
155 this.isMonomHybrid = isMonomHybrid;
156 }
157
158 public boolean isBinomHybrid(){
159 return this.isBinomHybrid;
160 }
161
162 /**
163 *
164 * @param isBinomHybrid isBinomHybrid
165 */
166 public void setBinomHybrid(boolean isBinomHybrid){
167 this.isBinomHybrid = isBinomHybrid;
168 }
169
170 public boolean isTrinomHybrid(){
171 return this.isTrinomHybrid;
172 }
173
174 /**
175 *
176 * @param isTrinomHybrid isTrinomHybrid
177 */
178 public void setTrinomHybrid(boolean isTrinomHybrid){
179 this.isTrinomHybrid = isTrinomHybrid;
180 }
181
182 public boolean isAnamorphic(){
183 return this.isAnamorphic;
184 }
185
186 /**
187 *
188 * @param isAnamorphic isAnamorphic
189 */
190 public void setAnamorphic(boolean isAnamorphic){
191 this.isAnamorphic = isAnamorphic;
192 }
193
194 }