Project

General

Profile

Download (3.33 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

    
11
package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon;
12

    
13
import java.util.ArrayList;
14
import java.util.Iterator;
15
import java.util.List;
16
import java.util.Set;
17
import java.util.UUID;
18

    
19
import org.apache.log4j.Logger;
20
import org.hibernate.Query;
21
import org.hibernate.Session;
22
import org.springframework.beans.factory.annotation.Autowired;
23
import org.springframework.beans.factory.annotation.Qualifier;
24
import org.springframework.stereotype.Repository;
25

    
26
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
27
import eu.etaxonomy.cdm.model.name.Rank;
28
import eu.etaxonomy.cdm.model.taxon.Taxon;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
31
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
32
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
33
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
34
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;
35
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonomicTreeDao;
36

    
37
/**
38
 * @author a.mueller
39
 * @created 16.06.2009
40
 * @version 1.0
41
 */
42
@Repository
43
@Qualifier("taxonomicTreeDaoHibernateImpl")
44
public class TaxonomicTreeDaoHibernateImpl extends IdentifiableDaoBase<TaxonomicTree>
45
		implements ITaxonomicTreeDao {
46
	@SuppressWarnings("unused")
47
	private static final Logger logger = Logger.getLogger(TaxonomicTreeDaoHibernateImpl.class);
48
	
49
	@Autowired
50
	private ITaxonNodeDao taxonNodeDao;
51
	
52
	public TaxonomicTreeDaoHibernateImpl() {
53
		super(TaxonomicTree.class);
54
		indexedClasses = new Class[1];
55
		indexedClasses[0] = TaxonomicTree.class;
56
	}
57
	
58
	@SuppressWarnings("unchecked")
59
	public List<TaxonNode> loadRankSpecificRootNodes(TaxonomicTree taxonomicTree, Rank rank, List<String> propertyPaths){
60
		List<TaxonNode> results;
61
		if(rank == null){
62
			taxonomicTree = load(taxonomicTree.getUuid());
63
			results = new ArrayList(); 
64
			results.addAll(taxonomicTree.getChildNodes());
65
		} else {
66
			String hql = "SELECT DISTINCT tn FROM TaxonNode tn LEFT JOIN tn.childNodes as ctn" +
67
				" WHERE tn.taxonomicTree = :tree  AND (" +
68
				" tn.taxon.name.rank = :rank" +
69
				" OR (tn.taxon.name.rank.orderIndex > :rankOrderIndex AND tn.parent = null)" +
70
				" OR (tn.taxon.name.rank.orderIndex < :rankOrderIndex AND ctn.taxon.name.rank.orderIndex > :rankOrderIndex)" +
71
				" )";
72
			Query query = getSession().createQuery(hql);
73
			query.setParameter("rank", rank);
74
			query.setParameter("rankOrderIndex", rank.getOrderIndex());
75
			query.setParameter("tree", taxonomicTree);
76
			results = query.list();
77
		}
78
		defaultBeanInitializer.initializeAll(results, propertyPaths);
79
		return results;
80
		
81
	}
82
	
83
	@Override
84
	public UUID delete(TaxonomicTree persistentObject){
85
		//delete all childnodes, then delete the tree
86
		
87
		Set<TaxonNode> nodes = persistentObject.getChildNodes();
88
		Iterator<TaxonNode> nodesIterator = nodes.iterator();
89
		
90
		while(nodesIterator.hasNext()){
91
			TaxonNode node = nodesIterator.next();
92
			taxonNodeDao.delete(node);
93
		}
94
				
95
		super.delete(persistentObject);
96
		
97
		return persistentObject.getUuid();
98
	}
99

    
100
	
101
	
102
}
(4-4/4)