merge-update from trunk
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / molecular / DnaQuality.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.model.molecular;
11
12
13 import javax.persistence.Basic;
14 import javax.persistence.Entity;
15 import javax.persistence.FetchType;
16 import javax.persistence.ManyToOne;
17 import javax.xml.bind.annotation.XmlAccessType;
18 import javax.xml.bind.annotation.XmlAccessorType;
19 import javax.xml.bind.annotation.XmlElement;
20 import javax.xml.bind.annotation.XmlIDREF;
21 import javax.xml.bind.annotation.XmlRootElement;
22 import javax.xml.bind.annotation.XmlSchemaType;
23 import javax.xml.bind.annotation.XmlType;
24 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
25
26 import org.apache.log4j.Logger;
27 import org.hibernate.annotations.Type;
28 import org.hibernate.envers.Audited;
29 import org.hibernate.search.annotations.Analyze;
30 import org.hibernate.search.annotations.Field;
31 import org.hibernate.search.annotations.FieldBridge;
32 import org.joda.time.DateTime;
33
34 import eu.etaxonomy.cdm.hibernate.search.DateTimeBridge;
35 import eu.etaxonomy.cdm.jaxb.DateTimeAdapter;
36 import eu.etaxonomy.cdm.model.common.DefinedTerm;
37 import eu.etaxonomy.cdm.model.common.VersionableEntity;
38 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
39 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
40 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
41
42 /**
43 * A DNA Quality describes the quality of a {@link SpecimenOrObservationType#DnaSample}
44 *
45 * @author a.mueller
46 * @created 18-Oct-2014
47 */
48 @XmlAccessorType(XmlAccessType.FIELD)
49 @XmlType(name = "DnaQuality", propOrder = {
50 "purificationMethod",
51 "ratioOfAbsorbance260_230",
52 "ratioOfAbsorbance260_280",
53 "concentration",
54 "concentrationUnit",
55 "qualityTerm",
56 "qualityCheckDate"
57 })
58 @XmlRootElement(name = "DnaQuality")
59 @Entity
60 //@Indexed(index = "eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase")
61 @Audited
62 public class DnaQuality extends VersionableEntity implements Cloneable {
63 private static final long serialVersionUID = -8829069331010573654L;
64 @SuppressWarnings("unused")
65 private static final Logger logger = Logger.getLogger(DnaQuality.class);
66
67 // ****************** FACTORY METHOD *****************/
68
69 /**
70 * Factory method
71 * @return
72 */
73 public static DnaQuality NewInstance(){
74 return new DnaQuality();
75 }
76
77 // ************** ATTRIBUTES ****************************/
78
79 //TODO
80 // @XmlTransient
81 // @Transient
82 // private MaterialOrMethodEvent purificationMethod;
83 private String purificationMethod;
84
85
86 private Double ratioOfAbsorbance260_230;
87
88 private Double ratioOfAbsorbance260_280;
89
90 private Double concentration;
91
92 @XmlElement(name = "Type")
93 @XmlIDREF
94 @XmlSchemaType(name = "IDREF")
95 @ManyToOne(fetch = FetchType.LAZY)
96 private MeasurementUnit concentrationUnit;
97
98
99 @XmlElement(name = "Type")
100 @XmlIDREF
101 @XmlSchemaType(name = "IDREF")
102 @ManyToOne(fetch = FetchType.LAZY)
103 private DefinedTerm qualityTerm;
104
105 @XmlElement (name = "QualityCheckDate", type= String.class)
106 @XmlJavaTypeAdapter(DateTimeAdapter.class)
107 @Type(type="dateTimeUserType")
108 @Basic(fetch = FetchType.LAZY)
109 @Field(analyze = Analyze.NO)
110 @FieldBridge(impl = DateTimeBridge.class)
111 @Audited
112 private DateTime qualityCheckDate;
113
114
115 // ******************* CONSTRUCTOR *************************/
116
117 /**
118 * Constructor
119 */
120 private DnaQuality() {}
121
122 //************ GETTER / SETTER **********************************/
123
124
125 public String getPurificationMethod() {
126 return purificationMethod;
127 }
128
129 public void setPurificationMethod(String purificationMethod) {
130 this.purificationMethod = purificationMethod;
131 }
132
133 public Double getRatioOfAbsorbance260_230() {
134 return ratioOfAbsorbance260_230;
135 }
136
137 public void setRatioOfAbsorbance260_230(Double ratioOfAbsorbance260_230) {
138 this.ratioOfAbsorbance260_230 = ratioOfAbsorbance260_230;
139 }
140
141 public Double getRatioOfAbsorbance260_280() {
142 return ratioOfAbsorbance260_280;
143 }
144
145 public void setRatioOfAbsorbance260_280(Double ratioOfAbsorbance260_280) {
146 this.ratioOfAbsorbance260_280 = ratioOfAbsorbance260_280;
147 }
148
149
150 public Double getConcentration() {
151 return concentration;
152 }
153
154 public void setConcentration(Double concentration) {
155 this.concentration = concentration;
156 }
157
158 public MeasurementUnit getConcentrationUnit() {
159 return concentrationUnit;
160 }
161
162 public void setConcentrationUnit(MeasurementUnit concentrationUnit) {
163 this.concentrationUnit = concentrationUnit;
164 }
165
166 public DateTime getQualityCheckDate() {
167 return qualityCheckDate;
168 }
169
170 public void setQualityCheckDate(DateTime qualityCheckDate) {
171 this.qualityCheckDate = qualityCheckDate;
172 }
173
174 public DefinedTerm getQualityTerm() {
175 return qualityTerm;
176 }
177
178 public void setQualityTerm(DefinedTerm qualityTerm) {
179 this.qualityTerm = qualityTerm;
180 }
181
182
183
184 //*********** CLONE **********************************/
185
186 /**
187 * Clones <i>this</i> dna quality. This is a shortcut that enables to
188 * create a new instance that differs only slightly from <i>this</i> dna quality
189 * by modifying only some of the attributes.<BR>
190 * @throws CloneNotSupportedException
191 *
192 * @see Specimen#clone()
193 * @see DerivedUnit#clone()
194 * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
195 * @see java.lang.Object#clone()
196 */
197 @Override
198 public DnaQuality clone() {
199 try {
200 DnaQuality result = (DnaQuality)super.clone();
201
202 //purification method ??
203
204 //no changes to: rationXXX, concentration, qualityCheckDate, qualityTerm,
205 return result;
206
207 } catch (CloneNotSupportedException e) {
208 throw new RuntimeException(e); //may not occur as Clonable is implemented
209 }
210 }
211
212 }