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
.TeamOrPersonBase
;
18 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
19 import eu
.etaxonomy
.cdm
.strategy
.cache
.BotanicNameDefaultCacheStrategy
;
20 import eu
.etaxonomy
.cdm
.strategy
.parser
.ITaxonNameParser
;
21 import eu
.etaxonomy
.cdm
.strategy
.parser
.NonViralNameParserImpl
;
24 import javax
.persistence
.*;
27 * Taxon name class for plants
30 * @created 08-Nov-2007 13:06:15
33 public class BotanicalName
extends NonViralName
{
34 private static final Logger logger
= Logger
.getLogger(BotanicalName
.class);
35 //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
36 //hybrid name may not have either an authorteam nor other name components.
37 private boolean isHybridFormula
= false;
38 private boolean isMonomHybrid
= false;
39 private boolean isBinomHybrid
= false;
40 private boolean isTrinomHybrid
= false;
41 //Only for fungi: to indicate that the type of the name is asexual or not
42 private boolean isAnamorphic
;
43 private Set
<HybridRelationship
> hybridRelationships
= new HashSet();
45 static private ITaxonNameParser nameParser
= new NonViralNameParserImpl();
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 fullNameString
){
76 return PARSED_NAME(fullNameString
, Rank
.GENUS());
80 * Returns a parsed Name
84 public static BotanicalName
PARSED_NAME(String fullNameString
, Rank rank
){
85 if (nameParser
== null){
86 nameParser
= new NonViralNameParserImpl();
88 return (BotanicalName
)nameParser
.parseFullName(fullNameString
, rank
);
92 * Returns a parsed Name
96 public static BotanicalName
PARSED_REFERENCE(String fullNameAndReferenceString
){
97 return PARSED_REFERENCE(fullNameAndReferenceString
, Rank
.GENUS());
101 * Returns a parsed Name
105 public static BotanicalName
PARSED_REFERENCE(String fullNameAndReferenceString
, Rank rank
){
106 if (nameParser
== null){
107 nameParser
= new NonViralNameParserImpl();
109 return (BotanicalName
)nameParser
.parseFullReference(fullNameAndReferenceString
, rank
);
112 //needed by hibernate
113 protected BotanicalName(){
115 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
117 protected BotanicalName(Rank rank
, HomotypicalGroup homotypicalGroup
) {
118 super(rank
, homotypicalGroup
);
119 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
121 protected BotanicalName(Rank rank
, String genusOrUninomial
, String specificEpithet
, String infraSpecificEpithet
, TeamOrPersonBase combinationAuthorTeam
, INomenclaturalReference nomenclaturalReference
, String nomenclMicroRef
, HomotypicalGroup homotypicalGroup
) {
122 super(rank
, genusOrUninomial
, specificEpithet
, infraSpecificEpithet
, combinationAuthorTeam
, nomenclaturalReference
, nomenclMicroRef
, homotypicalGroup
);
123 this.cacheStrategy
= BotanicNameDefaultCacheStrategy
.NewInstance();
128 @Cascade({CascadeType
.SAVE_UPDATE
, CascadeType
.DELETE_ORPHAN
})
129 public Set
<HybridRelationship
> getHybridRelationships() {
130 return hybridRelationships
;
132 protected void setHybridRelationships(Set
<HybridRelationship
> relationships
) {
133 this.hybridRelationships
= relationships
;
135 public void addHybridRelationship(HybridRelationship relationship
) {
136 this.hybridRelationships
.add(relationship
);
138 public void removeHybridRelationship(HybridRelationship relationship
) {
139 this.hybridRelationships
.remove(relationship
);
143 public Set
<HybridRelationship
> getParentRelationships() {
144 // FIXME: filter relations
145 return hybridRelationships
;
148 public Set
<HybridRelationship
> getChildRelationships() {
149 // FIXME: filter relations
150 return hybridRelationships
;
155 public boolean isHybridFormula(){
156 return this.isHybridFormula
;
161 * @param isHybridFormula isHybridFormula
163 public void setHybridFormula(boolean isHybridFormula
){
164 this.isHybridFormula
= isHybridFormula
;
167 public boolean isMonomHybrid(){
168 return this.isMonomHybrid
;
173 * @param isMonomHybrid isMonomHybrid
175 public void setMonomHybrid(boolean isMonomHybrid
){
176 this.isMonomHybrid
= isMonomHybrid
;
179 public boolean isBinomHybrid(){
180 return this.isBinomHybrid
;
185 * @param isBinomHybrid isBinomHybrid
187 public void setBinomHybrid(boolean isBinomHybrid
){
188 this.isBinomHybrid
= isBinomHybrid
;
191 public boolean isTrinomHybrid(){
192 return this.isTrinomHybrid
;
197 * @param isTrinomHybrid isTrinomHybrid
199 public void setTrinomHybrid(boolean isTrinomHybrid
){
200 this.isTrinomHybrid
= isTrinomHybrid
;
203 public boolean isAnamorphic(){
204 return this.isAnamorphic
;
209 * @param isAnamorphic isAnamorphic
211 public void setAnamorphic(boolean isAnamorphic
){
212 this.isAnamorphic
= isAnamorphic
;
217 public NomenclaturalCode
getNomeclaturalCode(){
218 return NomenclaturalCode
.ICBN();