free text search: better querying for 'isNotNull' and code harmonization
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / description / PresenceTerm.java
index 871bd8c5c8f043fb66d6d872d1ae8303555574d1..72693498860759c34e3088d1f55411c00aa87e22 100644 (file)
@@ -9,10 +9,11 @@
 
 package eu.etaxonomy.cdm.model.description;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.UUID;
 
 import javax.persistence.Entity;
-import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -20,11 +21,11 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.log4j.Logger;
 import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Indexed;
 
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
 
 /**
  * This class represents terms describing different types of presence
@@ -38,37 +39,41 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 @XmlType(name = "PresenceTerm")
 @XmlRootElement(name = "PresenceTerm")
 @Entity
+@Indexed(index = "eu.etaxonomy.cdm.model.common.DefinedTermBase")
 @Audited
 public class PresenceTerm extends PresenceAbsenceTermBase<PresenceTerm> {
        private static final long serialVersionUID = -2876981902335193596L;
        private static final Logger logger = Logger.getLogger(PresenceTerm.class);
-       private static PresenceTerm ENDEMIC_FOR_THE_RELEVANT_AREA;
-       private static PresenceTerm INTRODUCED_REPORTED_IN_ERROR;
-       private static PresenceTerm INTRODUCED_NATURALIZED;
-       private static PresenceTerm INTRODUCED_CULTIVATED;
-       private static PresenceTerm INTRODUCED_ADVENTITIOUS;
-       private static PresenceTerm INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION;
-       private static PresenceTerm INTRODUCED_DOUBTFULLY_INTRODUCED;
-       private static PresenceTerm INTRODUCED_FORMERLY_INTRODUCED;
-       private static PresenceTerm INTRODUCED_PRESENCE_QUESTIONABLE;
-       private static PresenceTerm INTRODUCED;
-       private static PresenceTerm CULTIVATED_REPORTED_IN_ERROR;
-       private static PresenceTerm CULTIVATED;
-       private static PresenceTerm NATIVE_REPORTED_IN_ERROR;
-       private static PresenceTerm NATIVE_DOUBTFULLY_NATIVE;
-       private static PresenceTerm NATIVE_FORMERLY_NATIVE;
-       private static PresenceTerm NATIVE_PRESENCE_QUESTIONABLE;
-       private static PresenceTerm NATIVE;
-       private static PresenceTerm PRESENT;
+       
+       protected static Map<UUID, PresenceTerm> termMap = null;        
+
+       private static final UUID uuidP=UUID.fromString("cef81d25-501c-48d8-bbea-542ec50de2c2");
+       private static final UUID uuidPD=UUID.fromString("75a60279-a4c2-4f53-bc57-466028a4b3db");
+       
+       private static final UUID uuidN=UUID.fromString("ddeac4f2-d8fa-43b8-ad7e-ca13abdd32c7");
+       private static final UUID uuidNQ=UUID.fromString("925662c1-bb10-459a-8c53-da5a738ac770");
+       private static final UUID uuidND=UUID.fromString("310373bf-7df4-4d02-8cb3-bcc7448805fc");
+       private static final UUID uuidC=UUID.fromString("9eb99fe6-59e2-4445-8e6a-478365bd0fa9");
+       private static final UUID uuidI=UUID.fromString("643cf9d1-a5f1-4622-9837-82ef961e880b");
+       private static final UUID uuidIQ=UUID.fromString("83eb0aa0-1a45-495a-a3ca-bf6958b74366");
+       private static final UUID uuidID=UUID.fromString("0c54761e-4887-4788-9dfa-7190c88746e3");
+       private static final UUID uuidIP=UUID.fromString("da159544-b0dd-4599-a9c9-640826af8c17");
+       private static final UUID uuidIA=UUID.fromString("42946bd6-9c22-45ad-a910-7427e8f60bfd");
+       private static final UUID uuidIN=UUID.fromString("e191e89a-a751-4b0c-b883-7f1de70915c9");
+       private static final UUID uuidIC=UUID.fromString("fac8c347-8262-44a1-b0a4-db4de451c021");
+       private static final UUID uuidE=UUID.fromString("c3ee7048-15b7-4be1-b687-9ce9c1a669d6");
+       private static final UUID uuidNA=UUID.fromString("4e04990a-66fe-4fdf-856c-f40772fbcf0a");
+       private static final UUID uuidIV=UUID.fromString("dc536e3d-a753-4bbe-a386-dd8aff35c234");
+
 
        //********* METHODS **************************************/
