reintegrate cdm-3.3 branch into trunk
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / OriginalSourceDaoImpl.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.HashMap;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.Set;
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.Order;
22 import org.hibernate.criterion.Restrictions;
23 import org.springframework.stereotype.Repository;
24
25 import eu.etaxonomy.cdm.common.CdmUtils;
26 import eu.etaxonomy.cdm.model.common.ISourceable;
27 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
28 import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
29 import eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao;
30
31 /**
32 * @author a.mueller
33 * @created 17.07.2008
34 * @version 1.0
35 */
36 @Repository
37 public class OriginalSourceDaoImpl extends CdmEntityDaoBase<OriginalSourceBase> implements IOriginalSourceDao {
38 @SuppressWarnings("unused")
39 private static final Logger logger = Logger.getLogger(OriginalSourceDaoImpl.class);
40
41 public OriginalSourceDaoImpl() {
42 super(OriginalSourceBase.class);
43 }
44
45
46 /* (non-Javadoc)
47 * @see eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao#findOriginalSourcesByIdInSource(java.lang.Class, java.util.List, java.lang.String)
48 */
49 public Map<String, ISourceable> findOriginalSourcesByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace) {
50 Session session = getSession();
51 String idInSourceString = "";
52 for (String idInSource : idInSourceSet){
53 idInSourceString = CdmUtils.concat("','", idInSourceString, idInSource);
54 }
55 idInSourceString = "'"+ idInSourceString + "'";
56
57 Query q = session.createQuery(
58 "SELECT source.idInSource, c FROM " + clazz.getSimpleName() + " AS c " +
59 "INNER JOIN c.sources AS source " +
60 "WHERE source.idInSource IN ( " + idInSourceString + " )" +
61 " AND source.idNamespace = :idNamespace"
62 );
63 q.setString("idNamespace", idNamespace);
64 //TODO integrate reference in where
65
66 Map<String, ISourceable> result = new HashMap<String, ISourceable>();
67
68 List<Object[]> list = q.list();
69 for (Object[] pair : list){
70 result.put((String)pair[0], (ISourceable)pair[1]);
71 }
72
73 return result;
74 }
75
76
77 /* (non-Javadoc)
78 * @see eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao#findOriginalSourceByIdInSource(java.lang.Class, java.lang.String, java.lang.String)
79 */
80 public List<IdentifiableEntity> findOriginalSourceByIdInSource(Class clazz, String idInSource, String idNamespace) {
81 Session session = getSession();
82 Query q = session.createQuery(
83 "Select c from " + clazz.getSimpleName() + " as c " +
84 "inner join c.sources as source " +
85 "where source.idInSource = :idInSource " +
86 " AND source.idNamespace = :idNamespace"
87 );
88 q.setString("idInSource", idInSource);
89 q.setString("idNamespace", idNamespace);
90 //TODO integrate reference in where
91 List<IdentifiableEntity> results = q.list();
92
93 return results;
94 }
95
96 /* (non-Javadoc)
97 * @see eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao#findOriginalSourceByIdInSource(java.lang.String, java.lang.String)
98 */
99 public List<OriginalSourceBase> findOriginalSourceByIdInSource(String idInSource, String idNamespace) {
100 Session session = getSession();
101 Criteria crit = session.createCriteria(type);
102 crit.add(Restrictions.eq("idInSource", idInSource));
103 if (idNamespace == null){
104 crit.add(Restrictions.isNull("idNamespace"));
105 }else{
106 crit.add(Restrictions.eq("idNamespace", idNamespace));
107 }
108 crit.addOrder(Order.desc("created"));
109 List<OriginalSourceBase> results = crit.list();
110
111 return results;
112 }
113
114
115 }