* @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);
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);
}
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
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);
return results;
}
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao#getLangaugeByIso(java.lang.String)
*/
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) {
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>{
- 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;
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
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
}\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
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
* @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