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
.TaxonNameParserBotanicalNameImpl
;
26 import javax
.naming
.NameParser
;
27 import javax
.persistence
.*;
30 * Taxon name class for plants
33 * @created 08-Nov-2007 13:06:15
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();
52 public static BotanicalName
NewInstance(Rank rank
){
53 return new BotanicalName(rank
, null);
59 * @param homotypicalGroup
62 public static BotanicalName
NewInstance(Rank rank
, HomotypicalGroup homotypicalGroup
){
63 return new BotanicalName(rank
, homotypicalGroup
);
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
);
71 * Returns a parsed Name
75 public static BotanicalName
PARSED_NAME(String fullName
){
76 return PARSED_NAME(fullName
, Rank
.GENUS());
80 * Returns a parsed Name
84 public static BotanicalName
PARSED_NAME(String fullName
, Rank rank
){
85 if (nameParser
== null){
86 nameParser
= new TaxonNameParserBotanicalNameImpl();
88 return (BotanicalName
)nameParser
.parseFullName(fullName
, rank
);
92 protected BotanicalName(){
94 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
96 protected BotanicalName(Rank rank
, HomotypicalGroup homotypicalGroup
) {
97 super(rank
, homotypicalGroup
);
98 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
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();
107 @Cascade({CascadeType
.SAVE_UPDATE
, CascadeType
.DELETE_ORPHAN
})
108 public Set
<HybridRelationship
> getHybridRelationships() {
109 return hybridRelationships
;
111 protected void setHybridRelationships(Set
<HybridRelationship
> relationships
) {
112 this.hybridRelationships
= relationships
;
114 public void addHybridRelationship(HybridRelationship relationship
) {
115 this.hybridRelationships
.add(relationship
);
117 public void removeHybridRelationship(HybridRelationship relationship
) {
118 this.hybridRelationships
.remove(relationship
);
122 public Set
<HybridRelationship
> getParentRelationships() {
123 // FIXME: filter relations
124 return hybridRelationships
;
127 public Set
<HybridRelationship
> getChildRelationships() {
128 // FIXME: filter relations
129 return hybridRelationships
;
134 public boolean isHybridFormula(){
135 return this.isHybridFormula
;
140 * @param isHybridFormula isHybridFormula
142 public void setHybridFormula(boolean isHybridFormula
){
143 this.isHybridFormula
= isHybridFormula
;
146 public boolean isMonomHybrid(){
147 return this.isMonomHybrid
;
152 * @param isMonomHybrid isMonomHybrid
154 public void setMonomHybrid(boolean isMonomHybrid
){
155 this.isMonomHybrid
= isMonomHybrid
;
158 public boolean isBinomHybrid(){
159 return this.isBinomHybrid
;
164 * @param isBinomHybrid isBinomHybrid
166 public void setBinomHybrid(boolean isBinomHybrid
){
167 this.isBinomHybrid
= isBinomHybrid
;
170 public boolean isTrinomHybrid(){
171 return this.isTrinomHybrid
;
176 * @param isTrinomHybrid isTrinomHybrid
178 public void setTrinomHybrid(boolean isTrinomHybrid
){
179 this.isTrinomHybrid
= isTrinomHybrid
;
182 public boolean isAnamorphic(){
183 return this.isAnamorphic
;
188 * @param isAnamorphic isAnamorphic
190 public void setAnamorphic(boolean isAnamorphic
){
191 this.isAnamorphic
= isAnamorphic
;