Project

General

Profile

Download (7.47 KB) Statistics
| Branch: | Tag: | Revision:
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 javax.persistence.Entity;
14
import javax.persistence.FetchType;
15
import javax.persistence.JoinColumn;
16
import javax.persistence.ManyToOne;
17
import javax.xml.bind.annotation.XmlAccessType;
18
import javax.xml.bind.annotation.XmlAccessorType;
19
import javax.xml.bind.annotation.XmlElement;
20
import javax.xml.bind.annotation.XmlIDREF;
21
import javax.xml.bind.annotation.XmlRootElement;
22
import javax.xml.bind.annotation.XmlSchemaType;
23
import javax.xml.bind.annotation.XmlType;
24

    
25
import org.apache.logging.log4j.LogManager;
26
import org.apache.logging.log4j.Logger;
27
import org.hibernate.annotations.Cascade;
28
import org.hibernate.annotations.CascadeType;
29
import org.hibernate.envers.Audited;
30

    
31
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
32
import eu.etaxonomy.cdm.model.reference.Reference;
33

    
34
/**
35
 * The class representing a typification of one or several {@link TaxonName taxon names} by a
36
 * {@link eu.etaxonomy.cdm.model.occurrence.DerivedUnit specimen or a figure}. All {@link TaxonName taxon names}
37
 * which have a {@link Rank rank} "species aggregate" or lower can only be typified
38
 * by specimens. Moreover each typification by a specimen (or by a figure) has a
39
 * {@link SpecimenTypeDesignationStatus status} like "holotype" or "isotype".
40
 * <P>
41
 * This class corresponds to: <ul>
42
 * <li> NomenclaturalType according to the TDWG ontology
43
 * <li> Typification (partially) according to the TCS
44
 * <li> NomenclaturalTypeDesignation according to the ABCD schema
45
 * </ul>
46
 *
47
 * @see		TypeDesignationBase
48
 * @see		NameTypeDesignation
49
 * @author	m.doering
50
 * @since 08-Nov-2007 13:06:38
51
 */
