adding Gazetteer to ReferenceSystem
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / location / ReferenceSystem.java
index fbf5766eb5db7fb11d62ec2df023f6e82d2e8e29..04411b4dde986157bf56ba03ceaf26f220667df8 100644 (file)
 package eu.etaxonomy.cdm.model.location;
 
 
 package eu.etaxonomy.cdm.model.location;
 
 
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+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.apache.log4j.Logger;
-import javax.persistence.*;
+import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Indexed;
+
+import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 
 /**
  * Reference systems for coordinates also according to OGC (Open Geographical
 
 /**
  * Reference systems for coordinates also according to OGC (Open Geographical
- * Consosrtium) The list should be extensible at runtime through configuration.
+ * Consortium) The list should be extensible at runtime through configuration.
  * This needs to be investigated.
  * @author m.doering
  * @version 1.0
  * @created 08-Nov-2007 13:06:49
  */
  * This needs to be investigated.
  * @author m.doering
  * @version 1.0
  * @created 08-Nov-2007 13:06:49
  */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ReferenceSystem")
+@XmlRootElement(name = "ReferenceSystem")
 @Entity
 @Entity
-public class ReferenceSystem extends DefinedTermBase {
-       static Logger logger = Logger.getLogger(ReferenceSystem.class);
+@Indexed(index = "eu.etaxonomy.cdm.model.common.DefinedTermBase")
+@Audited
+public class ReferenceSystem extends DefinedTermBase<ReferenceSystem> {
+       private static final long serialVersionUID = -9060720949197749047L;
+
+       @SuppressWarnings("unused")
+       private static final Logger logger = Logger.getLogger(ReferenceSystem.class);
+
+       protected static Map<UUID, ReferenceSystem> termMap = null;             
+
+       private static final UUID uuidWGS84 = UUID.fromString("63f4dd55-00fa-49e7-96fd-2b7059a1c1ee");
+       private static final UUID uuidGoogleEarth = UUID.fromString("1bb67042-2814-4b09-9e76-c8c1e68aa281");
+       private static final UUID uuidGazetteer = UUID.fromString("e35f1d1c-9347-4190-bd47-a3b00632fcf3");
+       private static final UUID uuidMap = UUID.fromString("6d72d148-458a-42eb-97b0-9824abcffc91");
+       
+       /**
+        * Factory method
+        * @return
+        */
+       public static ReferenceSystem NewInstance(){
+               return new ReferenceSystem();
+       }
 
        /**
         * Factory method
         * @return
         */
 
        /**
         * Factory method
         * @return
         */
-       public static ReferenceSystem NewInstance(String term, String label){
-               return new ReferenceSystem(term, label);
+       public static ReferenceSystem NewInstance(String term, String label, String labelAbbrev){
+               return new ReferenceSystem(term, label, labelAbbrev);
+       }
+       
+//********************************** Constructor *******************************************************************/  
+
+       //for hibernate use only
+       @Deprecated
+       protected ReferenceSystem() {
+               super(TermType.ReferenceSystem);
        }
        
        /**
         * Constructor
         */
        }
        
        /**
         * Constructor
         */
-       public ReferenceSystem(String term, String label) {
-               super(term, label);
+       private ReferenceSystem(String term, String label, String labelAbbrev) {
+               super(TermType.ReferenceSystem, term, label, labelAbbrev);
+       }
+
+// ************************************* MTEHODS ***************************************************/  
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.DefinedTermBase#resetTerms()
+        */
+       @Override
+       public void resetTerms(){
+               termMap = null;
        }
 
        }
 
+       
 
 
+       protected static ReferenceSystem getTermByUuid(UUID uuid){
+               if (termMap == null){
+                       DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
+                       vocabularyStore.initialize();
+               }
+               return (ReferenceSystem)termMap.get(uuid);
+       }
+       
        public static final ReferenceSystem WGS84(){
        public static final ReferenceSystem WGS84(){
-               logger.warn("not yet implemented");
-               return null;
+               return getTermByUuid(uuidWGS84);
+       }
+       
+       public static final ReferenceSystem GOOGLE_EARTH(){
+               return getTermByUuid(uuidGoogleEarth);
+       }
+
+       public static final ReferenceSystem GAZETTEER(){
+               return getTermByUuid(uuidGazetteer);
+       }
+
+       public static final ReferenceSystem MAP(){
+               return getTermByUuid(uuidMap);
+       }
+       
+       @Override
+       protected void setDefaultTerms(TermVocabulary<ReferenceSystem> termVocabulary){
+               termMap = new HashMap<UUID, ReferenceSystem>();
+               for (ReferenceSystem term : termVocabulary.getTerms()){
+                       termMap.put(term.getUuid(), term); 
+               }
        }
 
 }
\ No newline at end of file
        }
 
 }
\ No newline at end of file