2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Enumeration
;
14 import java
.util
.List
;
15 import java
.util
.Locale
;
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
;
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
;
35 * @author a.kohlbecker
40 public class DefinedTermDaoImpl
extends CdmEntityDaoBase
<DefinedTermBase
> implements IDefinedTermDao
{
41 private static final Logger logger
= Logger
.getLogger(DefinedTermDaoImpl
.class);
43 public DefinedTermDaoImpl() {
44 super(DefinedTermBase
.class);
47 public List
<DefinedTermBase
> findByTitle(String queryString
) {
48 return findByTitle(queryString
, null);
52 * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
54 public List
<DefinedTermBase
> findByTitle(String queryString
, CdmBase sessionObject
) {
55 Session session
= getSession();
56 if ( sessionObject
!= null ) {
57 session
.update(sessionObject
);
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();
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();
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)
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();
88 public WaterbodyOrCountry
getCountryByIso(String iso639
) {
89 // If iso639 = "" query returns non-unique result. We prevent this here:
90 if (iso639
.equals("") ) { return null; }
92 Query query
= getSession().createQuery("from WaterbodyOrCountry where iso3166_A2 = :isoCode");
93 query
.setParameter("isoCode", iso639
);
94 return (WaterbodyOrCountry
) query
.uniqueResult();
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();
103 * @see eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao#getLangaugeByIso(java.lang.String)
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();
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
));
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()));
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();