3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.model
.name
;
13 import java
.util
.HashMap
;
15 import java
.util
.UUID
;
17 import javax
.persistence
.Entity
;
18 import javax
.persistence
.Transient
;
19 import javax
.xml
.bind
.annotation
.XmlAccessType
;
20 import javax
.xml
.bind
.annotation
.XmlAccessorType
;
21 import javax
.xml
.bind
.annotation
.XmlType
;
23 import org
.apache
.log4j
.Logger
;
24 import org
.hibernate
.envers
.Audited
;
25 import org
.hibernate
.search
.annotations
.Indexed
;
27 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
30 * The terms in this class define the status of a {@link NameTypeDesignation name type designation}.
32 * @author a.babadshanjan
36 @XmlAccessorType(XmlAccessType
.FIELD
)
37 @XmlType(name
= "NameTypeDesignationStatus")
39 @Indexed(index
= "eu.etaxonomy.cdm.model.common.DefinedTermBase")
41 public class NameTypeDesignationStatus
extends TypeDesignationStatusBase
<NameTypeDesignationStatus
> {
42 private static final long serialVersionUID
= -8801837496688711907L;
43 @SuppressWarnings("unused")
44 private static final Logger logger
= Logger
.getLogger(NameTypeDesignationStatus
.class);
46 private static final UUID uuidAutomatic
= UUID
.fromString("e89d8b21-615a-4602-913f-1625bf39a69f");
47 private static final UUID uuidMonotypy
= UUID
.fromString("3fc639b2-9a64-45f8-9a81-657a4043ad74");
48 private static final UUID uuidNotApplicable
= UUID
.fromString("91a9d6a9-7754-41cd-9f7e-be136f599f7e");
49 private static final UUID uuidOriginalDesignation
= UUID
.fromString("40032a44-973b-4a64-b25e-76f86c3a753c");
50 private static final UUID uuidPresentDesignation
= UUID
.fromString("e5f38f5d-995d-4470-a036-1a9792a543fc");
51 private static final UUID uuidSubsequentMonotypy
= UUID
.fromString("2b5806d8-31b0-406e-a32a-4adac0c89ae4");
52 private static final UUID uuidSubsequentDesignation
= UUID
.fromString("3e449e7d-a03c-4431-a7d3-aa258406f6b2");
53 private static final UUID uuidTautonymy
= UUID
.fromString("84521f09-3e10-43f5-aa6f-2173a55a6790");
54 private static final UUID uuidLectotype
= UUID
.fromString("4177c938-b741-40e1-95e5-4c53bd1ed87d");
57 * Factory method: creates an additional type designation status instance
58 * with a description (in the {@link eu.etaxonomy.cdm.model.common.Language#DEFAULT() default language}), a label
59 * and a label abbreviation.
61 * @param term the string (in the default language) describing the
62 * new name type designation status to be created
63 * @param label the string identifying the new name type designation
64 * status to be created
65 * @param labelAbbrev the string identifying (in abbreviated form) the
66 * new name type designation status to be created
68 public static NameTypeDesignationStatus
NewInstance(String term
, String label
, String labelAbbrev
){
69 return new NameTypeDesignationStatus(term
, label
, labelAbbrev
);
72 protected static Map
<UUID
, NameTypeDesignationStatus
> termMap
= null;
74 protected static NameTypeDesignationStatus
findTermByUuid(UUID uuid
){
78 return (NameTypeDesignationStatus
)termMap
.get(uuid
);
81 // ************* CONSTRUCTORS *************/
84 * Class constructor: creates a new empty name type designation status instance.
86 * @see #NameTypeDesignationStatus(String, String, String)
88 @Deprecated //public use by term initializer only TODO needs to be changed
89 public NameTypeDesignationStatus() {
92 protected NameTypeDesignationStatus(String term
, String label
, String labelAbbrev
) {
93 super(term
, label
, labelAbbrev
);
96 //********* METHODS **************************************
100 * Returns the "automatic" name type designation status.</BR>
101 * If a new name has to be established for a genus name this new name automatically gets
102 * the same type species as the old name.
105 public static final NameTypeDesignationStatus
AUTOMATIC(){
106 return findTermByUuid(uuidAutomatic
);
110 * Returns the "monotypy" name type designation status.</BR>
111 * Only one species was included in original genus description.
114 public static final NameTypeDesignationStatus
MONOTYPY(){
115 return findTermByUuid(uuidMonotypy
);
119 * Returns the "not applicable" name type designation status.</BR>
120 * Used in the BDWD (BioSystematic Database of World Diptera) for
121 * nomina nuda, emendations and misspellings.
123 public static final NameTypeDesignationStatus
NOT_APPLICABLE(){
124 return findTermByUuid(uuidNotApplicable
);
128 * Returns the "original designation" name type designation status.</BR>
129 * The type species is designated in the original genus description
130 * (this includes indication in the species name typicus).
133 public static final NameTypeDesignationStatus
ORIGINAL_DESIGNATION(){
134 return findTermByUuid(uuidOriginalDesignation
);
138 * Returns the "present designation" name type designation status.</BR>
139 * The type species is designated now (maybe possible in future,
140 * after ICZN has changed and online publications are available).
142 public static final NameTypeDesignationStatus
PRESENT_DESIGNATION(){
143 return findTermByUuid(uuidPresentDesignation
);
147 * Returns the "subsequent monotypy" name type designation status.</BR>
148 * If only one nominal species was first subsequently included
149 * in a nominal genus or subgenus established without included species,
150 * that nominal species is automatically fixed as the type species,
151 * by subsequent monotypy.
154 public static final NameTypeDesignationStatus
SUBSEQUENT_MONOTYPY(){
155 return findTermByUuid(uuidSubsequentMonotypy
);
159 * Returns the "subsequent designation" name type designation status.</BR>
160 * Several species were included in the original genus description.
161 * One of these has been designated as type species in a later publication.
165 public static final NameTypeDesignationStatus
SUBSEQUENT_DESIGNATION(){
166 return findTermByUuid(uuidSubsequentDesignation
);
171 * Returns the lectotype name type designation status.</BR>
172 * This may be the same as a {@link SUBSEQUENT_DESIGNATION()} but used in botany.
173 * Maybe these 2 status will be merged in future.
175 public static final NameTypeDesignationStatus
LECTOTYPE(){
176 return findTermByUuid(uuidLectotype
);
180 * Returns the "tautonomy" name type designation status.</BR>
181 * The genus name is the same as the species name of one of the included species.
184 public static final NameTypeDesignationStatus
TAUTONYMY(){
185 return findTermByUuid(uuidTautonymy
);
190 protected void setDefaultTerms(TermVocabulary
<NameTypeDesignationStatus
> termVocabulary
) {
191 termMap
= new HashMap
<UUID
, NameTypeDesignationStatus
>();
192 for (NameTypeDesignationStatus term
: termVocabulary
.getTerms()){
193 termMap
.put(term
.getUuid(), term
);
198 * Returns the boolean value indicating whether <i>this</i> type designation
199 * status is itself "lectotype" or a kind of "lectotype" (true) or not
200 * (false). Returns false if <i>this</i> type designation status is null.<BR>
201 * A lectotype is a {@link eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase specimen or illustration} designated as the
202 * nomenclatural type, when no holotype was indicated at the time of
203 * publication of the "type-bringing" {@link TaxonNameBase taxon name}, when the
204 * holotype is found to be assigned to taxon names belonging to more than
205 * one {@link HomotypicalGroup homotypical group}, or as long as it is missing.
209 * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#getKindOf()
212 public boolean isLectotype(){
214 this.equals(LECTOTYPE()) ||
215 this.equals(SUBSEQUENT_DESIGNATION()) ||
216 this.equals(PRESENT_DESIGNATION() )