getUuidAndTitleCache for namedAreas with voc restriction
authorKatja Luther <k.luther@bgbm.org>
Wed, 24 Apr 2019 08:47:44 +0000 (10:47 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 24 Apr 2019 08:48:41 +0000 (10:48 +0200)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/term/DefinedTermDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/term/IDefinedTermDao.java

index f5f791a2d9923283e7cdce2ec898211d532a10b9..715d8787a923fc13860dbcf8546320652d38d9ca 100644 (file)
@@ -25,6 +25,8 @@ import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Disjunction;
+import org.hibernate.criterion.Order;
 import org.hibernate.criterion.Projections;
 import org.hibernate.criterion.Restrictions;
 import org.hibernate.envers.query.AuditEntity;
@@ -68,6 +70,7 @@ import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
+
 /**
  * @author a.kohlbecker
  * @since 29.05.2008
@@ -640,15 +643,74 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase<DefinedTermBase> imp
 
 
     @Override
-    public List<NamedArea> getUuidAndTitleCache(List<TermVocabulary> vocs, Integer limit, String pattern){
+    public List<NamedArea> getUuidAndTitleCache(List<TermVocabulary> vocs, Integer pageNumber, Integer limit, String pattern, MatchMode matchmode){
+        Session session = getSession();
+//        Query query = null;
+//        if (pattern != null){
+//            if (vocs != null && !vocs.isEmpty()){
+//                query = session.createQuery("from NamedArea where titleCache like :pattern and vocabulary in :vocs ORDER BY titleCache");
+//                query.setParameterList("vocs", vocs);
+//            }else{
+//                query = session.createQuery("from NamedArea where titleCache like :pattern ORDER BY titleCache");
+//            }
+//            pattern = pattern.replace("*", "%");
+//            pattern = pattern.replace("?", "_");
+//            pattern = pattern + "%";
+//            query.setParameter("pattern", pattern);
+//
+//        } else {
+//            query = session.createQuery("FROM NamedArea WHERE vocabulary IN :vocs ORDER BY titleCache");
+//            query.setParameterList("vocs", vocs);
+//        }
+//        if (limit != null && limit > 0){
+//           query.setMaxResults(limit);
+//        }
+
+        Criteria crit = getSession().createCriteria(type, "namedArea");
+        if (!StringUtils.isBlank(pattern)){
+            if (matchmode == MatchMode.EXACT) {
+                crit.add(Restrictions.eq("titleCache", matchmode.queryStringFrom(pattern)));
+            } else {
+    //          crit.add(Restrictions.ilike("titleCache", matchmode.queryStringFrom(queryString)));
+                crit.add(Restrictions.like("titleCache", matchmode.queryStringFrom(pattern)));
+            }
+        }
+        if (limit != null && limit >= 0) {
+            crit.setMaxResults(limit);
+        }
+
+        if (vocs != null &&!vocs.isEmpty()){
+            crit.createAlias("namedArea.vocabulary", "voc");
+            Disjunction or = Restrictions.disjunction();
+            for (TermVocabulary voc: vocs){
+                Criterion criterion = Restrictions.eq("voc.id", voc.getId());
+                or.add(criterion);
+            }
+            crit.add(or);
+        }
+
+        crit.addOrder(Order.asc("titleCache"));
+        if (limit == null){
+            limit = 1;
+        }
+        int firstItem = (pageNumber - 1) * limit;
+
+        crit.setFirstResult(0);
+        @SuppressWarnings("unchecked")
+        List<NamedArea> results = crit.list();
+        return results;
+    }
+
+    @Override
+    public long count(List<TermVocabulary> vocs, String pattern){
         Session session = getSession();
         Query query = null;
         if (pattern != null){
             if (vocs != null && !vocs.isEmpty()){
-                query = session.createQuery("from NamedArea where titleCache like :pattern and vocabulary in :vocs");
+                query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE titleCache LIKE :pattern AND vocabulary IN :vocs");
                 query.setParameterList("vocs", vocs);
             }else{
-                query = session.createQuery("from NamedArea where titleCache like :pattern ");
+                query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE titleCache LIKE :pattern ");
             }
             pattern = pattern.replace("*", "%");
             pattern = pattern.replace("?", "_");
@@ -656,14 +718,13 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase<DefinedTermBase> imp
             query.setParameter("pattern", pattern);
 
         } else {
-            query = session.createQuery("FROM NamedArea WHERE vocabulary IN :vocs");
+            query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE vocabulary IN :vocs");
             query.setParameterList("vocs", vocs);
         }
-        if (limit != null){
-           query.setMaxResults(limit);
-        }
+
+
         @SuppressWarnings("unchecked")
-        List<NamedArea> result = query.list();
+        Long result = (Long) query.uniqueResult();
         return result;
     }
 
@@ -697,6 +758,7 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase<DefinedTermBase> imp
         return list;
     }
 
+
     @Override
     public Collection<TermDto> findByTitleAsDto(String title, TermType termType) {
         String queryString = TermDto.getTermDtoSelect()
@@ -715,4 +777,14 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase<DefinedTermBase> imp
         return list;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public List<NamedArea> getUuidAndTitleCache(List<TermVocabulary> vocs, Integer limit, String pattern) {
+
+        return getUuidAndTitleCache(vocs, 0, limit, pattern, MatchMode.BEGINNING);
+
+    }
+
 }
index 71f3a2740910ebe39226508bdf8df6e58b5d14ef..bf260d99656df3a065b5c1b17c6320b3208f1716 100644 (file)
@@ -30,9 +30,11 @@ import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
 import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;
 import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
 
+
 public interface IDefinedTermDao extends IIdentifiableDao<DefinedTermBase>, ITitledDao<DefinedTermBase>{
 
        /**
@@ -223,6 +225,27 @@ public interface IDefinedTermDao extends IIdentifiableDao<DefinedTermBase>, ITit
      */
     public Collection<TermDto> getKindOfsAsDto(TermDto parentTerm);
 
+
     public Collection<TermDto> findByTitleAsDto(String title, TermType termType);
 
+    /**
+     * Returns the number of terms in the vocabularies vocs filteres by the given pattern
+     * @param vocs
+     * @param pattern
+     * @return
+     */
+    public long count(List<TermVocabulary> vocs, String pattern);
+
+    /**
+     * @param vocs
+     * @param pageNumber
+     * @param limit
+     * @param pattern
+     * @return
+     */
+    public List<NamedArea> getUuidAndTitleCache(List<TermVocabulary> vocs, Integer pageNumber, Integer limit, String pattern, MatchMode matchMode);
+
+
+
+
 }