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
.ReferenceBase
;
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
, ReferenceBase citation
){
84 DescriptionElementSource result
= NewInstance(id
, idNamespace
);
85 result
.setCitation(citation
);
89 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
, ReferenceBase citation
, String microReference
){
90 DescriptionElementSource result
= NewInstance(id
, idNamespace
);
91 result
.setCitation(citation
);
92 result
.setCitationMicroReference(microReference
);
96 public static DescriptionElementSource
NewInstance(String id
, String idNamespace
, ReferenceBase citation
, String microReference
, TaxonNameBase nameUsedInSource
, String originalNameString
){
97 DescriptionElementSource result
= NewInstance(id
, idNamespace
, citation
, microReference
);
98 result
.setNameUsedInSource(nameUsedInSource
);
99 result
.setOriginalNameString(originalNameString
);
103 //FIXME: There is no sourcedObj_type for DescriptionElementSources...
104 @XmlElement(name
= "SourcedObject")
106 @XmlSchemaType(name
= "IDREF")
107 @Any(metaDef
= "CdmBase",
108 metaColumn
=@Column(name
= "sourcedObj_type"),
109 fetch
= FetchType
.LAZY
,
111 @JoinColumn(name
= "sourcedObj_id")
113 private DescriptionElementBase sourcedObj
;
115 @XmlElement(name
= "nameUsedInSource")
117 @XmlSchemaType(name
= "IDREF")
118 @ManyToOne(fetch
= FetchType
.LAZY
)
119 @Cascade({CascadeType
.SAVE_UPDATE
})
120 private TaxonNameBase nameUsedInSource
;
122 private DescriptionElementSource(){
127 // ************************** GETTER / SETTER ****************************************************/
131 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#getSourcedObj()
133 public DescriptionElementBase
getSourcedObj() {
138 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#setSourcedObj(eu.etaxonomy.cdm.model.common.ISourceable)
140 public void setSourcedObj(DescriptionElementBase sourcedObj
) {
141 this.sourcedObj
= sourcedObj
;
146 * @return the taxonNameUsedInSource
148 public TaxonNameBase
getNameUsedInSource() {
149 return nameUsedInSource
;
153 * @param nameUsedInReference the nameUsedInReference to set
155 public void setNameUsedInSource(TaxonNameBase nameUsedInSource
) {
156 this.nameUsedInSource
= nameUsedInSource
;