Merge branch 'release/4.7.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / cdm / api / cache / CdmServiceCacher.java
index 288b20eb1310bbca841295655c6be1ea98bd233c..5365fe2805e42671048e28c75e8a5cfce2b88c14 100644 (file)
@@ -1,15 +1,16 @@
 package eu.etaxonomy.cdm.api.cache;
 
+import java.io.File;
 import java.util.UUID;
 
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.config.SizeOfPolicyConfiguration;
-
 import org.springframework.stereotype.Component;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.api.config.EhCacheConfiguration;
+import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermBase;
 import eu.etaxonomy.taxeditor.remoting.cache.CacheLoader;
 import eu.etaxonomy.taxeditor.remoting.cache.CdmEntityCacheKey;
 import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
@@ -18,11 +19,14 @@ import eu.etaxonomy.taxeditor.session.CdmEntitySession;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver;
+import net.sf.ehcache.config.CacheConfiguration;
+import net.sf.ehcache.config.DiskStoreConfiguration;
+import net.sf.ehcache.config.SizeOfPolicyConfiguration;
 
 /**
  * Class which uses CDM services to cache cdm entities
  *
- * FIXME: Currently only handles terms entities. It would be
+ * FIXME: Currently only handles term entities. It would be
  *        interesting to have a generic method which finds the
  *        correct service to load / cache the entity.
  *
@@ -30,9 +34,8 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver;
  *
  * @param <T>
  */
-@Component
-public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionManagerObserver {
-
+@Component //FIXME This indicates that the CdmServiceCacher is initialized as Spring Component but it seems only to be instantiated directly
+public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionManagerObserver {
 
 
     private ICdmEntitySessionManager cdmEntitySessionManager;
@@ -43,11 +46,35 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
 
     @Override
     protected void setup() {
+
+        setUpCacheManager();
+
         DefinedTermBase.setCacher(this);
         CdmTransientEntityCacher.setDefaultCacher(this);
         TermServiceRequestExecutor.setDefaultCacher(this);
 
         cacheLoader = new CacheLoader(this);
+
+    }
+
+
+    /**
+     *
+     */
+    private void setUpCacheManager() {
+
+        EhCacheConfiguration cacheConfig = new EhCacheConfiguration();
+
+        DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
+        File ehcacheFolder = CdmUtils.getCdmSubDir("taxeditor-ehcache");
+        // FIXME use subfolder per taxeditor version to allow running multiple installations in parallel
+        // String taxEditorVersion = ..;
+        // File ehcacheFolder = new File(ehcacheFolder, taxEditorVersion);
+        diskStoreConfiguration.setPath(ehcacheFolder.getAbsolutePath());
+
+        cacheConfig.setDiskStoreConfiguration(diskStoreConfiguration);
+        addCacheManager(cacheConfig.cacheManager());
+
     }
 
 
@@ -74,12 +101,10 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
         return load(term);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.model.ICdmCacher#isCachable(eu.etaxonomy.cdm.model.common.CdmBase)
-     */
     @Override
     public boolean isCachable(CdmBase cdmEntity) {
-        if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
+     //   if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
+          if(cdmEntity != null && cdmEntity instanceof TermBase) {
             return true;
         }
         return false;
@@ -121,10 +146,6 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
         return cachedCdmEntity;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.cache.CdmCacher#load(eu.etaxonomy.cdm.model.common.CdmBase)
-     */
     @Override
     public CdmBase load(CdmBase cdmEntity) {
         CdmBase cachedCdmEntity = getFromCache(cdmEntity.getUuid());
@@ -135,9 +156,6 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
         return cachedCdmEntity;
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver#changed()
-     */
     @Override
     public void changed() {
         ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession();