-
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / IdentifiableSource.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.xml.bind.annotation.XmlElement;
18 import javax.xml.bind.annotation.XmlIDREF;
19 import javax.xml.bind.annotation.XmlSchemaType;
20 import javax.xml.bind.annotation.XmlType;
21
22 import org.apache.log4j.Logger;
23 import org.hibernate.annotations.Any;
24 import org.hibernate.envers.Audited;
25 import org.hibernate.envers.NotAudited;
26
27 import eu.etaxonomy.cdm.model.reference.Reference;
28
29 /**
30 * This class represents an {@link eu.etaxonomy.cdm.model.common.IOriginalSource IOriginalSource}
31 * that can be used with {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity identifiable entity}.
32 *
33 * @see eu.etaxonomy.cdm.model.common.IOriginalSource
34 *
35 * @author a.mueller
36 * @created 18.09.2009
37 * @version 1.0
38 */
39 @XmlType(name = "IdentifiableSource", propOrder = {
40 "sourcedObj"
41 })
42 @Entity
43 @Audited
44 public class IdentifiableSource extends OriginalSourceBase<IdentifiableEntity>{
45 private static final long serialVersionUID = -8487673428764273806L;
46 @SuppressWarnings("unused")
47 private static final Logger logger = Logger.getLogger(IdentifiableSource.class);
48
49 /**
50 * Factory method
51 * @return
52 */
53 public static IdentifiableSource NewInstance(OriginalSourceType type){
54 return new IdentifiableSource(type);
55 }
56
57 public static IdentifiableSource NewDataImportInstance(String id){
58 IdentifiableSource result = new IdentifiableSource(OriginalSourceType.Import);
59 result.setIdInSource(id);
60 return result;
61 }
62
63 public static IdentifiableSource NewDataImportInstance(String id, String idNamespace){
64 IdentifiableSource result = NewDataImportInstance(id);
65 result.setIdNamespace(idNamespace);
66 return result;
67 }
68
69 public static IdentifiableSource NewDataImportInstance(String id, String idNamespace, Reference ref){
70 IdentifiableSource result = NewDataImportInstance(id, idNamespace);
71 result.setCitation(ref);
72 return result;
73 }
74
75 public static IdentifiableSource NewInstance(OriginalSourceType type, String id, String idNamespace, Reference citation, String microCitation){
76 IdentifiableSource result = NewInstance(type);
77 result.setIdInSource(id);
78 result.setIdNamespace(idNamespace);
79 result.setCitation(citation);
80 result.setCitationMicroReference(microCitation);
81 return result;
82 }
83
84 public static IdentifiableSource NewPrimarySourceInstance(Reference citation, String microCitation){
85 IdentifiableSource result = NewInstance(OriginalSourceType.PrimaryTaxonomicSource);
86 result.setCitation(citation);
87 result.setCitationMicroReference(microCitation);
88 return result;
89 }
90
91 @XmlElement(name = "SourcedObject")
92 @XmlIDREF
93 @XmlSchemaType(name = "IDREF")
94 @Any(metaDef = "CdmBase",
95 metaColumn=@Column(name = "sourcedObj_type"),
96 fetch = FetchType.LAZY,
97 optional = false)
98 @JoinColumn(name = "sourcedObj_id")
99 @NotAudited
100 private IdentifiableEntity<?> sourcedObj;
101
102 // ****************** CONSTRUCTOR ********************************/
103
104 //for hibernate only
105 private IdentifiableSource() {
106 }
107
108 private IdentifiableSource(OriginalSourceType type) {
109 super(type);
110 }
111
112 // ********************** GETTER /SETTER *****************************/
113 /* (non-Javadoc)
114 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#getSourcedObj()
115 */
116 public IdentifiableEntity getSourcedObj() {
117 return sourcedObj;
118 }
119
120 /* (non-Javadoc)
121 * @see eu.etaxonomy.cdm.model.common.IOriginalSource#setSourcedObj(eu.etaxonomy.cdm.model.common.IdentifiableEntity)
122 */
123 public void setSourcedObj(IdentifiableEntity sourcedObj) {
124 this.sourcedObj = sourcedObj;
125 }
126
127 //*********************************** CLONE *********************************************************/
128
129 /**
130 * Clones this original source and sets the clones sourced object to 'sourceObj'
131 * @see java.lang.Object#clone()
132 */
133 public IdentifiableSource clone(IdentifiableEntity sourcedObj) throws CloneNotSupportedException{
134 IdentifiableSource result = (IdentifiableSource)clone();
135 result.setSourcedObj(sourcedObj);
136 return result;
137 }
138
139 /* (non-Javadoc)
140 * @see eu.etaxonomy.cdm.model.common.OriginalSourceBase#clone()
141 * @see java.lang.Object#clone()
142 */
143 @Override
144 public Object clone() throws CloneNotSupportedException{
145 IdentifiableSource result = (IdentifiableSource)super.clone();
146
147 //no changes to: sourcedObj
148 return result;
149 }
150
151
152 }