(no commit message)
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 25 Jun 2008 16:06:00 +0000 (16:06 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 25 Jun 2008 16:06:00 +0000 (16:06 +0000)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IDefinedTermDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/ITitledDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonDao.java

index b411a8242911b15b6adfe167f921ca44010a00e1..ae10ea39b20e6bd87e9cdacf74e5b8ed0de74580 100644 (file)
@@ -23,10 +23,11 @@ public interface IDefinedTermDao extends ICdmEntityDao<DefinedTermBase>, ITitled
         * @param iso639 a two or three letter language code according to iso639-1 or iso639-2
         * @return the Language or null
         */
+       //TODO refactor typo:
        public Language getLangaugeByIso(String iso639);
-       
+       //TODO refactor typo:
        public List<Language> getLangaugesByIso(List<String> iso639List);
-       
+       //TODO refactor typo:
        public List<Language> getLangaugesByLocale(Enumeration<Locale> locales);
 
        
index 37c4d4bc1d423885366f9a3e300d37be8ee72c02..79261efcf77e3986fa072d6a9d9aa4db161e1f91 100644 (file)
@@ -11,23 +11,52 @@ package eu.etaxonomy.cdm.persistence.dao.common;
 
 import java.util.List;
 
+import org.hibernate.criterion.Criterion;
+
+
 import eu.etaxonomy.cdm.model.common.CdmBase;
 
 public interface ITitledDao<T extends CdmBase> {
+       
+       public static enum MATCH_MODE{
+               EXACT,
+               BEGINNING,
+               ANYWHERE;
+               
+               public String queryStringFrom(String queryString){
+                       queryString = queryString.replace('*', '%');
+                       switch(this){   
+                               case BEGINNING:
+                                       return queryString+"%";                 
+                               case ANYWHERE:
+                                       return "%"+queryString+"%";
+                               default:
+                                       return queryString;
+                       }
+               }
+       }
 
        /**
         * @param queryString
         * @return
         */
        public List<T> findByTitle(String queryString);
+
+       /**
+        * @param queryString
+        * @param sessionObject
+        * @return
+        */
+       public List<T> findByTitle(String queryString, CdmBase sessionObject);
+       
        /**
         * @param queryString
         * @param matchAnywhere
         * @param page
         * @param pagesize
+        * @param criteria TODO
         * @return
         */
-       public List<T> findByTitle(String queryString, boolean matchAnywhere, int page, int pagesize);
+       public List<T> findByTitle(String queryString, MATCH_MODE matchMode, int page, int pagesize, List<Criterion> criteria);
        
-       public List<T> findByTitle(String queryString, CdmBase sessionObject);
 }
index bb811c46a6295697d797d4a3a841436bab03b89e..6929c705d8fd0eb4ba0682e9c656a55ad9230ae0 100644 (file)
@@ -13,22 +13,20 @@ import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.Locale;
-import java.util.UUID;
 
 import org.apache.log4j.Logger;
-import org.springframework.dao.DataAccessException;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
 import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.criterion.Criterion;
 import org.hibernate.criterion.Restrictions;
+import org.springframework.stereotype.Repository;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
+import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;
 
 /**
  * @author a.kohlbecker
@@ -47,10 +45,27 @@ public class DefinedTermDaoImpl extends CdmEntityDaoBase<DefinedTermBase> implem
                return findByTitle(queryString, null);
        }
        
-       public List<DefinedTermBase> findByTitle(String queryString, boolean matchAnywhere, int page, int pagesize) {
-               queryString = matchAnywhere ? "%"+queryString+"%" : queryString+"%";
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
+        */
+       public List<DefinedTermBase> findByTitle(String queryString, CdmBase sessionObject) {
+               Session session = getSession();
+               if ( sessionObject != null ) {
+                       session.update(sessionObject);
+               }
+               Query query = session.createQuery("select term from DefinedTermBase term join fetch term.representations representation where representation.label = :label");
+               query.setParameter("label", queryString);
+               return (List<DefinedTermBase>) query.list();
+
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, eu.etaxonomy.cdm.persistence.dao.common.ITitledDao.MATCH_MODE, int, int, java.util.List)
+        */
+       public List<DefinedTermBase> findByTitle(String queryString, ITitledDao.MATCH_MODE matchMode, int page, int pagesize, List<Criterion> criteria) {
+               //FXIME is query parametrised?
                Criteria crit = getSession().createCriteria(type);
-               crit.add(Restrictions.ilike("titleCache", queryString));
+               crit.add(Restrictions.ilike("titleCache", matchMode.queryStringFrom(queryString)));
                crit.setMaxResults(pagesize);
                int firstItem = (page - 1) * pagesize + 1;
                crit.setFirstResult(firstItem);
@@ -58,6 +73,7 @@ public class DefinedTermDaoImpl extends CdmEntityDaoBase<DefinedTermBase> implem
                return results;
        }
        
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao#getLangaugeByIso(java.lang.String)
         */
@@ -85,20 +101,7 @@ public class DefinedTermDaoImpl extends CdmEntityDaoBase<DefinedTermBase> implem
                return languages;
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
-        */
-       public List<DefinedTermBase> findByTitle(String queryString,
-                       CdmBase sessionObject) {
-               Session session = getSession();
-               if ( sessionObject != null ) {
-                       session.update(sessionObject);
-               }
-               Query query = session.createQuery("select term from DefinedTermBase term join fetch term.representations representation where representation.label = :label");
-               query.setParameter("label", queryString);
-               return (List<DefinedTermBase>) query.list();
-
-       }
+       
 
 //     @Override
 //     public List<DefinedTermBase> list(int limit, int start) {
index 9e0e367b03ebae807ef69d7d1f37ccb22030da20..e86b47cfc73ab18d902f2b5a9e3b910246dc1379 100644 (file)
@@ -14,11 +14,13 @@ import java.util.List;
 import org.apache.log4j.Logger;
 import org.hibernate.Criteria;
 import org.hibernate.Session;
+import org.hibernate.criterion.Criterion;
 import org.hibernate.criterion.Restrictions;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
+import static eu.etaxonomy.cdm.persistence.dao.common.ITitledDao.MATCH_MODE.*;
 
 
 public class IdentifiableDaoBase<T extends IdentifiableEntity> extends CdmEntityDaoBase<T> implements IIdentifiableDao<T>{
@@ -52,12 +54,20 @@ public class IdentifiableDaoBase<T extends IdentifiableEntity> extends CdmEntity
        
        
 
-       public List<T> findByTitle(String queryString, boolean matchAnywhere, int page, int pagesize) {
-               queryString = matchAnywhere ? "%"+queryString+"%" : queryString+"%";
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, boolean, int, int, java.util.List)
+        */
+       public List<T> findByTitle(String queryString, MATCH_MODE matchmode, int page, int pagesize, List<Criterion> criteria) {
+
                Criteria crit = getSession().createCriteria(type);
-               crit.add(Restrictions.ilike("titleCache", queryString));
+               crit.add(Restrictions.ilike("titleCache", matchmode.queryStringFrom(queryString)));
                crit.setMaxResults(pagesize);
-               int firstItem = (page - 1) * pagesize + 1;
+               if(criteria != null){
+                       for (Criterion criterion : criteria) {
+                               crit.add(criterion);
+                       }
+               }
+               int firstItem = (page - 1) * pagesize;
                crit.setFirstResult(firstItem);
                List<T> results = crit.list();
                return results;
index a2db548e8fbe99b9e8793d110509d81b95f267c4..8a7ae81fb61c9cbaa95fe6b5badd31d8804e77f4 100644 (file)
@@ -20,11 +20,16 @@ import org.hibernate.Criteria;
 import org.hibernate.FetchMode;\r
 import org.hibernate.LazyInitializationException;\r
 import org.hibernate.Query;\r
+import org.hibernate.Session;\r
+import org.hibernate.criterion.Criterion;\r
+import org.hibernate.criterion.Projections;\r
 import org.hibernate.criterion.Restrictions;\r
 import org.springframework.dao.DataAccessException;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.Marker;\r
 import eu.etaxonomy.cdm.model.common.OriginalSource;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
@@ -33,6 +38,7 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
 import eu.etaxonomy.cdm.persistence.fetch.CdmFetch;\r
@@ -172,5 +178,23 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                }\r
                return super.delete(taxonBase);\r
        }\r
+\r
+       \r
+       // TODO add generic return type !!\r
+       public List findByName(String queryString, ITitledDao.MATCH_MODE matchMode, int page, int pagesize, boolean onlyAcccepted) {\r
+                       ArrayList<Criterion> criteria = new ArrayList<Criterion>();\r
+                       //TODO ... Restrictions.eq(propertyName, value)\r
+                       return super.findByTitle(queryString, matchMode, page, pagesize, criteria);\r
+               \r
+       }\r
+       \r
+       public int countMatchesByName(String queryString, ITitledDao.MATCH_MODE matchMode, boolean onlyAcccepted) {\r
+               \r
+               Criteria crit = getSession().createCriteria(type);\r
+               crit.add(Restrictions.ilike("titleCache", matchMode.queryStringFrom(queryString)));\r
+               crit.setProjection(Projections.rowCount());\r
+               int result = ((Integer)crit.list().get(0)).intValue();\r
+               return result;\r
+       }\r
        \r
 }
