b261c4965c6fc010b060db68bfd5920a0f63e692
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / name / NonViralName.java
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.xml.bind.annotation.XmlAccessType;
15 import javax.xml.bind.annotation.XmlAccessorType;
16 import javax.xml.bind.annotation.XmlRootElement;
17 import javax.xml.bind.annotation.XmlType;
18
19 import org.hibernate.envers.Audited;
20 import org.hibernate.search.annotations.Indexed;
21 import org.springframework.beans.factory.annotation.Configurable;
22
23 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
24 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
25 import eu.etaxonomy.cdm.strategy.cache.name.INonViralNameCacheStrategy;
26 import eu.etaxonomy.cdm.validation.Level2;
27 import eu.etaxonomy.cdm.validation.Level3;
28 import eu.etaxonomy.cdm.validation.annotation.CorrectEpithetsForRank;
29 import eu.etaxonomy.cdm.validation.annotation.NameMustHaveAuthority;
30 import eu.etaxonomy.cdm.validation.annotation.NoDuplicateNames;
31
32 /**
33 * The taxon name class for all non viral taxa. Parenthetical authorship is derived
34 * from basionym relationship. The scientific name including author strings and
35 * maybe year can be stored as a string in the inherited {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache() titleCache} attribute.
36 * The year itself is an information obtained from the {@link eu.etaxonomy.cdm.model.reference.Reference#getYear() nomenclatural reference}.
37 * The scientific name string without author strings and year can be stored in the {@link #getNameCache() nameCache} attribute.
38 * <P>
39 * This class corresponds partially to: <ul>
40 * <li> TaxonName according to the TDWG ontology
41 * <li> ScientificName and CanonicalName according to the TCS
42 * <li> ScientificName according to the ABCD schema
43 * </ul>
44 *
45 * @author m.doering
46 * @created 08-Nov-2007 13:06:39
47 */
48 @XmlAccessorType(XmlAccessType.FIELD)
49 @XmlType(name = "NonViralName", propOrder = {})
50 @XmlRootElement(name = "NonViralName")
51 @Entity
52 @Indexed(index = "eu.etaxonomy.cdm.model.name.TaxonNameBase")
53 @Audited
54 @Configurable
55
56 @CorrectEpithetsForRank(groups = Level2.class)
57 @NameMustHaveAuthority(groups = Level2.class)
58 @NoDuplicateNames(groups = Level3.class)
59 public class NonViralName<T extends NonViralName<?>>
60 extends TaxonNameBase<T, INonViralNameCacheStrategy<?>>{
61
62 private static final long serialVersionUID = -9083811681449792683L;
63
64 // ************************** CONSTRUCTORS *************/
65
66 //needed by hibernate
67 protected NonViralName(){
68 super();
69 }
70
71 protected NonViralName(Rank rank, HomotypicalGroup homotypicalGroup) {
72 super(rank, homotypicalGroup);
73 }
74
75 protected NonViralName(Rank rank, String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, TeamOrPersonBase combinationAuthorship, INomenclaturalReference nomenclaturalReference, String nomenclMicroRef, HomotypicalGroup homotypicalGroup) {
76 super(rank, genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet, combinationAuthorship, nomenclaturalReference, nomenclMicroRef, homotypicalGroup);
77 }
78
79
80 //*********************** CLONE ********************************************************/
81
82 @Override
83 public Object clone() {
84 NonViralName<?> result = (NonViralName<?>)super.clone();
85
86 //no changes to:
87 return result;
88 }
89 }