-// $Id$
/**
* Copyright (C) 2014 EDIT
* European Distributed Institute of Taxonomy
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;
}
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();
// }
-
- /* (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
// }
}
-
@Override
public void bind() {
logger.info("Binding session with owner " + sessionOwner.toString());
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);
// 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) {
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) {
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();
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();
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