\ No newline at end of file
index 09db6855ca0ce07edcb4239f5e5e18fa43b1cd7e..c7b6f115316e62ddc01e9211487411f7486f7086 100644 (file)
@@ -10,6 +10,9 @@
 package eu.etaxonomy.cdm.persistence.dao.taxon;\r
 \r
 import java.util.List;\r
+\r
+import org.hibernate.Criteria;\r
+\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
@@ -48,4 +51,25 @@ public interface ITaxonDao extends IIdentifiableDao<TaxonBase>, ITitledDao<Taxon
         * @return\r
         */\r
        public List<TaxonBase> getAllTaxa(Integer pagesize, Integer page);\r
+       \r
+       \r
+       /**\r
+        * Find taxa by searching for @{link NameBase}\r
+        * @param queryString\r
+        * @param matchMode\r
+        * @param page\r
+        * @param pagesize\r
+        * @param onlyAcccepted\r
+        * @return\r
+        */\r
+       public List<Taxon> findByName(String queryString, ITitledDao.MATCH_MODE matchMode, int page, int pagesize, boolean onlyAcccepted);\r
+       \r
+       /**\r
+        * @param queryString\r
+        * @param matchMode\r
+        * @param onlyAcccepted\r
+        * @return\r
+        */\r
+       public int countMatchesByName(String queryString, ITitledDao.MATCH_MODE matchMode, boolean onlyAcccepted);\r
+       \r
 }\r