minor
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / DescriptionElementSource.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.cdm.model.common;
12
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;
22
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;
29
30 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
31 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
32 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
33
34 /**
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.
40 * </BR>
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}.
46 *
47 * @author a.mueller
48 * @created 18.09.2009
49 * @version 1.0
50 */
51 @XmlType(name = "DescriptionElementSource", propOrder = {
52 "sourcedObj",
53 "nameUsedInSource"
54 })
55 @Entity
56 @Audited
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);
61
62
63 /**
64 * Factory method
65 * @return
66 */
67 public static DescriptionElementSource NewInstance(){
68 return new DescriptionElementSource();
69 }
70
71 public static DescriptionElementSource NewInstance(String id){
72 DescriptionElementSource result = new DescriptionElementSource();
73 result.setIdInSource(id);
74 return result;
75 }
76
77 public static DescriptionElementSource NewInstance(String id, String idNamespace){
78 DescriptionElementSource result = NewInstance(id);
79 result.setIdNamespace(idNamespace);
80 return result;
81 }
82
83 public static DescriptionElementSource NewInstance(String id, String idNamespace, ReferenceBase citation){
84 DescriptionElementSource result = NewInstance(id, idNamespace);
85 result.setCitation(citation);
86 return result;
87 }
88
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);
93 return result;
94 }
95
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);
100 return result;
101 }
102
103 //FIXME: There is no sourcedObj_type for DescriptionElementSources...
104 @XmlElement(name = "SourcedObject")
105 @XmlIDREF
106 @XmlSchemaType(name = "IDREF")
107 @Any(metaDef = "CdmBase",
108 metaColumn=@Column(name = "sourcedObj_type"),
109 fetch = FetchType.LAZY,
110 optional = false)
111 @JoinColumn(name = "sourcedObj_id")
112 @NotAudited
113 private DescriptionElementBase sourcedObj;
114
115 @XmlElement(name = "nameUsedInSource")
116 @XmlIDREF
117 @XmlSchemaType(name = "IDREF")
118 @ManyToOne(fetch = FetchType.LAZY)
119 @Cascade({CascadeType.SAVE_UPDATE})
120 private TaxonNameBase nameUsedInSource;
121
122 private DescriptionElementSource(){
123
124 }
125
126
127 // ************************** GETTER / SETTER ****************************************************/
128
129
130 /* (non-Javadoc)
131 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#getSourcedObj()
132 */
133 public DescriptionElementBase getSourcedObj() {
134 return sourcedObj;
135 }
136
137 /* (non-Javadoc)
138 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#setSourcedObj(eu.etaxonomy.cdm.model.common.ISourceable)
139 */
140 public void setSourcedObj(DescriptionElementBase sourcedObj) {
141 this.sourcedObj = sourcedObj;
142 }
143
144
145 /**
146 * @return the taxonNameUsedInSource
147 */
148 public TaxonNameBase getNameUsedInSource() {
149 return nameUsedInSource;
150 }
151
152 /**
153 * @param nameUsedInReference the nameUsedInReference to set
154 */
155 public void setNameUsedInSource(TaxonNameBase nameUsedInSource) {
156 this.nameUsedInSource = nameUsedInSource;
157 }
158
159
160
161
162 }