final implementation of MaterialOrMethodEvent, Cloning, PreservationMethod, ... ...
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / occurrence / PreservationMethod.java
index a8092c2a2be04d6793839e0763caad6dfb14954d..ce4055ab133398d20efeea819cca4b70e1ee92e7 100644 (file)
-/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
-* http://www.e-taxonomy.eu
-* 
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-
-package eu.etaxonomy.cdm.model.occurrence;
-
-import java.util.UUID;
-
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
-
-import org.apache.log4j.Logger;
-
-import javax.persistence.*;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * http://rs.tdwg.org/ontology/voc/Collection.rdf#SpecimenPreservationMethodTypeTerm
- * @author m.doering
- * @version 1.0
- * @created 08-Nov-2007 13:06:44
- */
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "PreservationMethod")
-@Entity
-//@Audited
-public class PreservationMethod extends DefinedTermBase<PreservationMethod> {
-       private static final Logger logger = Logger.getLogger(PreservationMethod.class);
-       
-       /**
-        * Factory method
-        * @return
-        */
-       public static PreservationMethod NewInstance(){
-               return new PreservationMethod();
-       }
-       
-       /**
-        * Constructor
-        */
-       public PreservationMethod() {
-               super();
-       }
-       
-       /**
-        * Factory method
-        * @return
-        */
-       public static PreservationMethod NewInstance(String term, String label, String labelAbbrev) {
-               return new PreservationMethod(term, label, labelAbbrev);
-       }
-       
-       /**
-        * Constructor
-        */
-       protected PreservationMethod(String term, String label, String labelAbbrev) {
-               super(term, label, labelAbbrev);
-       }
-
-       @Override
-       protected void setDefaultTerms(TermVocabulary<PreservationMethod> termVocabulary) {
-               // TODO Auto-generated method stub
-               
-       }
-
-}
\ No newline at end of file
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.model.occurrence;\r
+\r
+import javax.persistence.Entity;\r
+import javax.persistence.FetchType;\r
+import javax.persistence.ManyToOne;\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlElement;\r
+import javax.xml.bind.annotation.XmlIDREF;\r
+import javax.xml.bind.annotation.XmlRootElement;\r
+import javax.xml.bind.annotation.XmlSchemaType;\r
+import javax.xml.bind.annotation.XmlType;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.envers.Audited;\r
+import org.hibernate.search.annotations.Analyze;\r
+import org.hibernate.search.annotations.Field;\r
+import org.hibernate.search.annotations.IndexedEmbedded;\r
+import org.hibernate.search.annotations.NumericField;\r
+\r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
+import eu.etaxonomy.cdm.model.common.EventBase;\r
+import eu.etaxonomy.cdm.model.common.TermType;\r
+import eu.etaxonomy.cdm.model.molecular.Cloning;\r
+\r
+/**\r
+ * This class is a specialization of {@link MaterialOrMethodEvent} which allows to\r
+ * specifically store temperature and XXX which are common parameters for preparation.\r
+ * \r
+ * {@link #getMaterialMethodTerm() Defined methods} taken to describe a Preservation Method\r
+ * should be taken from a vocabulary of type {@link TermType#PreservationMethod}\r
+ * \r
+ * http://rs.tdwg.org/ontology/voc/Collection.rdf#SpecimenPreservationMethodTypeTerm\r
+ *\r
+ * @author a.mueller\r
+ * @created 2013-09-11\r
+ *\r
+ */\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "PreservationMethod", propOrder = {\r
+       "medium",\r
+       "temperature"\r
+})\r
+@XmlRootElement(name = "PreservationMethod")\r
+@Entity\r
+//TODO @Indexed(index = "eu.etaxonomy.cdm.model.common.DefinedTermBase")\r
+@Audited\r
+public class PreservationMethod extends MaterialOrMethodEvent implements Cloneable {\r
+       private static final long serialVersionUID = 2366116167028862401L;\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(PreservationMethod.class);\r
+\r
+    @XmlElement(name = "Medium")\r
+    @XmlIDREF\r
+    @XmlSchemaType(name = "IDREF")\r
+    @ManyToOne(fetch = FetchType.LAZY)\r
+    @IndexedEmbedded // no depth for terms\r
+    private DefinedTerm medium;\r
+       \r
+       @XmlElement(name = "Temperature")\r
+       @Field(analyze = Analyze.NO)\r
+       @NumericField\r
+       private Double temperature;\r
+       \r
+       \r
+       // ******************** FACTORY METHOD ******************/      \r
+       \r
+       public static PreservationMethod NewInstance(){\r
+               return new PreservationMethod();\r
+       }\r
+       \r
+    public static PreservationMethod NewInstance(DefinedTerm methodTerm, String methodText){\r
+       return new PreservationMethod(methodTerm, methodText, null, null);\r
+    }\r
+\r
+       public static PreservationMethod NewInstance(DefinedTerm methodTerm, String methodText, DefinedTerm preservationMedium, Double temperature){\r
+               return new PreservationMethod(methodTerm, methodText, preservationMedium, temperature);\r
+       }\r
+\r
+       \r
+       // ********************* CONSTRUCTOR ********************/\r
+               \r
+       //for hibernate use only\r
+       private PreservationMethod(){};\r
+       \r
+    private PreservationMethod(DefinedTerm methodTerm, String methodText, DefinedTerm medium, Double temperature){\r
+       super(methodTerm, methodText);\r
+       this.medium = medium;\r
+       this.temperature = temperature;\r
+    }\r
+       \r
+       // ********************* GETTER / SETTER ********************/\r
+\r
+       public DefinedTerm getMedium() {\r
+               return medium;\r
+       }\r
+\r
+\r
+       public void setMedium(DefinedTerm medium) {\r
+               this.medium = medium;\r
+       }\r
+\r
+\r
+       public Double getTemperature() {\r
+               return temperature;\r
+       }\r
+\r
+\r
+       public void setTemperature(Double temperature) {\r
+               this.temperature = temperature;\r
+       }\r
+       \r
+       // ********************* CLONE ********************/\r
+       /** \r
+        * Clones <i>this</i> {@link Cloning}. This is a shortcut that enables to create\r
+        * a new instance that differs only slightly from <i>this</i> cloning by\r
+        * modifying only some of the attributes.<BR><BR>\r
+        *  \r
+        * @see EventBase#clone()\r
+        * @see java.lang.Object#clone()\r
+        */\r
+       @Override\r
+       public Object clone()  {\r
+               PreservationMethod result = (PreservationMethod)super.clone();\r
+               \r
+               //don't change medium, temperature\r
+               return result;\r
+       }\r
+}\r