import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
import eu.etaxonomy.cdm.strategy.merge.MergeException;
-public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO extends IIdentifiableDao<T>> extends AnnotatableServiceBase<T,DAO>
+public abstract class IdentifiableServiceBase<T extends IdentifiableEntity, DAO extends IIdentifiableDao<T>> extends AnnotatableServiceBase<T,DAO>
implements IIdentifiableEntityService<T>{
@Override
public List<UuidAndTitleCache<T>> getUuidAndTitleCache() {
return dao.getUuidAndTitleCache();
- }\r
+ }
- @Transactional(readOnly = true)\r
+ @Transactional(readOnly = true)
@Override
- public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.countByTitle(clazz, queryString, matchmode, criteria);\r
-\r
- List<T> results = new ArrayList<T>();\r
- if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
- results = dao.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);\r
- }\r
-\r
- return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
+ public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+ Integer numberOfResults = dao.countByTitle(clazz, queryString, matchmode, criteria);
+
+ List<T> results = new ArrayList<T>();
+ if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
+ results = dao.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
+ }
+
+ return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
}
@Transactional(readOnly = true)
* @param entitiesToUpdate
* @param entity
*/
+ @SuppressWarnings("unchecked")
private void updateTitleCacheForSingleEntity(
IIdentifiableEntityCacheStrategy<T> cacheStrategy,
List<T> entitiesToUpdate, T entity) {
- assert (entity.isProtectedTitleCache() == false );
+ //assert (entity.isProtectedTitleCache() == false );
//exclude recursive inreferences
if (entity.isInstanceOf(Reference.class)){
entityCacheStrategy = ReferenceFactory.newReference(((Reference<?>)entity).getType()).getCacheStrategy();
}
}
- entity.setCacheStrategy(entityCacheStrategy);
+
//old titleCache
entity.setProtectedTitleCache(true);
+
String oldTitleCache = entity.getTitleCache();
entity.setTitleCache(oldTitleCache, false); //before we had entity.setProtectedTitleCache(false) but this deleted the titleCache itself
-
+ entity.setCacheStrategy(entityCacheStrategy);
//NonViralNames and Reference have more caches //TODO handle in NameService
String oldNameCache = null;
String oldFullTitleCache = null;
if ( oldTitleCache == null || oldTitleCache != null && ! oldTitleCache.equals(newTitleCache) ){
entity.setTitleCache(null, false);
String newCache = entity.getTitleCache();
+
if (newCache == null){
logger.warn("newCache should never be null");
}
}
-}\r
+}