1 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.description
;
5 import org
.apache
.lucene
.analysis
.SimpleAnalyzer
;
6 import org
.apache
.lucene
.queryParser
.ParseException
;
7 import org
.apache
.lucene
.queryParser
.QueryParser
;
8 import org
.apache
.lucene
.search
.Sort
;
9 import org
.apache
.lucene
.search
.SortField
;
10 import org
.hibernate
.Criteria
;
11 import org
.hibernate
.FetchMode
;
12 import org
.hibernate
.Hibernate
;
13 import org
.hibernate
.Query
;
14 import org
.hibernate
.search
.FullTextSession
;
15 import org
.hibernate
.search
.Search
;
16 import org
.hibernate
.search
.SearchFactory
;
17 import org
.springframework
.stereotype
.Repository
;
19 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
20 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
21 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
22 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
23 import eu
.etaxonomy
.cdm
.persistence
.dao
.QueryParseException
;
24 import eu
.etaxonomy
.cdm
.persistence
.dao
.description
.IDescriptionElementDao
;
25 import eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
.AnnotatableDaoImpl
;
28 public class DescriptionElementDaoImpl
extends AnnotatableDaoImpl
<DescriptionElementBase
> implements IDescriptionElementDao
{
30 public DescriptionElementDaoImpl() {
31 super(DescriptionElementBase
.class);
34 public int countMedia(DescriptionElementBase descriptionElement
) {
35 Query query
= getSession().createQuery("select count(media) from DescriptionElementBase descriptionElement join descriptionElement.media media where descriptionElement = :descriptionElement");
36 query
.setParameter("descriptionElement", descriptionElement
);
38 return ((Long
)query
.uniqueResult()).intValue();
41 public int countTextData(String queryString
) {
42 QueryParser queryParser
= new QueryParser("multilanguageText.text", new SimpleAnalyzer());
45 org
.apache
.lucene
.search
.Query query
= queryParser
.parse(queryString
);
47 FullTextSession fullTextSession
= Search
.createFullTextSession(getSession());
48 org
.hibernate
.search
.FullTextQuery fullTextQuery
= fullTextSession
.createFullTextQuery(query
, TextData
.class);
49 return fullTextQuery
.getResultSize();
50 } catch (ParseException e
) {
51 throw new QueryParseException(e
, queryString
);
55 public List
<Media
> getMedia(DescriptionElementBase descriptionElement
, Integer pageSize
, Integer pageNumber
) {
56 Query query
= getSession().createQuery("select media from DescriptionElementBase descriptionElement join descriptionElement.media media where descriptionElement = :descriptionElement");
57 query
.setParameter("descriptionElement", descriptionElement
);
59 if(pageSize
!= null) {
60 query
.setMaxResults(pageSize
);
61 if(pageNumber
!= null) {
62 query
.setFirstResult(pageNumber
* pageSize
);
64 query
.setFirstResult(0);
68 return (List
<Media
>)query
.list();
71 public List
<TextData
> searchTextData(String queryString
, Integer pageSize
, Integer pageNumber
) {
72 QueryParser queryParser
= new QueryParser("multilanguageText.text", new SimpleAnalyzer());
75 org
.apache
.lucene
.search
.Query query
= queryParser
.parse(queryString
);
77 FullTextSession fullTextSession
= Search
.createFullTextSession(getSession());
78 org
.hibernate
.search
.FullTextQuery fullTextQuery
= fullTextSession
.createFullTextQuery(query
, TextData
.class);
79 org
.apache
.lucene
.search
.Sort sort
= new Sort(new SortField("inDescription.titleCache_forSort"));
80 fullTextQuery
.setSort(sort
);
82 Criteria criteria
= getSession().createCriteria(TextData
.class);
83 criteria
.setFetchMode("inDescription",FetchMode
.JOIN
);
84 criteria
.setFetchMode("feature", FetchMode
.JOIN
);
86 fullTextQuery
.setCriteriaQuery(criteria
);
88 if(pageSize
!= null) {
89 fullTextQuery
.setMaxResults(pageSize
);
90 if(pageNumber
!= null) {
91 fullTextQuery
.setFirstResult(pageNumber
* pageSize
);
93 fullTextQuery
.setFirstResult(0);
96 List
<TextData
> textData
= fullTextQuery
.list();
98 for(TextData t
: textData
) {
99 Hibernate
.initialize(t
.getMultilanguageText());
100 if(t
.getInDescription() instanceof TaxonDescription
) {
101 TaxonDescription taxonDescription
= (TaxonDescription
)t
.getInDescription();
102 Hibernate
.initialize(taxonDescription
.getTaxon());
107 } catch (ParseException e
) {
108 throw new QueryParseException(e
, queryString
);
112 public void purgeIndex() {
113 FullTextSession fullTextSession
= Search
.createFullTextSession(getSession());
115 fullTextSession
.purgeAll(type
); // remove all description element base from indexes
116 // fullTextSession.flushToIndexes() not implemented in 3.0.0.GA
119 public void rebuildIndex() {
120 FullTextSession fullTextSession
= Search
.createFullTextSession(getSession());
122 for(DescriptionElementBase descriptionElementBase
: list(null,null)) { // re-index all descriptionElements
123 Hibernate
.initialize(descriptionElementBase
.getInDescription());
124 Hibernate
.initialize(descriptionElementBase
.getFeature());
125 fullTextSession
.index(descriptionElementBase
);
129 public void optimizeIndex() {
130 FullTextSession fullTextSession
= Search
.createFullTextSession(getSession());
131 SearchFactory searchFactory
= fullTextSession
.getSearchFactory();
132 searchFactory
.optimize(type
); // optimize the indices ()