-
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / AnnotationType.java
index 1b35d1c0b5f7a7abf18177b21953802c76fbcef2..74756cf2485c1cbbcbf031cfc87223551263d0b7 100644 (file)
@@ -10,6 +10,8 @@
 package eu.etaxonomy.cdm.model.common;
 
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.UUID;
 
 import javax.persistence.Entity;
@@ -20,6 +22,8 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.log4j.Logger;
 import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Indexed;
+import org.springframework.util.Assert;
 
 /**
  * Annotation types ...
@@ -31,18 +35,18 @@ import org.hibernate.envers.Audited;
 @XmlType(name = "AnnotationType")
 @XmlRootElement(name = "AnnotationType")
 @Entity
+@Indexed(index = "eu.etaxonomy.cdm.model.common.DefinedTermBase")
 @Audited
 public class AnnotationType extends DefinedTermBase<AnnotationType> {
        private static final long serialVersionUID = 49629121282854575L;
        @SuppressWarnings("unused")
        private static final Logger logger = Logger.getLogger(AnnotationType.class);
 
-       private static final UUID uuidTechnical = UUID.fromString("6a5f9ea4-1bdd-4906-89ad-6e669f982d69");
-       private static final UUID uuidEditorial = UUID.fromString("34204192-b41d-4857-a1d4-28992bef2a2a");
-       
-       private static AnnotationType TECHNICAL;
-       private static AnnotationType EDITORIAL;
+       protected static Map<UUID, AnnotationType> termMap = null;              
        
+       private static final UUID uuidTechnical = UUID.fromString("6a5f9ea4-1bdd-4906-89ad-6e669f982d69");
+       private static final UUID uuidEditorial = UUID.fromString("e780d5fd-abfc-4025-938a-46deb751d808");
+
        public static AnnotationType NewInstance(String term, String label, String labelAbbrev){
                return new AnnotationType(term, label, labelAbbrev);
        }
@@ -53,7 +57,6 @@ public class AnnotationType extends DefinedTermBase<AnnotationType> {
         * @param label
         */
        public AnnotationType() {
-               super();
        }
        
        /**
@@ -62,19 +65,41 @@ public class AnnotationType extends DefinedTermBase<AnnotationType> {
         * @param label
         */
        protected AnnotationType(String term, String label, String labelAbbrev) {
-               super(term, label, labelAbbrev);
+               super(TermType.AnnotationType , term, label, labelAbbrev);
        }
 
+       
+//************************** METHODS ********************************
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#resetTerms()
+        */
+       @Override
+       public void resetTerms(){
+               termMap = null;
+       }
+       
+       protected static AnnotationType getTermByUuid(UUID uuid){
+               if (termMap == null){
+                       return null;  //better return null then initialize the termMap in an unwanted way 
+               }
+               return (AnnotationType)termMap.get(uuid);
+       }
+       
+       
        public static final AnnotationType TECHNICAL(){
-               return AnnotationType.TECHNICAL;
+               return getTermByUuid(uuidTechnical);
        }
 
        public static final AnnotationType EDITORIAL(){
-               return AnnotationType.EDITORIAL;
+               return getTermByUuid(uuidEditorial);
        }
 
        protected void setDefaultTerms(TermVocabulary<AnnotationType> termVocabulary) {
-               AnnotationType.TECHNICAL = termVocabulary.findTermByUuid(uuidTechnical);
-               AnnotationType.EDITORIAL = termVocabulary.findTermByUuid(uuidEditorial);        
+               termMap = new HashMap<UUID, AnnotationType>();
+               for (AnnotationType term : termVocabulary.getTerms()){
+                       termMap.put(term.getUuid(), (AnnotationType)term);
+               }       
        }
+
 }
\ No newline at end of file