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