Project

General

Profile

Download (2.02 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.cdm.persistence.dao.taxon.tmp;
5

    
6
import java.util.List;
7
import java.util.UUID;
8

    
9
import org.hibernate.Query;
10
import org.springframework.stereotype.Repository;
11

    
12
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
13
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;
14
import eu.etaxonomy.cdm.persistence.dao.taxon.tmp.LogicFilter.Op;
15

    
16
/**
17
 * Preliminary implementation for testing filtered taxa
18
 * @author a.mueller
19
 *
20
 */
21
@Repository
22
public class TaxonNodeFilterDaoHibernateImpl extends CdmEntityDaoBase<TaxonNode> {
23
	
24
	public TaxonNodeFilterDaoHibernateImpl() {
25
		super(TaxonNode.class);
26
	}
27

    
28

    
29
	//maybe we will later want to have ordering included
30
	public List<UUID> listUuids(TaxonNodeFilter filter){
31
		String select = " SELECT m.uuid ";
32
		String from = "FROM TaxonNode m ";
33
		String nodeCondition = getNodeFilter(filter);
34
		
35
		
36
		String fullQuery = select + from + " WHERE " + nodeCondition; 
37
		System.out.println(fullQuery);
38
		Query query = getSession().createQuery(fullQuery);
39
		List<UUID> list = castToUuidList(query.list());
40
		return list;
41
	}
42
	
43
	
44
	
45
	
46
	private String getNodeFilter(TaxonNodeFilter filter) {
47
		String result = "";
48
		List<LogicFilter<TaxonNode>> nodesFilter = filter.getTaxonNodesFilter();
49
		boolean isFirst = true;
50
		for (LogicFilter<TaxonNode> singleFilter : nodesFilter){
51
			String treeIndex = singleFilter.getTreeIndex();
52
			String op = isFirst ? "" : op2Hql(singleFilter.getOperator());
53
			result = String.format("(%s%s(m.treeIndex like '%s%%'))", result, op, treeIndex);
54
			System.out.println(result);
55
			isFirst = false;
56
		}
57
		return result;
58
	}
59
	
60
	
61
	private String op2Hql(Op op){
62
		return op == Op.NOT ? " AND NOT " : op.toString();
63
	}
64

    
65
//
66
//
67
//	public static void main(String[] args){
68
//		String r = String.format(" main.treeIndex like '%s%%'", "aa");
69
//		System.out.println(r);
70
//	}
71
	
72

    
73
	@SuppressWarnings("unchecked")
74
	private List<UUID> castToUuidList(List<?> queryList){
75
		return (List<UUID>) queryList;
76
	}
77

    
78
}
(3-3/3)