Project

General

Profile

Download (3.56 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2008 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*/
6

    
7
package eu.etaxonomy.cdm.persistence.dao.hibernate.term;
8

    
9
import java.util.ArrayList;
10
import java.util.List;
11
import java.util.Set;
12
import java.util.UUID;
13

    
14
import org.hibernate.Criteria;
15
import org.hibernate.Query;
16
import org.hibernate.Session;
17
import org.hibernate.criterion.Restrictions;
18
import org.springframework.stereotype.Repository;
19

    
20
import eu.etaxonomy.cdm.model.term.TermNode;
21
import eu.etaxonomy.cdm.model.term.TermType;
22
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.VersionableDaoBase;
23
import eu.etaxonomy.cdm.persistence.dao.term.ITermNodeDao;
24
import eu.etaxonomy.cdm.persistence.dto.SortableTaxonNodeQueryResult;
25
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
26
import eu.etaxonomy.cdm.persistence.query.OrderHint;
27

    
28
/**
29
 * @author a.babadshanjan
30
 * @since 09.09.2008
31
 */
32
@Repository
33
public class TermNodeDaoImpl
34
        extends VersionableDaoBase<TermNode>
35
        implements ITermNodeDao {
36

    
37
	public TermNodeDaoImpl() {
38
		super(TermNode.class);
39
	}
40

    
41
	@Override
42
    public List<TermNode> list() {
43
		Criteria crit = getSession().createCriteria(type);
44
		@SuppressWarnings("unchecked")
45
        List<TermNode> result = crit.list();
46
		return result;
47
	}
48

    
49
	//TODO still needs to be tested
50
	@Override
51
    public List<TermNode> list(TermType termType, Integer limit, Integer start, List<OrderHint> orderHints,
52
            List<String> propertyPaths){
53

    
54
	    Criteria criteria = getSession().createCriteria(type);
55
        if (termType != null){
56
            Set<TermType> types = termType.getGeneralizationOf(true);
57
            types.add(termType);
58
            criteria.add(Restrictions.in("termType", types));
59
        }
60

    
61
        addLimitAndStart(criteria, limit, start);
62

    
63
        addOrder(criteria, orderHints);
64

    
65
        @SuppressWarnings("unchecked")
66
        List<TermNode> results = criteria.list();
67

    
68
        defaultBeanInitializer.initializeAll(results, propertyPaths);
69
        return results;
70
	}
71

    
72
	@Override
73
	public List<UuidAndTitleCache<TermNode>> getUuidAndTitleCache(Integer limit, String pattern){
74
	    Session session = getSession();
75
        Query query = session.createQuery(
76

    
77
                "SELECT new " + SortableTaxonNodeQueryResult.class.getName() + "("
78
                + " uuid, id, titleCache "
79
                + ") "
80
                + " FROM TermNode node "
81
                + " JOIN DefinedTerm term ON node.term = term "
82
                + (pattern!=null?" WHERE term.titleCache LIKE :pattern":""));
83
        if(pattern!=null){
84
            pattern = pattern.replace("*", "%");
85
            pattern = pattern.replace("?", "_");
86
            pattern = pattern + "%";
87
            query.setParameter("pattern", pattern);
88
        }
89
        if (limit != null){
90
           query.setMaxResults(limit);
91
        }
92
        return getUuidAndTitleCache(query);
93
	}
94
	 protected List<UuidAndTitleCache<TermNode>> getUuidAndTitleCache(Query query){
95
	        List<UuidAndTitleCache<TermNode>> list = new ArrayList<>();
96
	        List<Object> result = query.list();
97

    
98
	        for(Object obj : result){
99
	            if (obj instanceof SortableTaxonNodeQueryResult) {
100
	                SortableTaxonNodeQueryResult stnqr = (SortableTaxonNodeQueryResult) obj;
101
	                list.add(new UuidAndTitleCache<>(stnqr.getTaxonNodeUuid(),stnqr.getTaxonNodeId(), stnqr.getTaxonTitleCache()));
102
	            }else{
103
	                Object[] object = (Object[])obj;
104
	                list.add(new UuidAndTitleCache<>((UUID) object[0],(Integer) object[1], (String) object[2]));
105
	            }
106
	        }
107
	        return list;
108
	    }
109

    
110
}
(4-4/6)