Added listByReferenceTitle() to search in 'title'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / IdentifiableServiceBase.java
index 8a9fe17bc7338bffd7ee4b761008d6ccf2787312..a80ac51fbb53e2112a4d58e321b9a0b4564a2a2c 100644 (file)
@@ -134,6 +134,28 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
                  return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
        }
        
+       @Transactional(readOnly = true)
+       public List<T> listByTitle(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
+                               results = dao.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths); 
+                }
+                return results;
+       }
+
+       @Transactional(readOnly = true)
+       public List<T> listByReferenceTitle(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
+                               results = dao.findByReferenceTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths); 
+                }
+                return results;
+       }
+       
        @Transactional(readOnly = true)
        public T find(LSID lsid) {
                return dao.find(lsid);
@@ -182,17 +204,19 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
                                                }
                                        }
                                        entity.setCacheStrategy(entityCacheStrategy);
-                                       //entity.setTitleCache(null);
-                                       setOtherCachesNull(entity); //TODO find better solution
+                                       //TODO this won't work for those classes that always generate the title cache new
                                        String titleCache = entity.getTitleCache();
+                                       setOtherCachesNull(entity); //TODO find better solution
                                        String newTitleCache = entityCacheStrategy.getTitleCache(entity);
-                                       if (titleCache != null && ! titleCache.equals(newTitleCache)){
+                                       if (titleCache == null || titleCache != null && ! titleCache.equals(newTitleCache)){
+                                               entity.setTitleCache(null, false);
                                                entity.getTitleCache();
                                                entitiesToUpdate.add(entity);
                                        }
                                }
                        }
-                       saveOrUpdateAll(list);
+                       saveOrUpdate(entitiesToUpdate);
+                       
                }
        }