First commit for the CDM Caching api
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / CdmBaseType.java
index 7dd5f301de6d95f6ac5914f1f0f323983cbd9e2a..f79e1e9cc2666e63acda324fcb4c79a0f6af479f 100644 (file)
 package eu.etaxonomy.cdm.model;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.springframework.beans.factory.config.BeanDefinition;
@@ -47,15 +49,27 @@ public enum CdmBaseType {
 
     private Set<Class<? extends CdmBase>> subClasses;
 
+    static Map<Class<? extends CdmBase>,  Class<? extends CdmBase>> subTypeToBaseTypeMap;
+
     CdmBaseType(Class<? extends CdmBase> baseClass){
         this.baseClass = baseClass;
         try {
             subClasses = subclassesFor(baseClass);
+            updateBaseTypeMap();
         } catch (ClassNotFoundException e) {
             throw new RuntimeException(e);
         }
     }
 
+    private void updateBaseTypeMap(){
+        if(CdmBaseType.subTypeToBaseTypeMap == null){
+            CdmBaseType.subTypeToBaseTypeMap = new HashMap<Class<? extends CdmBase>,  Class<? extends CdmBase>>();
+        }
+        for(Class<? extends CdmBase> subClass : subClasses){
+            CdmBaseType.subTypeToBaseTypeMap.put(subClass, baseClass);
+        }
+    }
+
     public static Set<Class<? extends CdmBase>> subclassesFor(Class<? extends CdmBase> clazz) throws ClassNotFoundException{
 
         Set<Class<? extends CdmBase>> subClasses = new HashSet<Class<? extends CdmBase>>();
@@ -71,6 +85,10 @@ public enum CdmBaseType {
         return subClasses;
     }
 
+    public static Class<? extends CdmBase> baseTypeFor(Class<? extends CdmBase> cdmType){
+        return subTypeToBaseTypeMap.get(cdmType);
+    }
+
     public Set<Class<? extends CdmBase>> getSubClasses() {
         return subClasses;
     }