Project

General

Profile

Download (5.89 KB) Statistics
| Branch: | Tag: | Revision:
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
package eu.etaxonomy.cdm.persistence.dao.hibernate.reference;
10

    
11
import java.util.HashMap;
12
import java.util.List;
13
import java.util.Map;
14
import java.util.Set;
15

    
16
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
17
import org.hibernate.Criteria;
18
import org.hibernate.Session;
19
import org.hibernate.criterion.Order;
20
import org.hibernate.criterion.Projections;
21
import org.hibernate.criterion.Restrictions;
22
import org.hibernate.query.Query;
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.common.SingleSourcedEntityBase;
28
import eu.etaxonomy.cdm.model.reference.ISourceable;
29
import eu.etaxonomy.cdm.model.reference.NamedSourceBase;
30
import eu.etaxonomy.cdm.model.reference.OriginalSourceBase;
31
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;
32
import eu.etaxonomy.cdm.persistence.dao.reference.IOriginalSourceDao;
33
import eu.etaxonomy.cdm.persistence.query.OrderHint;
34

    
35
/**
36
 * @author a.mueller
37
 * @since 17.07.2008
38
 */
39
@Repository
40
public class OriginalSourceDaoImpl
41
        extends CdmEntityDaoBase<OriginalSourceBase>
42
        implements IOriginalSourceDao {
43

    
44
    @SuppressWarnings("unused")
45
	private static final Logger logger = LogManager.getLogger(OriginalSourceDaoImpl.class);
46

    
47
	public OriginalSourceDaoImpl() {
48
		super(OriginalSourceBase.class);
49
	}
50

    
51
    @Override
52
    public <S extends SingleSourcedEntityBase> S findSingleSourceBySourceId(Class<S> clazz, int sourceId){
53
        if (clazz == null){
54
            clazz = (Class)SingleSourcedEntityBase.class;
55
        }
56
        Query<S> q = getSession().createQuery(
57
                "SELECT c " +
58
                "FROM " + clazz.getName() + " AS c " +
59
                "INNER JOIN c.source AS source " +
60
                "WHERE source.id= :sourceId ", clazz
61
            );
62
        q.setParameter("sourceId", sourceId);
63

    
64
        S result = q.uniqueResult();
65
        return result;
66
    }
67

    
68
	@Override
69
	public <S extends IdentifiableEntity> S findIdentifiableBySourceId(Class<S> clazz, int sourceId){
70
        if (clazz == null){
71
            clazz = (Class)IdentifiableEntity.class;
72
        }
73
	    Query<S> q = getSession().createQuery(
74
                "SELECT c " +
75
                "FROM " + clazz.getName() + " AS c " +
76
                "INNER JOIN c.sources AS source " +
77
                "WHERE source.id= :sourceId ", clazz
78
            );
79
	    q.setParameter("sourceId", sourceId);
80

    
81
        S result = q.uniqueResult();
82
	    return result;
83
	}
84

    
85
	@Override
86
    public <S extends ISourceable> Map<String, S> findOriginalSourcesByIdInSource(Class<S> clazz, Set<String> idInSourceSet, String idNamespace) {
87

    
88
	    Session session = getSession();
89
		String idInSourceString = "";
90
		for (String idInSource : idInSourceSet){
91
			idInSourceString = CdmUtils.concat("','", idInSourceString, idInSource);
92
		}
93
		idInSourceString = "'"+ idInSourceString + "'";
94

    
95
		Query<Object[]> q = session.createQuery(
96
                "SELECT source.idInSource, c " +
97
                "FROM " + clazz.getName() + " AS c " +
98
                "INNER JOIN c.sources AS source " +
99
                "WHERE source.idInSource IN ( " + idInSourceString + " )" +
100
                	" AND source.idNamespace = :idNamespace",
101
                	Object[].class
102
            );
103
		q.setParameter("idNamespace", idNamespace);
104
		//TODO integrate reference in where
105

    
106
		Map<String, S> result = new HashMap<>();
107

    
108
        List<Object[]> list = q.list();
109
		for (Object[] pair : list){
110
			result.put((String)pair[0], (S)pair[1]);
111
		}
112

    
113
		return result;
114
	}
115

    
116
	@Override
117
    public <S extends ISourceable> List<S> findOriginalSourceByIdInSource(Class<S> clazz, String idInSource, String idNamespace) {
118
		Session session = getSession();
119
		Query<S> q = session.createQuery(
120
                "SELECT c FROM " + clazz.getSimpleName() + " as c " +
121
                "  INNER JOIN c.sources as source " +
122
                "WHERE source.idInSource = :idInSource " +
123
                	" AND source.idNamespace = :idNamespace",
124
                	clazz
125
            );
126
		q.setParameter("idInSource", idInSource);
127
		q.setParameter("idNamespace", idNamespace);
128
		//TODO integrate reference in where
129

    
130
        List<S> results = q.list();
131

    
132
		return results;
133
	}
134

    
135
	@Override
136
    public List<OriginalSourceBase> findOriginalSourceByIdInSource(String idInSource, String idNamespace) {
137
		Session session = getSession();
138
		Criteria crit = session.createCriteria(type);
139
		crit.add(Restrictions.eq("idInSource", idInSource));
140
		if (idNamespace == null){
141
			crit.add(Restrictions.isNull("idNamespace"));
142
		}else{
143
			crit.add(Restrictions.eq("idNamespace", idNamespace));
144
		}
145
		crit.addOrder(Order.desc("created"));
146
		@SuppressWarnings({ "unchecked"})
147
        List<OriginalSourceBase> results = crit.list();
148

    
149
		return results;
150
	}
151

    
152
	@Override
153
    public <T extends NamedSourceBase> Long countWithNameUsedInSource(Class<T> clazz){
154

    
155
        clazz = clazz != null? clazz : (Class<T>)NamedSourceBase.class;
156
        Criteria crit = getSession().createCriteria(clazz);
157
        //count
158
        crit.setProjection(Projections.rowCount());
159
        long result = (Long)crit.uniqueResult();
160

    
161
        return result;
162
	}
163

    
164

    
165
	@Override
166
	public <T extends NamedSourceBase> List<T> listWithNameUsedInSource(Class<T> clazz,
167
	        Integer pageSize, Integer pageNumber,List<OrderHint> orderHints, List<String> propertyPaths){
168

    
169
	    clazz = clazz != null? clazz : (Class<T>) NamedSourceBase.class;
170
	    Criteria crit = getSession().createCriteria(clazz);
171
	    crit.add(Restrictions.isNotNull("nameUsedInSource"));
172

    
173
	    crit.addOrder(Order.desc("created"));
174
	    @SuppressWarnings({ "unchecked" })
175
	    List<T> results = crit.list();
176

    
177
	    return results;
178
	}
179
}
(1-1/2)