ref #9359 upgrade TaxEditor to log4j2
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / session / CdmEntitySession.java
index 4bb1c3d58c500ddcd90073e74ba4111fef2be9a8..b3cc56ab767194c3e3f8c7985dfa97b3508b13e3 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
  * Copyright (C) 2014 EDIT
  * European Distributed Institute of Taxonomy
@@ -16,40 +15,39 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
-import net.sf.ehcache.statistics.LiveCacheStatistics;
-
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.api.service.IService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
+import eu.etaxonomy.cdm.cache.CdmTransientEntityCacher;
+//import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
+import eu.etaxonomy.cdm.cache.EntityCacherDebugResult;
 import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
-import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
-
+import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
+import eu.etaxonomy.cdm.persistence.dto.MergeResult;
+import eu.etaxonomy.taxeditor.remoting.cache.ConversationalTransientEntityCacher;
+import net.sf.ehcache.statistics.FlatStatistics;
 
 /**
- *
  * NOTE : It would be nice to have this class performing merge / delete operations
  * using services, but this is only possible if we can 'intelligently'
- * get from a model class to the correspoding service class
+ * get from a model class to the corresponding service class
+ *
  * @author cmathew
  * @date 20 Oct 2014
- *
  */
-
 public class CdmEntitySession implements ICdmEntitySession  {
 
-    private static final Logger logger = Logger.getLogger(CdmEntitySession.class);
+    private static final Logger logger = LogManager.getLogger(CdmEntitySession.class);
 
     private final CdmEntitySessionManager cdmEntitySessionManager;
 
     private final ICdmEntitySessionEnabled sessionOwner;
 
-    private CdmTransientEntityCacher cdmTransientEntityCacher;
+    private ConversationalTransientEntityCacher cdmTransientEntityCacher;
 
     private List<ICdmEntitySessionEnabled> changeObservers;
 
-
     public CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
         this.sessionOwner = sessionOwner;
         this.cdmEntitySessionManager = cdmEntitySessionManager;
@@ -57,41 +55,31 @@ public class CdmEntitySession implements ICdmEntitySession  {
     }
 
     private void init(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
-        this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager);
-        this.changeObservers = new ArrayList<ICdmEntitySessionEnabled>();
+        this.cdmTransientEntityCacher = new ConversationalTransientEntityCacher(sessionOwner);
+        this.changeObservers = new ArrayList<>();
         cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this);
     }
 
-
-
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object, boolean)
-     */
     @Override
     public  <O extends Object> O load(O obj, boolean update) {
         return cdmTransientEntityCacher.load(obj, update);
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.model.common.CdmBase, boolean)
-     */
     @Override
     public  <T extends CdmBase> T load(T cdmBase, boolean update) {
-        return (T)cdmTransientEntityCacher.load(cdmBase, update);
+        return cdmTransientEntityCacher.load(cdmBase, update);
     }
 
-
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
-     */
     @Override
     public UpdateResult load(UpdateResult updateResult, boolean update) {
         return cdmTransientEntityCacher.load(updateResult, update);
     }
 
+    @Override
+    public  <T extends CdmBase> MergeResult<T> load(MergeResult<T> mergeResult, boolean update) {
+        return  cdmTransientEntityCacher.load(mergeResult, update);
+    }
+
     @Override
     public <T extends CdmBase> void  update() {
         Collection<T> rootEntities = getRootEntities();
@@ -126,47 +114,28 @@ public class CdmEntitySession implements ICdmEntitySession  {
 //    }
 
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase)
-     */
     @Override
     public <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase) {
-        return debug(Arrays.asList(cdmBase));
+        return debug(Arrays.asList(cdmBase), true);
     }
 
-
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List)
-     */
     @Override
