Search for specific references implemented (getReferencesByTitle)
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / DefinedTermDaoImpl.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.persistence.dao.hibernate.common;
11
12 import java.util.ArrayList;
13 import java.util.Enumeration;
14 import java.util.List;
15 import java.util.Locale;
16
17 import org.apache.log4j.Logger;
18 import org.hibernate.Criteria;
19 import org.hibernate.Query;
20 import org.hibernate.Session;
21 import org.hibernate.criterion.Criterion;
22 import org.hibernate.criterion.Restrictions;
23 import org.springframework.stereotype.Repository;
24
25 import eu.etaxonomy.cdm.model.common.CdmBase;
26 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
27 import eu.etaxonomy.cdm.model.common.Language;
28 import eu.etaxonomy.cdm.model.common.Representation;
29 import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
30 import eu.etaxonomy.cdm.model.occurrence.Collection;
31 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
32 import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;
33
34 /**
35 * @author a.kohlbecker
36 * @created 29.05.2008
37 * @version 1.0
38 */
39 @Repository
40 public class DefinedTermDaoImpl extends CdmEntityDaoBase<DefinedTermBase> implements IDefinedTermDao{
41 private static final Logger logger = Logger.getLogger(DefinedTermDaoImpl.class);
42
43 public DefinedTermDaoImpl() {
44 super(DefinedTermBase.class);
45 }
46
47 public List<DefinedTermBase> findByTitle(String queryString) {
48 return findByTitle(queryString, null);
49 }
50
51 /* (non-Javadoc)
52 * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
53 */
54 public List<DefinedTermBase> findByTitle(String queryString, CdmBase sessionObject) {
55 Session session = getSession();
56 if ( sessionObject != null ) {
57 session.update(sessionObject);
58 }
59 Query query = session.createQuery("select term from DefinedTermBase term join fetch term.representations representation where representation.label = :label");
60 query.setParameter("label", queryString);
61 return (List<DefinedTermBase>) query.list();
62
63 }
64
65 public List<DefinedTermBase> findByTitleAndClass(String queryString, Class<DefinedTermBase> clazz) {
66 Session session = getSession();
67 Criteria crit = session.createCriteria(clazz);
68 crit.add(Restrictions.ilike("persistentTitleCache", queryString));
69 List<DefinedTermBase> results = crit.list();
70 return results;
71 }
72
73 /* (non-Javadoc)
74 * @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)
75 */
76 public List<DefinedTermBase> findByTitle(String queryString, ITitledDao.MATCH_MODE matchMode, int page, int pagesize, List<Criterion> criteria) {
77 //FXIME is query parametrised?
78 Criteria crit = getSession().createCriteria(type);
79 crit.add(Restrictions.ilike("titleCache", matchMode.queryStringFrom(queryString)));
80 crit.setMaxResults(pagesize);
81 int firstItem = (page - 1) * pagesize + 1;
82 crit.setFirstResult(firstItem);
83 List<DefinedTermBase> results = crit.list();
84 return results;
85 }
86
87
88 public WaterbodyOrCountry getCountryByIso(String iso639) {
89 // If iso639 = "" query returns non-unique result. We prevent this here:
90 if (iso639.equals("") ) { return null; }
91
92 Query query = getSession().createQuery("from WaterbodyOrCountry where iso3166_A2 = :isoCode");
93 query.setParameter("isoCode", iso639);
94 return (WaterbodyOrCountry) query.uniqueResult();
95 }
96
97 public List<? extends DefinedTermBase> getDefinedTermByRepresentationText(String text, Class clazz ) {
98 Query query = getSession().createQuery("from "+ clazz.getName()+" as wc where wc.representations.text like '"+text+"'");
99 return (List<? extends DefinedTermBase>) query.list();
100 }
101
102 /* (non-Javadoc)
103 * @see eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao#getLangaugeByIso(java.lang.String)
104 */
105 public Language getLanguageByIso(String iso639) {
106 String isoStandart = "iso639_" + (iso639.length() - 1);
107 Query query = getSession().createQuery("from Language where " + isoStandart + "= :isoCode");
108 query.setParameter("isoCode", iso639);
109 return (Language) query.uniqueResult();
110 }
111
112 public List<Language> getLanguagesByIso(List<String> iso639List) {
113 List<Language> languages = new ArrayList<Language>(iso639List.size());
114 for (String iso639 : iso639List) {
115 languages.add(getLanguageByIso(iso639));
116 }
117 return languages;
118 }
119
120 public List<Language> getLanguagesByLocale(Enumeration<Locale> locales) {
121 List<Language> languages = new ArrayList<Language>();
122 while(locales.hasMoreElements()) {
123 Locale locale = locales.nextElement();
124 languages.add(getLanguageByIso(locale.getLanguage()));
125 }
126 return languages;
127 }
128
129
130 // @Override
131 // public List<DefinedTermBase> list(int limit, int start) {
132 // Query query = getSession().createQuery("select term from DefinedTermBase term join fetch term.representations representation ");
133 // query.setMaxResults(limit);
134 // query.setFirstResult(start);
135 // return (List<DefinedTermBase>) query.list();
136 // }
137
138 }