more tests and features for #476: Implement free-text search methods for TaxonBase...
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / description / State.java
index 4868e09a42b32b39883c4e6f15383b87c03c22ef..9200214b1c48d15aee0c597a872017914091f6e4 100644 (file)
 package eu.etaxonomy.cdm.model.description;
 
 
-import eu.etaxonomy.cdm.model.common.OrderedTermBase;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.persistence.Entity;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
 
 import org.apache.log4j.Logger;
+import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Indexed;
 
-import java.util.*;
-import javax.persistence.*;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.OrderedTermBase;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 
 /**
+ * This class represents terms describing different states (like "oval" or
+ * "triangular") for {@link Feature features} that can be described with
+ * categorical values (like for instance shapes).
+ * 
  * @author m.doering
  * @version 1.0
  * @created 08-Nov-2007 13:06:53
  */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "State")
+@XmlRootElement(name = "State")
 @Entity
-public class State extends OrderedTermBase {
-       static Logger logger = Logger.getLogger(State.class);
+@Indexed(index = "eu.etaxonomy.cdm.model.common.DefinedTermBase")
+@Audited
+public class State extends OrderedTermBase<State> {
+       private static final long serialVersionUID = -4816292463790262516L;
+       @SuppressWarnings("unused")
+       private static final Logger logger = Logger.getLogger(State.class);
 
+       protected static Map<UUID, State> termMap = null;       
+       
+       // ************* CONSTRUCTORS *************/    
+       /** 
+        * Class constructor: creates a new empty state.
+        * 
+        * @see #State(String, String, String)
+        */
        public State() {
-               super();
-               // TODO Auto-generated constructor stub
        }
 
-       public State(String term, String label) {
-               super(term, label);
-               // TODO Auto-generated constructor stub
+       /** 
+        * Class constructor: creates a new state with a description (in the {@link Language#DEFAULT() default language}),
+        * a label and a label abbreviation.
+        * 
+        * @param       term             the string (in the default language) describing the
+        *                                               new state to be created 
+        * @param       label            the string identifying the new state to be created
+        * @param       labelAbbrev  the string identifying (in abbreviated form) the
+        *                                               new state to be created
+        * @see                                  #State()
+        */
+       public State(String term, String label, String labelAbbrev) {
+               super(term, label, labelAbbrev);
+       }
+       
+       //********* METHODS **************************************/
+       /** 
+        * Creates a new empty state.
+        * 
+        * @see #NewInstance(String, String, String)
+        */
+       public static State NewInstance(){
+               return new State();
        }
        
+       /** 
+        * Creates a new state with a description (in the {@link Language#DEFAULT() default language}),
+        * a label and a label abbreviation.
+        * 
+        * @param       term             the string (in the default language) describing the
+        *                                               new state to be created 
+        * @param       label            the string identifying the new state to be created
+        * @param       labelAbbrev  the string identifying (in abbreviated form) the
+        *                                               new state to be created
+        * @see                                  #NewInstance()
+        */
+       public static State NewInstance(String term, String label, String labelAbbrev){
+               return new State(term, label, labelAbbrev);
+       }
+
+//************************** METHODS ********************************
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#resetTerms()
+        */
+       @Override
+       public void resetTerms(){
+               termMap = null;
+       }
+
+       
+       @Override
+       protected void setDefaultTerms(TermVocabulary<State> termVocabulary){
+               termMap = new HashMap<UUID, State>();
+               for (State term : termVocabulary.getTerms()){
+                       termMap.put(term.getUuid(), term); 
+               }
+       }
 
 }
\ No newline at end of file