ref #8162 move OriginalSourceXXX to reference package
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / reference / 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.reference;
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.IdentifiableEntity;
27 import eu.etaxonomy.cdm.model.reference.ISourceable;
28 import eu.etaxonomy.cdm.model.reference.OriginalSourceBase;
29 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;
30 import eu.etaxonomy.cdm.persistence.dao.reference.IOriginalSourceDao;
31
32 /**
33 * @author a.mueller
34 * @since 17.07.2008
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 @Override
46 public Map<String, ISourceable> findOriginalSourcesByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace) {
47 Session session = getSession();
48 String idInSourceString = "";
49 for (String idInSource : idInSourceSet){
50 idInSourceString = CdmUtils.concat("','", idInSourceString, idInSource);
51 }
52 idInSourceString = "'"+ idInSourceString + "'";
53
54 Query q = session.createQuery(
55 "SELECT source.idInSource, c FROM " + clazz.getSimpleName() + " AS c " +
56 "INNER JOIN c.sources AS source " +
57 "WHERE source.idInSource IN ( " + idInSourceString + " )" +
58 " AND source.idNamespace = :idNamespace"
59 );
60 q.setString("idNamespace", idNamespace);
61 //TODO integrate reference in where
62
63 Map<String, ISourceable> result = new HashMap<>();
64
65 List<Object[]> list = q.list();
66 for (Object[] pair : list){
67 result.put((String)pair[0], (ISourceable)pair[1]);
68 }
69
70 return result;
71 }
72
73 @Override
74 public List<IdentifiableEntity> findOriginalSourceByIdInSource(Class clazz, String idInSource, String idNamespace) {
75 Session session = getSession();
76 Query q = session.createQuery(
77 "Select c from " + clazz.getSimpleName() + " as c " +
78 "inner join c.sources as source " +
79 "where source.idInSource = :idInSource " +
80 " AND source.idNamespace = :idNamespace"
81 );
82 q.setString("idInSource", idInSource);
83 q.setString("idNamespace", idNamespace);
84 //TODO integrate reference in where
85 List<IdentifiableEntity> results = q.list();
86
87 return results;
88 }
89
90 @Override
91 public List<OriginalSourceBase> findOriginalSourceByIdInSource(String idInSource, String idNamespace) {
92 Session session = getSession();
93 Criteria crit = session.createCriteria(type);
94 crit.add(Restrictions.eq("idInSource", idInSource));
95 if (idNamespace == null){
96 crit.add(Restrictions.isNull("idNamespace"));
97 }else{
98 crit.add(Restrictions.eq("idNamespace", idNamespace));
99 }
100 crit.addOrder(Order.desc("created"));
101 List<OriginalSourceBase> results = crit.list();
102
103 return results;
104 }
105 }