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
.common
;
13 import javax
.persistence
.Column
;
14 import javax
.persistence
.Entity
;
15 import javax
.persistence
.FetchType
;
16 import javax
.persistence
.JoinColumn
;
17 import javax
.persistence
.ManyToOne
;
18 import javax
.xml
.bind
.annotation
.XmlElement
;
19 import javax
.xml
.bind
.annotation
.XmlIDREF
;
20 import javax
.xml
.bind
.annotation
.XmlSchemaType
;
21 import javax
.xml
.bind
.annotation
.XmlType
;
23 import org
.apache
.log4j
.Logger
;
24 import org
.hibernate
.annotations
.Any
;
25 import org
.hibernate
.annotations
.Cascade
;
26 import org
.hibernate
.annotations
.CascadeType
;
27 import org
.hibernate
.envers
.Audited
;
28 import org
.hibernate
.envers
.NotAudited
;
30 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
31 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
32 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
35 * This class represents an {@link eu.etaxonomy.cdm.model.common.IOriginalSource IOriginalSource}
36 * that can be used with {@link eu.etaxonomy.cdm.model.description.DescriptionElementBase description elements}.
37 * Additionally to the core functionally of IOriginalSource a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase taxon name}
38 * can be stored that points to the name used in the source. This is needed because description always belong
39 * to accepted taxa while the referenced citations may use synonym names.
41 * The use of "originalNameString" within a DescriptionElementSource has to be discussed.
42 * In general this string is to be used for different representations of the sourced object. In this classes
43 * context it could also stand for the string representation of the taxon name used in the source. This
44 * may make sense if the taxon name is not available in the CDM and the user for some reason does not want
45 * to create a new ful {@link eu.etaxonomy.cdm.model.name.TaxonNameBase taxon name}.
51 @XmlType(name
= "DescriptionElementSource", propOrder
= {
57 public class DescriptionElementSource
extends OriginalSourceBase
<DescriptionElementBase
>{
58 private static final long serialVersionUID
= -8487673428764273806L;
59 @SuppressWarnings("unused")
60 private static final Logger logger
= Logger
.getLogger(DescriptionElementSource
.class);
67 public static DescriptionElementSource
NewInstance(){
68 return new DescriptionElementSource();
71 public static DescriptionElementSource
NewInstance(String id
){
72 DescriptionElementSource result
= new DescriptionElementSource();
73 result
.setIdInSource(id
);
77 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
){
78 DescriptionElementSource result
= NewInstance(id
);
79 result
.setIdNamespace(idNamespace
);
83 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
, Reference citation
){
84 DescriptionElementSource result
= NewInstance(id
, idNamespace
);
85 result
.setCitation(citation
);
89 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
, Reference citation
, String microCitation
){
90 DescriptionElementSource result
= NewInstance(id
, idNamespace
);
91 result
.setCitation(citation
);
92 result
.setCitationMicroReference(microCitation
);
96 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
, Reference citation
, String microReference
, TaxonNameBase nameUsedInSource
, String originalNameString
){
97 DescriptionElementSource result
= NewInstance(id
, idNamespace
, citation
, microReference
);
98 result
.setNameUsedInSource(nameUsedInSource
);
99 result
.setOriginalNameString(originalNameString
);
103 public static DescriptionElementSource
NewInstance(Reference citation
, String microCitation
){
104 DescriptionElementSource result
= NewInstance();
105 result
.setCitation(citation
);
106 result
.setCitationMicroReference(microCitation
);
110 public static DescriptionElementSource
NewInstance(Reference citation
, String microReference
, TaxonNameBase nameUsedInSource
, String originalNameString
){
111 DescriptionElementSource result
= NewInstance(citation
, microReference
);
112 result
.setNameUsedInSource(nameUsedInSource
);
113 result
.setOriginalNameString(originalNameString
);
119 @XmlElement(name
= "SourcedObject")
121 @XmlSchemaType(name
= "IDREF")
122 @Any(metaDef
= "CdmBase",
123 metaColumn
=@Column(name
= "sourcedObj_type"),
124 fetch
= FetchType
.LAZY
,
126 @JoinColumn(name
= "sourcedObj_id")
128 private DescriptionElementBase sourcedObj
;
130 @XmlElement(name
= "nameUsedInSource")
132 @XmlSchemaType(name
= "IDREF")
133 @ManyToOne(fetch
= FetchType
.LAZY
)
134 @Cascade({CascadeType
.SAVE_UPDATE
})
135 private TaxonNameBase nameUsedInSource
;
137 private DescriptionElementSource(){
142 // ************************** GETTER / SETTER ****************************************************/
146 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#getSourcedObj()
148 public DescriptionElementBase
getSourcedObj() {
153 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#setSourcedObj(eu.etaxonomy.cdm.model.common.ISourceable)
155 public void setSourcedObj(DescriptionElementBase sourcedObj
) {
156 this.sourcedObj
= sourcedObj
;
161 * @return the taxonNameUsedInSource
163 public TaxonNameBase
getNameUsedInSource() {
164 return nameUsedInSource
;
168 * @param nameUsedInReference the nameUsedInReference to set
170 public void setNameUsedInSource(TaxonNameBase nameUsedInSource
) {
171 this.nameUsedInSource
= nameUsedInSource
;
175 //*********************************** CLONE *********************************************************/
179 * Clones this original source and sets the clones sourced object to 'sourceObj'
180 * @see java.lang.Object#clone()
182 public DescriptionElementSource
clone(DescriptionElementBase sourcedObj
) throws CloneNotSupportedException
{
183 DescriptionElementSource result
= (DescriptionElementSource
)clone();
184 result
.setSourcedObj(sourcedObj
);
190 * @see eu.etaxonomy.cdm.model.common.OriginalSourceBase#clone()
191 * @see java.lang.Object#clone()
194 public Object
clone() throws CloneNotSupportedException
{
195 DescriptionElementSource result
= (DescriptionElementSource
)super.clone();
197 //no changes to: sourcedObj