-    public <T extends CdmBase> EntityCacherDebugResult debug(Collection<T> cdmBases) {
+    public <T extends CdmBase> EntityCacherDebugResult debug(Collection<T> rootEntities, boolean includeIgnored) {
         EntityCacherDebugResult entityCacherDebugResult =
-                new EntityCacherDebugResult(cdmTransientEntityCacher, cdmBases);
+                new EntityCacherDebugResult(cdmTransientEntityCacher, rootEntities, includeIgnored);
         return entityCacherDebugResult;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug()
-     */
     @Override
-    public <T extends CdmBase> EntityCacherDebugResult debug() {
-        return debug(getRootEntities());
+    public <T extends CdmBase> EntityCacherDebugResult debug(boolean includeIgnored) {
+        return debug(getRootEntities(), includeIgnored);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection)
-     */
     @Override
     public  <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
         return cdmTransientEntityCacher.load(cdmBaseList, update);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest()
-     */
     @Override
     public void setEntitiesAsLatest() {
         //FIXME:Remoting need to think more about whether we really need this
@@ -176,7 +145,6 @@ public class CdmEntitySession implements ICdmEntitySession  {
         //             }
     }
 
-
     @Override
     public void bind() {
         logger.info("Binding session with owner " + sessionOwner.toString());
@@ -184,25 +152,16 @@ public class CdmEntitySession implements ICdmEntitySession  {
             init(sessionOwner, cdmEntitySessionManager);
         }
         cdmEntitySessionManager.bind(sessionOwner);
-
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose()
-     */
     @Override
     public void dispose() {
 
         cdmTransientEntityCacher.dispose();
         changeObservers.clear();
         cdmEntitySessionManager.remove(sessionOwner);
-
     }
 
-
-//    /* (non-Javadoc)
-//     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
-//     */
 //    @Override
 //    public void addEvent(ICdmBase cdmBase, Set<CdmBase> affectedObjects, EventType eventType) {
 //        affectedObjects = (Set<CdmBase>) load(affectedObjects, true);
@@ -210,9 +169,15 @@ public class CdmEntitySession implements ICdmEntitySession  {
 //        CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
 //    }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, java.lang.Class)
+    /**
+     *  Returns a persisted entity specified by the <code>uuid</code>
+     *  or null if the entity does not exist,
+     *  loads it to the entityCacher
+     *
+     * @param service
+     * @param uuid
+     *
+     * @return
      */
     @Override
     public  <T extends CdmBase>  T remoteLoad(IService<T> service, UUID uuid) {
@@ -220,9 +185,20 @@ public class CdmEntitySession implements ICdmEntitySession  {
         return load(cdmBase, false);
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.IService, java.util.UUID, java.util.List)
+    /**
+     * Returns the cdm entity specified by the <code>uuid</code>,
+     * recursively initializes all bean properties given in the
+     * <code>propertyPaths</code> parameter,
+     * the loaded entity is also loaded to the entityCache
+     * <p>
+     * For detailed description and examples <b>please refer to:</b>
+     * {@link IBeanInitializer#initialize(Object, List)}
+     *
+     * @param service
+     * @param uuid
+     * @param propertyPath
+     *
+     * @return
      */
     @Override
     public <T extends CdmBase>  T remoteLoad(IService<T> service, UUID uuid, List<String> propertyPaths) {
@@ -230,10 +206,6 @@ public class CdmEntitySession implements ICdmEntitySession  {
         return load(cdmBase, false);
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#save(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase)
-     */
     @Override
     public <T extends CdmBase> UUID remoteSave(IService<T> service, T cdmBase) {
         UUID uuid = service.save(cdmBase).getUuid();
@@ -241,47 +213,27 @@ public class CdmEntitySession implements ICdmEntitySession  {
         return uuid;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase)
-     */
     @Override
     public <T extends CdmBase> T remoteUpdate(IService<T> service, T cdmBase) {
-        T mergedCdmBase = service.merge(cdmBase);
+        T mergedCdmBase = service.merge(cdmBase, true).getMergedEntity();
         return mergedCdmBase;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#isActive()
-     */
     @Override
     public boolean isActive() {
         return cdmEntitySessionManager.getActiveSession() == this;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getOwner()
-     */
     @Override
     public ICdmEntitySessionEnabled getOwner() {
         return sessionOwner;
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getNoOfObjectsInCache()
-     */
     @Override
-    public LiveCacheStatistics getCacheStatistics() {
+    public FlatStatistics getCacheStatistics() {
         return cdmTransientEntityCacher.getCacheStatistics();
     }
 
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getRootEntities()
-     */
     @Override
     public <T extends CdmBase> Collection<T> getRootEntities() {
         return sessionOwner.getRootEntities();
@@ -300,12 +252,11 @@ public class CdmEntitySession implements ICdmEntitySession  {
         return propertyPathsMap.get(obj);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addNewCdmEntity(eu.etaxonomy.cdm.model.common.CdmBase)
-     */
+    //this method is called by DefaultNewEntityListener whenever
+    //a new entity is created (constructor call) while the current
+    //session is active
     @Override
     public void addNewCdmEntity(CdmBase newEntity) {
-        cdmTransientEntityCacher.addNewEntity(newEntity);
+        cdmTransientEntityCacher.load(newEntity);
     }
-
-}
+}
\ No newline at end of file