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
.name
;
13 import org
.apache
.log4j
.Logger
;
14 import org
.hibernate
.annotations
.Cascade
;
15 import org
.hibernate
.annotations
.CascadeType
;
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
.ITaxonNameParser
;
23 import eu
.etaxonomy
.cdm
.strategy
.parser
.TaxonNameParserBotanicalNameImpl
;
24 import eu
.etaxonomy
.cdm
.strategy
.parser
.TaxonNameParserZoologicalNameImpl
;
28 import javax
.naming
.NameParser
;
29 import javax
.persistence
.*;
32 * Taxon name class for plants
35 * @created 08-Nov-2007 13:06:15
38 public class BotanicalName
extends NonViralName
{
39 private static final Logger logger
= Logger
.getLogger(BotanicalName
.class);
40 //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
41 //hybrid name may not have either an authorteam nor other name components.
42 private boolean isHybridFormula
= false;
43 private boolean isMonomHybrid
= false;
44 private boolean isBinomHybrid
= false;
45 private boolean isTrinomHybrid
= false;
46 //Only for fungi: to indicate that the type of the name is asexual or not
47 private boolean isAnamorphic
;
48 private Set
<HybridRelationship
> hybridRelationships
= new HashSet();
50 static private ITaxonNameParser nameParser
= new TaxonNameParserBotanicalNameImpl();
57 public static BotanicalName
NewInstance(Rank rank
){
58 return new BotanicalName(rank
, null);
64 * @param homotypicalGroup
67 public static BotanicalName
NewInstance(Rank rank
, HomotypicalGroup homotypicalGroup
){
68 return new BotanicalName(rank
, homotypicalGroup
);
71 public static BotanicalName
NewInstance(Rank rank
, String genusOrUninomial
, String specificEpithet
, String infraSpecificEpithet
, TeamOrPersonBase combinationAuthorTeam
, INomenclaturalReference nomenclaturalReference
, String nomenclMicroRef
, HomotypicalGroup homotypicalGroup
) {
72 return new BotanicalName(rank
, genusOrUninomial
, specificEpithet
, infraSpecificEpithet
, combinationAuthorTeam
, nomenclaturalReference
, nomenclMicroRef
, homotypicalGroup
);
76 * Returns a parsed Name
80 public static BotanicalName
PARSED_NAME(String fullNameString
){
81 return PARSED_NAME(fullNameString
, Rank
.GENUS());
85 * Returns a parsed Name
89 public static BotanicalName
PARSED_NAME(String fullNameString
, Rank rank
){
90 if (nameParser
== null){
91 nameParser
= new TaxonNameParserBotanicalNameImpl();
93 return (BotanicalName
)nameParser
.parseFullName(fullNameString
, rank
);
97 * Returns a parsed Name
101 public static BotanicalName
PARSED_REFERENCE(String fullNameAndReferenceString
){
102 return PARSED_REFERENCE(fullNameAndReferenceString
, Rank
.GENUS());
106 * Returns a parsed Name
110 public static BotanicalName
PARSED_REFERENCE(String fullNameAndReferenceString
, Rank rank
){
111 if (nameParser
== null){
112 nameParser
= new TaxonNameParserBotanicalNameImpl();
114 return (BotanicalName
)nameParser
.parseFullReference(fullNameAndReferenceString
, rank
);
117 //needed by hibernate
118 protected BotanicalName(){
120 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
122 protected BotanicalName(Rank rank
, HomotypicalGroup homotypicalGroup
) {
123 super(rank
, homotypicalGroup
);
124 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
126 protected BotanicalName(Rank rank
, String genusOrUninomial
, String specificEpithet
, String infraSpecificEpithet
, TeamOrPersonBase combinationAuthorTeam
, INomenclaturalReference nomenclaturalReference
, String nomenclMicroRef
, HomotypicalGroup homotypicalGroup
) {
127 super(rank
, genusOrUninomial
, specificEpithet
, infraSpecificEpithet
, combinationAuthorTeam
, nomenclaturalReference
, nomenclMicroRef
, homotypicalGroup
);
128 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
133 @Cascade({CascadeType
.SAVE_UPDATE
, CascadeType
.DELETE_ORPHAN
})
134 public Set
<HybridRelationship
> getHybridRelationships() {
135 return hybridRelationships
;
137 protected void setHybridRelationships(Set
<HybridRelationship
> relationships
) {
138 this.hybridRelationships
= relationships
;
140 public void addHybridRelationship(HybridRelationship relationship
) {
141 this.hybridRelationships
.add(relationship
);
143 public void removeHybridRelationship(HybridRelationship relationship
) {
144 this.hybridRelationships
.remove(relationship
);
148 public Set
<HybridRelationship
> getParentRelationships() {
149 // FIXME: filter relations
150 return hybridRelationships
;
153 public Set
<HybridRelationship
> getChildRelationships() {
154 // FIXME: filter relations
155 return hybridRelationships
;
160 public boolean isHybridFormula(){
161 return this.isHybridFormula
;
166 * @param isHybridFormula isHybridFormula
168 public void setHybridFormula(boolean isHybridFormula
){
169 this.isHybridFormula
= isHybridFormula
;
172 public boolean isMonomHybrid(){
173 return this.isMonomHybrid
;
178 * @param isMonomHybrid isMonomHybrid
180 public void setMonomHybrid(boolean isMonomHybrid
){
181 this.isMonomHybrid
= isMonomHybrid
;
184 public boolean isBinomHybrid(){
185 return this.isBinomHybrid
;
190 * @param isBinomHybrid isBinomHybrid
192 public void setBinomHybrid(boolean isBinomHybrid
){
193 this.isBinomHybrid
= isBinomHybrid
;
196 public boolean isTrinomHybrid(){
197 return this.isTrinomHybrid
;
202 * @param isTrinomHybrid isTrinomHybrid
204 public void setTrinomHybrid(boolean isTrinomHybrid
){
205 this.isTrinomHybrid
= isTrinomHybrid
;
208 public boolean isAnamorphic(){
209 return this.isAnamorphic
;
214 * @param isAnamorphic isAnamorphic
216 public void setAnamorphic(boolean isAnamorphic
){
217 this.isAnamorphic
= isAnamorphic
;