-       /** 
-        * Creates a new empty presence term.
-        * 
-        * @see #NewInstance(String, String, String)
-        */
-       public static PresenceTerm NewInstance(){
-               return new PresenceTerm();
+       /** \r
+        * Creates a new empty presence term.\r
+        * \r
+        * @see #NewInstance(String, String, String)\r
+        */\r
+       public static PresenceTerm NewInstance(){\r
+               return new PresenceTerm();\r
        }
 
        /** 
@@ -110,92 +115,120 @@ public class PresenceTerm extends PresenceAbsenceTermBase<PresenceTerm> {
                super(term, label, labelAbbrev);
        }
 
-       private static final UUID uuidP=UUID.fromString("cef81d25-501c-48d8-bbea-542ec50de2c2");
-       private static final UUID uuidN=UUID.fromString("ddeac4f2-d8fa-43b8-ad7e-ca13abdd32c7");
-       private static final UUID uuidNQ=UUID.fromString("925662c1-bb10-459a-8c53-da5a738ac770");
-       private static final UUID uuidNE=UUID.fromString("8ad9e9df-49cd-4b6a-880b-51ec4de4ce32");
-       private static final UUID uuidND=UUID.fromString("310373bf-7df4-4d02-8cb3-bcc7448805fc");
-       private static final UUID uuidNF=UUID.fromString("4ba212ef-041e-418d-9d43-2ebb191b61d8");
-       private static final UUID uuidC=UUID.fromString("9eb99fe6-59e2-4445-8e6a-478365bd0fa9");
-       private static final UUID uuidCF=UUID.fromString("b47f1679-0d0c-4ea7-a2e4-80709ea791c6");
-       private static final UUID uuidI=UUID.fromString("643cf9d1-a5f1-4622-9837-82ef961e880b");
-       private static final UUID uuidIQ=UUID.fromString("83eb0aa0-1a45-495a-a3ca-bf6958b74366");
-       private static final UUID uuidIE=UUID.fromString("2522c527-e488-45d4-87df-a5a5ef0fdbbd");
-       private static final UUID uuidID=UUID.fromString("0c54761e-4887-4788-9dfa-7190c88746e3");
-       private static final UUID uuidIP=UUID.fromString("da159544-b0dd-4599-a9c9-640826af8c17");
-       private static final UUID uuidIA=UUID.fromString("42946bd6-9c22-45ad-a910-7427e8f60bfd");
-       private static final UUID uuidIN=UUID.fromString("e191e89a-a751-4b0c-b883-7f1de70915c9");
-       private static final UUID uuidIF=UUID.fromString("826239f7-45b7-42b5-857c-c1f852cfad6b");
-       private static final UUID uuidIC=UUID.fromString("fac8c347-8262-44a1-b0a4-db4de451c021");
-       private static final UUID uuidE=UUID.fromString("c3ee7048-15b7-4be1-b687-9ce9c1a669d6");
 
        
-       //TODO Marc: Kannst du die noch ein bischen sch�ner formatieren, wenn du sie dokumentierst? Danke
-       public static final PresenceTerm PRESENT(){return PRESENT; } 
-       public static final PresenceTerm NATIVE(){return NATIVE; } 
-       public static final PresenceTerm NATIVE_PRESENCE_QUESTIONABLE(){return NATIVE_PRESENCE_QUESTIONABLE; }
-       public static final PresenceTerm NATIVE_FORMERLY_NATIVE(){return NATIVE_FORMERLY_NATIVE; }
-       public static final PresenceTerm NATIVE_DOUBTFULLY_NATIVE(){return NATIVE_DOUBTFULLY_NATIVE; }
-       public static final PresenceTerm NATIVE_REPORTED_IN_ERROR(){return NATIVE_REPORTED_IN_ERROR; }
-       public static final PresenceTerm CULTIVATED(){return CULTIVATED; }
-       public static final PresenceTerm CULTIVATED_REPORTED_IN_ERROR(){return CULTIVATED_REPORTED_IN_ERROR; }
-       public static final PresenceTerm INTRODUCED(){return INTRODUCED; }
-       public static final PresenceTerm INTRODUCED_PRESENCE_QUESTIONABLE(){return INTRODUCED_PRESENCE_QUESTIONABLE; }
-       public static final PresenceTerm INTRODUCED_FORMERLY_INTRODUCED(){return INTRODUCED_FORMERLY_INTRODUCED; }
-       public static final PresenceTerm INTRODUCED_DOUBTFULLY_INTRODUCED(){return INTRODUCED_DOUBTFULLY_INTRODUCED; } 
-       public static final PresenceTerm INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION(){return INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION; }
-       public static final PresenceTerm INTRODUCED_ADVENTITIOUS(){return INTRODUCED_ADVENTITIOUS; } 
-       public static final PresenceTerm INTRODUCED_CULTIVATED(){return INTRODUCED_CULTIVATED; } 
-       public static final PresenceTerm INTRODUCED_NATURALIZED(){return INTRODUCED_NATURALIZED; }
-       public static final PresenceTerm INTRODUCED_REPORTED_IN_ERROR(){return INTRODUCED_REPORTED_IN_ERROR; } 
-       public static final PresenceTerm ENDEMIC_FOR_THE_RELEVANT_AREA(){return ENDEMIC_FOR_THE_RELEVANT_AREA; } 
+//******************************* STATIC METHODS *****************************************
+       
+       protected static PresenceTerm getTermByUuid(UUID uuid){\r
+               if (termMap == null){\r
+                       return null;\r
+               }else{\r
+                       return (PresenceTerm)termMap.get(uuid);\r
+               }\r
+       }
 
-       public static PresenceTerm getPresenceTermByAbbreviation(String abbrev) { 
+       
+       public static final PresenceTerm PRESENT(){
+               return getTermByUuid(uuidP);
+       }
+       public static final PresenceTerm PRESENT_DOUBTFULLY(){
+               return getTermByUuid(uuidPD);
+       }
+       public static final PresenceTerm CULTIVATED(){
+               return getTermByUuid(uuidC);
+       }
+       public static final PresenceTerm ENDEMIC_FOR_THE_RELEVANT_AREA(){
+               return getTermByUuid(uuidE);
+       }
+               public static final PresenceTerm INTRODUCED(){
+               return getTermByUuid(uuidI);
+       }
+               public static final PresenceTerm INTRODUCED_ADVENTITIOUS(){
+               return getTermByUuid(uuidIA);
+       }
+
+       public static final PresenceTerm INTRODUCED_CULTIVATED(){
+               return getTermByUuid(uuidIC);
+       }
 
+       public static final PresenceTerm INTRODUCED_DOUBTFULLY_INTRODUCED(){
+               return getTermByUuid(uuidID);
+       }
+
+       public static final PresenceTerm INTRODUCED_NATURALIZED(){
+               return getTermByUuid(uuidIN);
+       }
+
+       public static final PresenceTerm INTRODUCED_PRESENCE_QUESTIONABLE(){
+               return getTermByUuid(uuidIQ);
+       }
+
+       public static final PresenceTerm INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION(){
+               return getTermByUuid(uuidIP);
+       }
+
+       public static final PresenceTerm NATIVE(){
+               return getTermByUuid(uuidN);
+       }
+
+       public static final PresenceTerm NATIVE_DOUBTFULLY_NATIVE(){
+               return getTermByUuid(uuidND);
+       }
+       
+       public static final PresenceTerm NATIVE_PRESENCE_QUESTIONABLE(){
+               return getTermByUuid(uuidNQ);
+       }
+       
+       public static final PresenceTerm INVASIVE(){
+               return getTermByUuid(uuidIV);
+       }
+       
+       public static final PresenceTerm NATURALISED(){
+               return getTermByUuid(uuidNA);
+       }
+       
+       //TODO read from label(abbrevs) like in TDWGArea
+       public static PresenceTerm getPresenceTermByAbbreviation(String abbrev) { 
                if (abbrev == null) { throw new NullPointerException("abbrev is 'null' in getPresenceTermByAbbreviation");
                } else if (abbrev.equalsIgnoreCase("c"))  { return PresenceTerm.CULTIVATED();
-               } else if (abbrev.equalsIgnoreCase("cf")) { return PresenceTerm.CULTIVATED_REPORTED_IN_ERROR();
                } else if (abbrev.equalsIgnoreCase("e"))  { return PresenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA();
                } else if (abbrev.equalsIgnoreCase("i"))  { return PresenceTerm.INTRODUCED();
                } else if (abbrev.equalsIgnoreCase("ia")) { return PresenceTerm.INTRODUCED_ADVENTITIOUS();
                } else if (abbrev.equalsIgnoreCase("ic")) { return PresenceTerm.INTRODUCED_CULTIVATED();
                } else if (abbrev.equalsIgnoreCase("id")) { return PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED();
-               } else if (abbrev.equalsIgnoreCase("ie")) { return PresenceTerm.INTRODUCED_FORMERLY_INTRODUCED();
-               } else if (abbrev.equalsIgnoreCase("if")) { return PresenceTerm.INTRODUCED_REPORTED_IN_ERROR();
                } else if (abbrev.equalsIgnoreCase("in")) { return PresenceTerm.INTRODUCED_NATURALIZED();
                } else if (abbrev.equalsIgnoreCase("ip")) { return PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();
                } else if (abbrev.equalsIgnoreCase("iq")) { return PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE();
                } else if (abbrev.equalsIgnoreCase("n"))  { return PresenceTerm.NATIVE();
                } else if (abbrev.equalsIgnoreCase("nd")) { return PresenceTerm.NATIVE_DOUBTFULLY_NATIVE();
-               } else if (abbrev.equalsIgnoreCase("ne")) { return PresenceTerm.NATIVE_FORMERLY_NATIVE();
-               } else if (abbrev.equalsIgnoreCase("nf")) { return PresenceTerm.NATIVE_REPORTED_IN_ERROR();
                } else if (abbrev.equalsIgnoreCase("nq")) { return PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();
                } else if (abbrev.equalsIgnoreCase("p"))  { return PresenceTerm.PRESENT();
+               } else if (abbrev.equalsIgnoreCase("na"))  { return PresenceTerm.NATURALISED();
+               } else if (abbrev.equalsIgnoreCase("iv"))  { return PresenceTerm.INVASIVE();
                } else {
                        logger.warn("Unknown presence status term: " + abbrev);
                        return null;
                }
        }
 
+//************************** METHODS ********************************
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#resetTerms()
+        */
+       @Override
+       public void resetTerms(){
+               termMap = null;
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#setDefaultTerms(eu.etaxonomy.cdm.model.common.TermVocabulary)
+        */
        @Override
        protected void setDefaultTerms(TermVocabulary<PresenceTerm> termVocabulary) {
-               PresenceTerm.CULTIVATED = termVocabulary.findTermByUuid(PresenceTerm.uuidC);
-               PresenceTerm.CULTIVATED_REPORTED_IN_ERROR = termVocabulary.findTermByUuid(PresenceTerm.uuidCF);
-               PresenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA = termVocabulary.findTermByUuid(PresenceTerm.uuidE);
-               PresenceTerm.INTRODUCED = termVocabulary.findTermByUuid(PresenceTerm.uuidI);
-               PresenceTerm.INTRODUCED_ADVENTITIOUS = termVocabulary.findTermByUuid(PresenceTerm.uuidIA);
-               PresenceTerm.INTRODUCED_CULTIVATED = termVocabulary.findTermByUuid(PresenceTerm.uuidIC);
-               PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED = termVocabulary.findTermByUuid(PresenceTerm.uuidID);
-               PresenceTerm.INTRODUCED_FORMERLY_INTRODUCED = termVocabulary.findTermByUuid(PresenceTerm.uuidIE);
-               PresenceTerm.INTRODUCED_NATURALIZED = termVocabulary.findTermByUuid(PresenceTerm.uuidIN);
-               PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE = termVocabulary.findTermByUuid(PresenceTerm.uuidIQ);
-               PresenceTerm.INTRODUCED_REPORTED_IN_ERROR = termVocabulary.findTermByUuid(PresenceTerm.uuidIF);
-               PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION = termVocabulary.findTermByUuid(PresenceTerm.uuidIP);
-               PresenceTerm.NATIVE = termVocabulary.findTermByUuid(PresenceTerm.uuidN);
-               PresenceTerm.NATIVE_DOUBTFULLY_NATIVE = termVocabulary.findTermByUuid(PresenceTerm.uuidND);
-               PresenceTerm.NATIVE_FORMERLY_NATIVE = termVocabulary.findTermByUuid(PresenceTerm.uuidNE);
-               PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE = termVocabulary.findTermByUuid(PresenceTerm.uuidNQ);
-               PresenceTerm.NATIVE_REPORTED_IN_ERROR = termVocabulary.findTermByUuid(PresenceTerm.uuidNF);
-               PresenceTerm.PRESENT = termVocabulary.findTermByUuid(PresenceTerm.uuidP);               
+               termMap = new HashMap<UUID, PresenceTerm>();
+               for (PresenceTerm term : termVocabulary.getTerms()){
+                       termMap.put(term.getUuid(), (PresenceTerm)term);  //TODO casting
+               }
        }
 }
\ No newline at end of file