Project

General

Profile

Download (7.24 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 java.util.Map;
14

    
15
import javax.persistence.Column;
16
import javax.persistence.Entity;
17
import javax.persistence.Transient;
18
import javax.xml.bind.annotation.XmlAccessType;
19
import javax.xml.bind.annotation.XmlAccessorType;
20
import javax.xml.bind.annotation.XmlElement;
21
import javax.xml.bind.annotation.XmlRootElement;
22
import javax.xml.bind.annotation.XmlType;
23

    
24
import org.apache.commons.lang.StringUtils;
25
import org.apache.log4j.Logger;
26
import org.hibernate.envers.Audited;
27
import org.hibernate.search.annotations.Field;
28
import org.hibernate.search.annotations.Indexed;
29
import org.springframework.beans.factory.annotation.Configurable;
30

    
31
import eu.etaxonomy.cdm.common.CdmUtils;
32
import eu.etaxonomy.cdm.model.common.CdmBase;
33
import eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy;
34

    
35
/**
36
 * The taxon name class for viral taxa. The scientific name will be stored
37
 * as a string (consisting eventually of several words even combined also with
38
 * non alphabetical characters) in the inherited {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#setTitleCache(String) titleCache} attribute.
39
 * Classification has no influence on the names of viral taxon names and no
40
 * viral taxon must be taxonomically included in another viral taxon with
41
 * higher rank. For examples see ICTVdb:
42
 * "http://www.ncbi.nlm.nih.gov/ICTVdb/Ictv/vn_indxA.htm"
43
 * <P>
44
 * This class corresponds to: NameViral according to the ABCD schema.
45
 *
46
 * @author m.doering
47
 * @version 1.0
48
 * @created 08-Nov-2007 13:07:02
49
 */
50
@XmlAccessorType(XmlAccessType.FIELD)
51
@XmlType(name = "", propOrder = {
52
    "acronym"
53
})
54
@XmlRootElement(name = "ViralName")
55
@Entity
56
@Indexed(index = "eu.etaxonomy.cdm.model.name.TaxonNameBase")
57
@Audited
58
@Configurable
59
public class ViralName extends TaxonNameBase<ViralName, INameCacheStrategy<ViralName>> implements Cloneable {
60
	private static final long serialVersionUID = 4516625507432071817L;
61
	private static final Logger logger = Logger.getLogger(ViralName.class);
62

    
63
//    @XmlTransient
64
//    @Transient
65
//	protected INameCacheStrategy<ViralName> cacheStrategy;
66

    
67
	@XmlElement(name = "Acronym")
68
	@Field
69
    //TODO Val #3379
70
//	@NullOrNotEmpty
71
	@Column(length=255)
72
	private String acronym;
73

    
74
	// ************* CONSTRUCTORS *************/
75

    
76
	protected ViralName(){
77
		super();
78
	}
79

    
80
	/**
81
	 * Class constructor: creates a new viral taxon name instance
82
	 * only containing its {@link Rank rank}.
83
	 *
84
	 * @param	rank  the rank to be assigned to <i>this</i> viral taxon name
85
	 * @see 	TaxonNameBase#TaxonNameBase(Rank)
86
	 */
87
	public ViralName(Rank rank) {
88
		super(rank);
89
	}
90

    
91
//***********************
92

    
93
	private static Map<String, java.lang.reflect.Field> allFields = null;
94
	@Override
95
    protected Map<String, java.lang.reflect.Field> getAllFields(){
96
    	if (allFields == null){
97
			allFields = CdmUtils.getAllFields(this.getClass(), CdmBase.class, false, false, false, true);
98
		}
99
    	return allFields;
100
    }
101

    
102
//*************************
103

    
104
	//********* METHODS **************************************/
105

    
106
	/**
107
	 * Creates a new viral taxon name instance only containing its {@link Rank rank}.
108
	 *
109
	 * @param	rank  the rank to be assigned to <i>this</i> viral taxon name
110
	 * @see 	#ViralName(Rank)
111
	 */
112
	public static ViralName NewInstance(Rank rank){
113
		return new ViralName(rank);
114
	}
115

    
116
	/**
117
	 * Returns the accepted acronym (an assigned abbreviation) string for <i>this</i>
118
	 * viral taxon name. For instance PCV stays for Peanut Clump Virus.
119
	 *
120
	 * @return  the string containing the accepted acronym of <i>this</i> viral taxon name
121
	 */
122
	public String getAcronym(){
123
		return this.acronym;
124
	}
125
	/**
126
	 * @see  #getAcronym()
127
	 */
128
	public void setAcronym(String acronym){
129
		this.acronym = StringUtils.isBlank(acronym)? null : acronym;
130
	}
131

    
132
	/**
133
	 * Generates and returns the string with the scientific name of <i>this</i>
134
	 * viral taxon name. This string may be stored in the inherited
135
	 * {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache() titleCache} attribute.
136
	 * This method overrides the generic and inherited
137
	 * method from {@link TaxonNameBase TaxonNameBase} .
138
	 *
139
	 * @return  the string with the composed name of <i>this</i> viral taxon name with authorship (and maybe year)
140
	 * @see  	eu.etaxonomy.cdm.model.common.IdentifiableEntity#generateTitle()
141
	 * @see  	eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache()
142
	 * @see  	TaxonNameBase#generateTitle()
143
	 */
144
//	@Override
145
//	public String generateTitle(){
146
//		logger.warn("not yet implemented");
147
//		return this.toString();
148
//	}
149

    
150
	@Override
151
	public String generateFullTitle(){
152
		logger.warn("not yet implemented");
153
		return this.toString();
154
	}
155

    
156
	/**
157
	 * Returns the boolean value "true" if the components of <i>this</i> viral taxon name
158
	 * follow the rules of the corresponding
159
	 * {@link NomenclaturalCode International Code of Virus Classification and Nomenclature},
160
	 * "false" otherwise.
161
	 * This method overrides and implements the isCodeCompliant method from
162
	 * the abstract {@link TaxonNameBase#isCodeCompliant() TaxonNameBase} class.
163
	 *
164
	 * @return  the boolean value expressing the compliance of <i>this</i> viral taxon name to its nomenclatural code
165
	 * @see	   	TaxonNameBase#isCodeCompliant()
166
	 */
167
	@Override
168
	@Transient
169
	public boolean isCodeCompliant() {
170
		logger.warn("not yet implemented");
171
		return false;
172
	}
173

    
174

    
175
	/**
176
	 * Returns the {@link NomenclaturalCode nomenclatural code} that governs
177
	 * the construction of <i>this</i> viral taxon name, that is the
178
	 * International Code of Virus Classification and Nomenclature.
179
	 * This method overrides the getNomenclaturalCode method from {@link TaxonNameBase TaxonNameBase}.
180
	 *
181
	 * @return  the nomenclatural code for viruses
182
	 * @see  	#isCodeCompliant()
183
	 * @see  	TaxonNameBase#getHasProblem()
184
	 * @see  	TaxonNameBase#getNomenclaturalCode()
185
	 */
186
	@Override
187
	public NomenclaturalCode getNomenclaturalCode(){
188
		return NomenclaturalCode.ICVCN;
189
	}
190

    
191

    
192
	/**
193
	 * Returns the {@link eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy cache strategy} used to generate
194
	 * several strings corresponding to <i>this</i> viral taxon name.
195
	 *
196
	 * @return  the cache strategy used for <i>this</i> viral taxon name
197
	 * @see 	eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy
198
	 * @see     eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy
199
	 */
200
//	@Override
201
//	@Transient
202
//	public INameCacheStrategy getCacheStrategy() {
203
//		return cacheStrategy;
204
//	}
205

    
206

    
207
	/**
208
	 * @see  #getCacheStrategy()
209
	 */
210
//	@Override
211
//	public void setCacheStrategy(INameCacheStrategy cacheStrategy) {
212
//		this.cacheStrategy = cacheStrategy;
213
//	}
214

    
215

    
216
//*********************** CLONE ********************************************************/
217

    
218
	/**
219
	 * Clones <i>this</i> viral name. This is a shortcut that enables to create
220
	 * a new instance that differs only slightly from <i>this</i> viral name by
221
	 * modifying only some of the attributes.
222
	 *
223
	 * @see eu.etaxonomy.cdm.model.name.TaxonNameBase#clone()
224
	 * @see java.lang.Object#clone()
225
	 */
226
	@Override
227
	public Object clone() {
228
		ViralName result = (ViralName)super.clone();
229
		//no changes to: acronym
230
		return result;
231
	}
232
}
(25-25/28)