Project

General

Profile

Download (3.32 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

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

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

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

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

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

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

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

    
60
        addLimitAndStart(criteria, limit, start);
61

    
62
        addOrder(criteria, orderHints);
63

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

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

    
71
	@Override
72
	public List<UuidAndTitleCache<TermNode>> getUuidAndTitleCache(Integer limit, String pattern){
73
	    Session session = getSession();
74
        Query<SortableTaxonNodeQueryResult> query = session.createQuery(
75
                "SELECT new " + SortableTaxonNodeQueryResult.class.getName()
76
                + "       (uuid, id, titleCache) "
77
                + " FROM TermNode node "
78
                + " JOIN DefinedTerm term ON node.term = term "
79
                + (pattern!=null?" WHERE term.titleCache LIKE :pattern":""),
80
                SortableTaxonNodeQueryResult.class);
81
        if(pattern!=null){
82
            pattern = pattern.replace("*", "%");
83
            pattern = pattern.replace("?", "_");
84
            pattern = pattern + "%";
85
            query.setParameter("pattern", pattern);
86
        }
87
        if (limit != null){
88
           query.setMaxResults(limit);
89
        }
90
        return getUuidAndTitleCache(query);
91
	}
92

    
93
	protected List<UuidAndTitleCache<TermNode>> getUuidAndTitleCache(Query<SortableTaxonNodeQueryResult> query){
94
        List<UuidAndTitleCache<TermNode>> list = new ArrayList<>();
95
        List<SortableTaxonNodeQueryResult> result = query.list();
96

    
97
        for(SortableTaxonNodeQueryResult stnqr : result){
98
            list.add(new UuidAndTitleCache<>(stnqr.getTaxonNodeUuid(),stnqr.getTaxonNodeId(), stnqr.getTaxonTitleCache()));
99
        }
100
        return list;
101
    }
102
}
(4-4/6)