*added service layer method: countAllNodesForClassification
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / taxon / TaxonNodeDaoHibernateImpl.java
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.math.BigInteger;
14 import java.util.List;
15 import java.util.Set;
16 import java.util.UUID;
17
18 import org.apache.log4j.Logger;
19 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.beans.factory.annotation.Qualifier;
21 import org.springframework.stereotype.Repository;
22
23 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
24 import eu.etaxonomy.cdm.model.taxon.Classification;
25 import eu.etaxonomy.cdm.model.taxon.Taxon;
26 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.AnnotatableDaoImpl;
28 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
29 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;
30
31 /**
32 * @author a.mueller
33 * @created 16.06.2009
34 */
35 @Repository
36 @Qualifier("taxonNodeDaoHibernateImpl")
37 public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
38 implements ITaxonNodeDao {
39 @SuppressWarnings("unused")
40 private static final Logger logger = Logger.getLogger(TaxonNodeDaoHibernateImpl.class);
41
42 @Autowired
43 private ITaxonDao taxonDao;
44
45 public TaxonNodeDaoHibernateImpl() {
46 super(TaxonNode.class);
47 }
48 @Override
49 public UUID delete(TaxonNode persistentObject, boolean deleteChildren){
50 Taxon taxon = persistentObject.getTaxon();
51 taxon = HibernateProxyHelper.deproxy(taxon, Taxon.class);
52
53 /*Session session = this.getSession();
54 Query query = session.createQuery("from TaxonNode t where t.taxon = :taxon");
55 query.setParameter("taxon", taxon);
56 List result = query.list();*/
57 if (taxon != null){
58 Set<TaxonNode> nodes = taxon.getTaxonNodes();
59
60 if (nodes.size()==1){
61
62 TaxonNode node = nodes.iterator().next();
63 node = HibernateProxyHelper.deproxy(node, TaxonNode.class);
64
65 taxon.removeTaxonNode(node, deleteChildren);
66 taxonDao.delete(taxon);
67 }
68 }
69 //persistentObject.delete();
70
71 super.delete(persistentObject);
72
73
74
75 //taxon = (Taxon)taxonDao.findByUuid(taxon.getUuid());
76 return persistentObject.getUuid();
77 }
78
79 @Override
80 public List<TaxonNode> getTaxonOfAcceptedTaxaByClassification(Classification classification, int start, int end) {
81 int classificationId = classification.getId();
82 //FIXME write test
83 String queryString = "SELECT DISTINCT nodes.* FROM TaxonNode AS nodes LEFT JOIN TaxonBase AS taxa ON nodes.taxon_id = taxa.id WHERE taxa.DTYPE = 'Taxon' AND nodes.classification_id = " + classificationId + " ORDER BY taxa.titleCache LIMIT "+start+"," +end;
84 List<TaxonNode> result = getSession().createSQLQuery(queryString).addEntity(TaxonNode.class).list();
85
86 return result;
87
88
89 }
90 /* (non-Javadoc)
91 * @see eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao#countTaxonOfAcceptedTaxaByClassification(eu.etaxonomy.cdm.model.taxon.Classification)
92 */
93 @Override
94 public int countTaxonOfAcceptedTaxaByClassification(Classification classification){
95 int classificationId = classification.getId();
96 //FIXME write test
97 String queryString = "SELECT DISTINCT COUNT('nodes.*') FROM TaxonNode AS nodes LEFT JOIN TaxonBase AS taxa ON nodes.taxon_id = taxa.id WHERE taxa.DTYPE = 'Taxon' AND nodes.classification_id = " + classificationId;
98 List<BigInteger> result = getSession().createSQLQuery(queryString).list();
99 return result.get(0).intValue ();
100 }
101
102
103
104
105 }