52
@XmlRootElement(name = "SpecimenTypeDesignation")
53
@XmlAccessorType(XmlAccessType.FIELD)
54
@XmlType(name = "SpecimenTypeDesignation", propOrder = {
55
    "typeSpecimen"
56
})
57
@Entity
58
@Audited
59
public class SpecimenTypeDesignation
60
        extends TypeDesignationBase<SpecimenTypeDesignationStatus> {
61

    
62
	private static final long serialVersionUID = 6481627446997275007L;
63
	private static final Logger logger = LogManager.getLogger(SpecimenTypeDesignation.class);
64

    
65
	@XmlElement(name = "TypeSpecimen")
66
	@XmlIDREF
67
	@XmlSchemaType(name = "IDREF")
68
	@ManyToOne(fetch = FetchType.LAZY)
69
	@JoinColumn(name="typeSpecimen_id")
70
	@Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
71
	private DerivedUnit typeSpecimen;
72

    
73

    
74
    public static SpecimenTypeDesignation NewInstance() {
75
        return new SpecimenTypeDesignation();
76
    }
77

    
78
//	/**
79
//	 * Creates a new specimen type designation instance
80
//	 * (including its {@link reference.Reference reference source} and eventually
81
//	 * the taxon name string originally used by this reference when establishing
82
//	 * the former designation) and adds it to the corresponding
83
//	 * {@link HomotypicalGroup#getSpecimenTypeDesignations() specimen type designation set} of the
84
//	 * {@link HomotypicalGroup homotypical group}.
85
//	 *
86
//	 * @param specimen				the derived unit (specimen or figure) used as type
87
//	 * @param status				the type designation status
88
//	 * @param citation				the reference source for the new designation
89
//	 * @param citationMicroReference	the string with the details describing the exact localisation within the reference
90
//	 * @param originalNameString	the taxon name string used originally in the reference source for the new designation
91
//	 * @see							#SpecimenTypeDesignation(DerivedUnit, TypeDesignationStatus, Reference, String, String)
92
//	 * @see							HomotypicalGroup#addSpecimenTypeDesignation(SpecimenTypeDesignation, boolean)
93
//	 * @see							occurrence.DerivedUnit
94
//	 */
95
//	protected static SpecimenTypeDesignation NewInstance2(DerivedUnit specimen, TypeDesignationStatus status,
96
//			Reference citation, String citationMicroReference, String originalNameString){
97
//		SpecimenTypeDesignation specTypeDesig = new SpecimenTypeDesignation(specimen, status, citation, citationMicroReference, originalNameString);
98
//		return specTypeDesig;
99
//	}
100

    
101
// ************* CONSTRUCTORS *************/
102
	/**
103
	 * Class constructor: creates a new empty specimen type designation.
104
	 *
105
	 * @see	#SpecimenTypeDesignation(DerivedUnit, SpecimenTypeDesignationStatus,
106
	 * Reference, String, String, boolean)
107
	 */
108
	protected SpecimenTypeDesignation(){
109
	}
110

    
111

    
112
	/**
113
	 * Class constructor: creates a new specimen type designation instance
114
	 * (including its {@link eu.etaxonomy.cdm.model.reference.Reference reference source} and
115
	 * eventually the taxon name string originally used by this reference when
116
	 * establishing the former designation).
117
	 *
118
	 * @param specimen				the derived unit (specimen or figure) used
119
	 * 								as type
120
	 * @param status				the type designation status
121
	 * @param citation				the reference source for the new designation
122
	 * @param citationMicroReference	the string with the details describing
123
	 * 								the exact localisation within the reference
124
	 * @param originalNameString	the taxon name string used originally in the
125
	 * 								reference source for the new designation
126
	 * @param isNotDesignated		the boolean flag indicating whether there is no specimen type at all for
127
	 * 								<i>this</i> specimen type designation
128
	 * @see							#SpecimenTypeDesignation()
129
	 * @see							TaxonName#addSpecimenTypeDesignation(Specimen, SpecimenTypeDesignationStatus, Reference, String, String, boolean, boolean)
130
	 * @see							TypeDesignationBase#isNotDesignated()
131
	 * @see							eu.etaxonomy.cdm.model.occurrence.DerivedUnit
132
	 */
133
	protected SpecimenTypeDesignation(DerivedUnit specimen, SpecimenTypeDesignationStatus status, Reference citation, String citationMicroReference,
134
			String originalNameString, boolean isNotDesignated) {
135
		super(citation, citationMicroReference, originalNameString, isNotDesignated);
136
		this.setTypeSpecimen(specimen);
137
		this.setTypeStatus(status);
138
	}
139

    
140
//********* METHODS **************************************/
141

    
142
	@Override
143
	public void removeType() {
144
		this.setTypeSpecimen(null);
145
	}
146

    
147
	/**
148
	 * Returns the {@link DerivedUnit.DerivedUnit derived unit} (specimen or figure) that is used
149
	 * in <i>this</i> specimen type designation to typify the {@link TaxonName taxon name}.
150
	 *
151
	 * @see   #getHomotypicalGroup()
152
	 */
153
	public DerivedUnit getTypeSpecimen(){
154
		return this.typeSpecimen;
155
	}
156

    
157
	/**
158
	 * @see  #getTypeSpecimen()
159
	 */
160
	public void setTypeSpecimen(DerivedUnit typeSpecimen){
161
		if (this.typeSpecimen == typeSpecimen){
162
			return;
163
		}
164
		if (this.typeSpecimen != null){
165
			this.typeSpecimen.removeSpecimenTypeDesignation(this);
166
		}
167
		if (typeSpecimen != null && ! typeSpecimen.getSpecimenTypeDesignations().contains(this)){
168
			typeSpecimen.addSpecimenTypeDesignation(this);
169
		}
170
		this.typeSpecimen = typeSpecimen;
171
	}
172

    
173
//*********************** CLONE ********************************************************/
174

    
175
	/**
176
	 * Clones <i>this</i> type specimen. This is a shortcut that enables to create
177
	 * a new instance that differs only slightly from <i>this</i> type specimen by
178
	 * modifying only some of the attributes.
179
	 *
180
	 * @see eu.etaxonomy.cdm.model.name.TypeDesignationBase#clone()
181
	 * @see java.lang.Object#clone()
182
	 */
183
	@Override
184
	public SpecimenTypeDesignation clone() {
185

    
186
		SpecimenTypeDesignation result;
187
		try {
188
			result = (SpecimenTypeDesignation)super.clone();
189
			//no changes to: typeSpecimen
190
			return result;
191
		} catch (CloneNotSupportedException e) {
192
			logger.warn("Object does not implement cloneable");
193
			e.printStackTrace();
194
			return null;
195
		}
196
	}
197
}
(31-31/39)