2f209077e9ec49b11830194d1f36e401694cfc24
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / IdentifiableDaoBase.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.List;
13
14 import org.apache.log4j.Logger;
15 import org.hibernate.Criteria;
16 import org.hibernate.Query;
17 import org.hibernate.Session;
18 import org.hibernate.criterion.Criterion;
19 import org.hibernate.criterion.Order;
20 import org.hibernate.criterion.Restrictions;
21
22 import eu.etaxonomy.cdm.model.common.CdmBase;
23 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
24 import eu.etaxonomy.cdm.model.common.OriginalSource;
25 import eu.etaxonomy.cdm.model.media.Rights;
26 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
27
28
29 public class IdentifiableDaoBase<T extends IdentifiableEntity> extends AnnotatableDaoImpl<T> implements IIdentifiableDao<T>{
30 @SuppressWarnings("unused")
31 private static final Logger logger = Logger.getLogger(IdentifiableDaoBase.class);
32
33
34 public IdentifiableDaoBase(Class<T> type) {
35 super(type);
36 }
37
38 /* (non-Javadoc)
39 * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String)
40 */
41 public List<T> findByTitle(String queryString) {
42 return findByTitle(queryString, null);
43 }
44
45 /* (non-Javadoc)
46 * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String)
47 */
48 public List<T> findByTitle(String queryString, CdmBase sessionObject) {
49 Session session = getSession();
50 if ( sessionObject != null ) {
51 session.update(sessionObject);
52 }
53 Criteria crit = session.createCriteria(type);
54 crit.add(Restrictions.ilike("persistentTitleCache", queryString));
55 List<T> results = crit.list();
56 return results;
57 }
58
59 public List<T> findByTitleAndClass(String queryString, Class<T> clazz) {
60 Session session = getSession();
61 Criteria crit = session.createCriteria(clazz);
62 crit.add(Restrictions.ilike("persistentTitleCache", queryString));
63 List<T> results = crit.list();
64 return results;
65 }
66
67
68 /* (non-Javadoc)
69 * @see eu.etaxonomy.cdm.persistence.dao.common.ITitledDao#findByTitle(java.lang.String, boolean, int, int, java.util.List)
70 */
71 public List<T> findByTitle(String queryString, MATCH_MODE matchmode, int page, int pagesize, List<Criterion> criteria) {
72
73 Criteria crit = getSession().createCriteria(type);
74 crit.add(Restrictions.ilike("persistentTitleCache", matchmode.queryStringFrom(queryString)));
75 crit.setMaxResults(pagesize);
76 if(criteria != null){
77 for (Criterion criterion : criteria) {
78 crit.add(criterion);
79 }
80 }
81 crit.addOrder(Order.asc("persistentTitleCache"));
82 int firstItem = (page - 1) * pagesize;
83 crit.setFirstResult(firstItem);
84 List<T> results = crit.list();
85 return results;
86 }
87
88 public int countRights(T identifiableEntity) {
89 Query query = getSession().createQuery("select count(rights) from " + type.getSimpleName() + " identifiableEntity join identifiableEntity.rights rights where identifiableEntity = :identifiableEntity");
90 query.setParameter("identifiableEntity",identifiableEntity);
91 return ((Long)query.uniqueResult()).intValue();
92 }
93
94 public int countSources(T identifiableEntity) {
95 Query query = getSession().createQuery("select count(source) from OriginalSource source where source.sourcedObj = :identifiableEntity");
96 query.setParameter("identifiableEntity",identifiableEntity);
97 return ((Long)query.uniqueResult()).intValue();
98 }
99
100 public List<Rights> getRights(T identifiableEntity, Integer pageSize, Integer pageNumber) {
101 Query query = getSession().createQuery("select rights from " + type.getSimpleName() + " identifiableEntity join identifiableEntity.rights rights where identifiableEntity = :identifiableEntity");
102 query.setParameter("identifiableEntity",identifiableEntity);
103
104 if(pageSize != null) {
105 query.setMaxResults(pageSize);
106 if(pageNumber != null) {
107 query.setFirstResult(pageNumber * pageSize);
108 } else {
109 query.setFirstResult(0);
110 }
111 }
112
113 return (List<Rights>)query.list();
114 }
115
116 public List<OriginalSource> getSources(T identifiableEntity, Integer pageSize, Integer pageNumber) {
117 Query query = getSession().createQuery("select source from OriginalSource source where source.sourcedObj = :identifiableEntity");
118 query.setParameter("identifiableEntity",identifiableEntity);
119
120 if(pageSize != null) {
121 query.setMaxResults(pageSize);
122 if(pageNumber != null) {
123 query.setFirstResult(pageNumber * pageSize);
124 } else {
125 query.setFirstResult(0);
126 }
127 }
128
129 return (List<OriginalSource>)query.list();
130 }
131
132 public List<T> findOriginalSourceByIdInSource(String idInSource, String idNamespace) {
133 Session session = getSession();
134 Query q = session.createQuery(
135 "Select c from " + type.getSimpleName() + " as c " +
136 "inner join c.sources as source " +
137 "where source.idInSource = :idInSource " +
138 " AND source.idNamespace = :idNamespace"
139 );
140 q.setString("idInSource", idInSource);
141 q.setString("idNamespace", idNamespace);
142 //TODO integrate reference in where
143 List<T> results = (List<T>)q.list();
144
145 return results;
146 }
147 }