Project

General

Profile

Download (9.52 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
import javax.persistence.Entity;
13
import javax.persistence.FetchType;
14
import javax.persistence.ManyToOne;
15
import javax.persistence.Transient;
16
import javax.xml.bind.annotation.XmlAccessType;
17
import javax.xml.bind.annotation.XmlAccessorType;
18
import javax.xml.bind.annotation.XmlElement;
19
import javax.xml.bind.annotation.XmlIDREF;
20
import javax.xml.bind.annotation.XmlRootElement;
21
import javax.xml.bind.annotation.XmlSchemaType;
22
import javax.xml.bind.annotation.XmlType;
23

    
24
import org.apache.log4j.Logger;
25
import org.hibernate.annotations.Cascade;
26
import org.hibernate.annotations.CascadeType;
27
import org.hibernate.envers.Audited;
28

    
29
import eu.etaxonomy.cdm.model.reference.Reference;
30

    
31
/**
32
 * The class representing a typification of a {@link TaxonName taxon name} with a {@link Rank rank}
33
 * above "species aggregate" by another taxon name.<BR>
34
 * According to nomenclature a type of a genus name or of any subdivision of a
35
 * genus can only be a species name. A type of a family name or of any
36
 * subdivision of a family is a genus name.<BR>
37
 * Moreover the designation of a particular taxon name as a type might be
38
 * nomenclaturally rejected or conserved. Depending on the date of publication,
39
 * the same typification could be rejected according to one reference and later
40
 * be conserved according to another reference, but a name type designation
41
 * cannot be simultaneously rejected and conserved.<BR>
42
 * Name type designations are treated as {@link TypeDesignationBase type designations}
43
 * and not as {@link NameRelationship name relationships}.
44
 *
45
 * @see		TypeDesignationBase
46
 * @see		SpecimenTypeDesignation
47
 * @author	m.doering
48
 * @version 1.0
49
 * @since 08-Nov-2007 13:06:38
50
 */
51
@XmlRootElement(name = "NameTypeDesignation")
52
@XmlAccessorType(XmlAccessType.FIELD)
53
@XmlType(name = "NameTypeDesignation", propOrder = {
54
    "rejectedType",
55
    "conservedType",
56
    "typeName"
57
})
58
@Entity
59
@Audited
60
public class NameTypeDesignation extends TypeDesignationBase<NameTypeDesignationStatus> implements ITypeDesignation, Cloneable {
61
	private static final long serialVersionUID = 8478663508862210879L;
62
	final static Logger logger = Logger.getLogger(NameTypeDesignation.class);
63

    
64
	@XmlElement(name = "IsRejectedType")
65
	private boolean rejectedType;
66

    
67
	@XmlElement(name = "IsConservedType")
68
	private boolean conservedType;
69

    
70
	@XmlElement(name = "TypeName")
71
	@XmlIDREF
72
	@XmlSchemaType(name = "IDREF")
73
	@ManyToOne(fetch = FetchType.LAZY)
74
	@Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
75
	private TaxonName typeName;
76

    
77

    
78
	public static NameTypeDesignation NewInstance() {
79
		return new NameTypeDesignation();
80
	}
81

    
82

    
83
	// ************* CONSTRUCTORS *************/
84
	/**
85
	 * Class constructor: creates a new empty name type designation.
86
	 *
87
	 * @see	#NameTypeDesignation(TaxonName, Reference, String, String, boolean, boolean, boolean)
88
	 */
89
	protected NameTypeDesignation() {
90
	}
91

    
92

    
93
	/**
94
	 * Class constructor: creates a new name type designation instance
95
	 * (including its {@link eu.etaxonomy.cdm.model.reference.Reference reference source} and eventually
96
	 * the taxon name string originally used by this reference when establishing
97
	 * the former designation).
98
	 *
99
	 * @param typeName				the taxon name used as a type
100
	 * @param citation				the reference source for the new designation
101
	 * @param citationMicroReference	the string with the details describing the exact localisation within the reference
102
	 * @param originalNameString	the taxon name string used originally in the reference source for the new designation
103
	 * @param isRejectedType		the boolean flag indicating whether the competent authorities rejected
104
	 * 								<i>this</i> name type designation
105
	 * @param isConservedType		the boolean flag indicating whether the competent authorities conserved
106
	 * 								<i>this</i> name type designation
107
	 * @param isNotDesignated		the boolean flag indicating whether there is no name type at all for
108
	 * 								<i>this</i> name type designation
109
	 * @see							#NameTypeDesignation()
110
	 * @see							TypeDesignationBase#isNotDesignated()
111
	 * @see							TaxonName#addNameTypeDesignation(TaxonName, Reference, String, String, boolean, boolean, boolean, boolean, boolean)
112
	 */
113
	protected NameTypeDesignation(TaxonName typeName, NameTypeDesignationStatus status,
114
			Reference citation, String citationMicroReference, String originalNameString) {
115
		super(citation, citationMicroReference, originalNameString);
116
		this.setTypeName(typeName);
117
		this.setTypeStatus(status);
118
	}
119

    
120
	/**
121
	 * Class constructor: creates a new name type designation instance
122
	 * (including its {@link eu.etaxonomy.cdm.model.reference.Reference reference source} and eventually
123
	 * the taxon name string originally used by this reference when establishing
124
	 * the former designation).
125
	 *
126
	 * @param typeName				the taxon name used as a type
127
	 * @param citation				the reference source for the new designation
128
	 * @param citationMicroReference	the string with the details describing the exact localisation within the reference
129
	 * @param originalNameString	the taxon name string used originally in the reference source for the new designation
130
	 * @param isRejectedType		the boolean flag indicating whether the competent authorities rejected
131
	 * 								<i>this</i> name type designation
132
	 * @param isConservedType		the boolean flag indicating whether the competent authorities conserved
133
	 * 								<i>this</i> name type designation
134
	 * @param isNotDesignated		the boolean flag indicating whether there is no name type at all for
135
	 * 								<i>this</i> name type designation
136
	 * @see							#NameTypeDesignation()
137
	 * @see							TypeDesignationBase#isNotDesignated()
138
	 * @see							TaxonName#addNameTypeDesignation(TaxonName, Reference, String, String, boolean, boolean, boolean, boolean, boolean)
139
	 */
140
	protected NameTypeDesignation(	TaxonName typeName,
141
									Reference citation,
142
									String citationMicroReference,
143
									String originalNameString,
144
									NameTypeDesignationStatus status,
145
									boolean rejectedType,
146
									boolean conservedType,
147
									boolean isNotDesignated
148
								) {
149
		this(typeName, status, citation, citationMicroReference, originalNameString);
150
		this.setNotDesignated(isNotDesignated);
151
		this.rejectedType = rejectedType;
152
		this.conservedType = conservedType;
153
	}
154

    
155
	//********* METHODS **************************************/
156

    
157

    
158
	/* (non-Javadoc)
159
	 * @see eu.etaxonomy.cdm.model.name.TypeDesignationBase#removeType()
160
	 */
161
	@Override
162
	public void removeType() {
163
		this.typeName = null;
164
	}
165

    
166
	/**
167
	 * Returns the {@link TaxonName taxon name} that plays the role of the
168
	 * taxon name type in <i>this</i> taxon name type designation. The {@link Rank rank}
169
	 * of the taxon name type must be "species".
170
	 */
171
	public TaxonName getTypeName(){
172
		return this.typeName;
173
	}
174
	/**
175
	 * @see  #getTypeName()
176
	 */
177
	public void setTypeName(TaxonName typeName){
178
		this.typeName = typeName;
179
	}
180

    
181
	/**
182
	 * Returns the boolean value "true" if the competent authorities decided to
183
	 * reject the use of the species taxon name as the type for <i>this</i> taxon
184
	 * name type designation.
185
	 *
186
	 * @see   #isConservedType()
187
	 */
188
	public boolean isRejectedType(){
189
		return this.rejectedType;
190
	}
191
	/**
192
	 * @see  #isRejectedType()
193
	 */
194
	public void setRejectedType(boolean rejectedType){
195
		this.rejectedType = rejectedType;
196
	}
197

    
198
	/**
199
	 * Returns the boolean value "true" if the competent authorities decided to
200
	 * conserve the use of the species taxon name as the type for <i>this</i> taxon
201
	 * name type designation.
202
	 *
203
	 * @see   #isRejectedType()
204
	 */
205
	public boolean isConservedType(){
206
		return this.conservedType;
207
	}
208
	/**
209
	 * @see  #isConservedType()
210
	 */
211
	public void setConservedType(boolean conservedType){
212
		this.conservedType = conservedType;
213
	}
214

    
215
	@Override
216
    @Transient
217
	public boolean isLectoType() {
218
		if (getTypeStatus() == null) {
219
			return false;
220
		}
221
		return getTypeStatus().isLectotype();
222
	}
223

    
224
	/**
225
	 * Returns the boolean value "true" if the use of the species {@link TaxonName taxon name}
226
	 * as the type for <i>this</i> taxon name type designation was posterior to the
227
	 * publication of the typified taxon name. In this case the taxon name type
228
	 * designation should have a {@link eu.etaxonomy.cdm.model.reference.Reference reference} that is different to the
229
	 * {@link TaxonName#getNomenclaturalReference() nomenclatural reference} of the typified taxon name.
230
	 *
231
	 * @see   ReferencedEntityBase#getCitation()
232
	 */
233
//	/* (non-Javadoc)
234
//	 * @see eu.etaxonomy.cdm.model.name.ITypeDesignation#isLectoType()
235
//	 */
236
//	public boolean isLectoType() {
237
//		return lectoType;
238
//	}
239
//
240
//	/**
241
//	 * @see   #isLectoType()
242
//	 */
243
//	public void setLectoType(boolean lectoType) {
244
//		this.lectoType = lectoType;
245
//	}
246

    
247
//*********************** CLONE ********************************************************/
248

    
249
	/**
250
	 * Clones <i>this</i> name type. This is a shortcut that enables to create
251
	 * a new instance that differs only slightly from <i>this</i> name type by
252
	 * modifying only some of the attributes.
253
	 *
254
	 * @see eu.etaxonomy.cdm.model.name.TypeDesignationBase#clone()
255
	 * @see java.lang.Object#clone()
256
	 */
257
	@Override
258
	public Object clone() {
259
		NameTypeDesignation result;
260
		try {
261
			result = (NameTypeDesignation)super.clone();
262
			//no changes to: rejectedType, conservedType, typeName
263
			return result;
264
		} catch (CloneNotSupportedException e) {
265
			logger.warn("Object does not implement cloneable");
266
			e.printStackTrace();
267
			return null;
268
		}
269
	}
270

    
271
}
(18-18/36)