}
}
- CdmBase loadedCdmBase;
+ T loadedCdmBase;
if(isRecursiveEnabled && recursive) {
logger.debug("---- starting recursive load for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId());
List<Object> alreadyVisitedEntities = new ArrayList<Object>();
- CdmBase cb = loadRecursive(cdmEntity, alreadyVisitedEntities, update);
+ T cb = loadRecursive(cdmEntity, alreadyVisitedEntities, update);
alreadyVisitedEntities.clear();
logger.debug("---- ending recursive load for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId() + "\n");
loadedCdmBase = cb;
} else {
loadedCdmBase = load(cdmEntity);
}
- return (T) loadedCdmBase;
+ return loadedCdmBase;
}
- protected CdmBase load(CdmBase cdmEntity) {
+ protected <T extends CdmBase> T load(T cdmEntity) {
logger.debug("loading object of type " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId());
cdmCacher.put((CdmBase)ProxyUtils.deproxy(cdmEntity));
return cdmCacher.getFromCache(cdmEntity);
* them to the value of the cdm entity being loaded
* @return
*/
- private CdmBase loadRecursive(CdmBase cdmEntity, List<Object> alreadyVisitedEntities, boolean update) {
+ private <T extends CdmBase> T loadRecursive(T cdmEntity, List<Object> alreadyVisitedEntities, boolean update) {
- CdmBase cachedCdmEntity = load(cdmEntity);
+ T cachedCdmEntity = load(cdmEntity);
// we want to recursive through the cdmEntity (and not the cachedCdmEntity)
// since there could be new or deleted objects in the cdmEntity sub-graph
// start by getting the fields from the cdm entity
- CdmBase deproxiedEntity = (CdmBase)ProxyUtils.deproxyOrNull(cdmEntity);
+ //TODO improve generics for deproxyOrNull, probably need to split the method
+ T deproxiedEntity = (T)ProxyUtils.deproxyOrNull(cdmEntity);
if(deproxiedEntity != null){
String className = deproxiedEntity.getClass().getName();
CdmModelFieldPropertyFromClass cmgmfc = getFromCdmlibModelCache(className);
import eu.etaxonomy.cdm.model.common.CdmBase;
-public class CdmEntityCacheKey {
+public class CdmEntityCacheKey<T extends CdmBase> {
- private Class<? extends CdmBase> persistenceClass;
+ private Class<T> persistenceClass;
private int persistenceId;
-
- public CdmEntityCacheKey(CdmBase cdmBase) {
- this.persistenceClass = cdmBase.getClass();
+
+
+ public CdmEntityCacheKey(T cdmBase) {
+ this.persistenceClass = (Class<T>)cdmBase.getClass();
this.persistenceId = cdmBase.getId();
}
-
- public CdmEntityCacheKey(Class<? extends CdmBase> clazz, int id) {
+
+ public CdmEntityCacheKey(Class<T> clazz, int id) {
this.persistenceClass = clazz;
this.persistenceId = id;
}
-
-
- public Class<? extends CdmBase> getPersistenceClass() {
+
+
+ public Class<? extends T> getPersistenceClass() {
return persistenceClass;
}
-
+
public int getPersistenceId() {
return persistenceId;
}
if(obj == null || !(obj instanceof CdmEntityCacheKey)) {
return false;
}
-
+
if(this == obj) {
return true;
}
- CdmEntityCacheKey that = (CdmEntityCacheKey) obj;
+ CdmEntityCacheKey<T> that = (CdmEntityCacheKey<T>) obj;
if(this.persistenceClass.equals(that.persistenceClass) && this.persistenceId == that.persistenceId) {
return true;
}
-
+
return false;
}
-
+
@Override
public int hashCode() {
return (this.persistenceClass.getName() + String.valueOf(this.persistenceId)).hashCode();
}
-
+
@Override
public String toString() {
return this.persistenceClass.getName() + String.valueOf(this.persistenceId);
logger.info("Cdm Entity with id : " + cdmEntity.getId() + " already exists in permanent cache. Ignoring put.");
return;
}
- CdmEntityCacheKey id = new CdmEntityCacheKey(cdmEntity);
+ CdmEntityCacheKey<?> id = new CdmEntityCacheKey<>(cdmEntity);
cachedCdmEntity = getFromCache(id);
if(cachedCdmEntity == null) {
}
- private Element getCacheElement(CdmEntityCacheKey key) {
+ private Element getCacheElement(CdmEntityCacheKey<?> key) {
return getCache().get(key);
}
- public CdmBase getFromCache(CdmEntityCacheKey id) {
+ public <T extends CdmBase> T getFromCache(CdmEntityCacheKey<T> id) {
Element e = getCacheElement(id);
if (e == null) {
return null;
} else {
- return (CdmBase) e.getObjectValue();
+ @SuppressWarnings("unchecked")
+ T result = (T) e.getObjectValue();
+ return result;
}
}
- public CdmBase getFromCache(Class<? extends CdmBase> clazz, int id) {
- CdmEntityCacheKey cacheId = generateKey(clazz,id);
+ public <T extends CdmBase> T getFromCache(Class<T> clazz, int id) {
+ CdmEntityCacheKey<T> cacheId = generateKey(clazz, id);
return getFromCache(cacheId);
}
@Override
public <T extends CdmBase> T getFromCache(T cdmBase) {
- CdmEntityCacheKey cacheId = generateKey((CdmBase)ProxyUtils.deproxy(cdmBase));
+ CdmEntityCacheKey<T> cacheId = generateKey((T)ProxyUtils.deproxy(cdmBase));
// first try this cache
- CdmBase cachedCdmEntity = getFromCache(cacheId);
+ T cachedCdmEntity = getFromCache(cacheId);
if(cachedCdmEntity == null) {
// ... then try the permanent cache
- cachedCdmEntity = cdmCacher.getFromCache(cdmBase.getUuid());
+ //TODO also use generics and clazz parameter for getFromCache(uuid)
+ cachedCdmEntity = (T)cdmCacher.getFromCache(cdmBase.getUuid());
}
- return (T) cachedCdmEntity;
+ return cachedCdmEntity;
}
public CdmBase getFromCache(CdmBase cdmBase, Class<? extends CdmBase> clazz) {
return entities;
}
- public boolean exists(CdmEntityCacheKey key) {
+ public boolean exists(CdmEntityCacheKey<?> key) {
return (getCacheElement(key) != null);
}
- public boolean existsAndIsNotNull(CdmEntityCacheKey id) {
+ public boolean existsAndIsNotNull(CdmEntityCacheKey<?> id) {
return getFromCache(id) != null;
}
}
- public static CdmEntityCacheKey generateKey(Class<? extends CdmBase> clazz, int id) {
- return new CdmEntityCacheKey(clazz, id);
+ public static <T extends CdmBase> CdmEntityCacheKey<T> generateKey(Class<T> clazz, int id) {
+ return new CdmEntityCacheKey<T>(clazz, id);
}
- public static CdmEntityCacheKey generateKey(CdmBase cdmBase) {
- Class<? extends CdmBase> entityClass = cdmBase.getClass();
+ public static <T extends CdmBase> CdmEntityCacheKey<T> generateKey(T cdmBase) {
+ Class<T> entityClass = (Class<T>)cdmBase.getClass();
int id = cdmBase.getId();
- return new CdmEntityCacheKey(entityClass, id);
+ return new CdmEntityCacheKey<T>(entityClass, id);
}
@Override