From e382f0d6f88a069875fcb56a76d97451e2a2f507 Mon Sep 17 00:00:00 2001 From: Andreas Kohlbecker Date: Fri, 5 Feb 2010 08:45:40 +0000 Subject: [PATCH] improving loadRankSpecificRootNodes --- .../cdm/database/CdmPersistentDataSource.java | 22 +++++++++++++++---- .../taxon/TaxonNodeDaoHibernateImpl.java | 1 - .../taxon/TaxonomicTreeDaoHibernateImpl.java | 22 +++++++++++++++++++ .../dao/taxon/ITaxonomicTreeDao.java | 18 ++++++++++++++- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmPersistentDataSource.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmPersistentDataSource.java index 39616c7a3e..6626becb04 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmPersistentDataSource.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmPersistentDataSource.java @@ -100,8 +100,11 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{ } } } + + + private static String dataSourceClassName = BasicDataSource.class.getName(); - + //name protected String dataSourceName; @@ -567,9 +570,12 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{ dataSource.getMode(), dataSource.getNomenclaturalCode()); }else{ - Class dataSourceClass = BasicDataSource.class; //TODO make configurable - - return save( + + Class dataSourceClass; + try { + dataSourceClass = (Class) Class.forName(dataSourceClassName); + + CdmPersistentDataSource persistendDatasource = save( strDataSourceName, dataSource.getDatabaseType(), getCheckedDataSourceParameter(dataSource.getServer()), @@ -580,6 +586,14 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{ dataSourceClass, null, null, null, null, null, null, dataSource.getNomenclaturalCode()); + + return persistendDatasource; + } catch (ClassNotFoundException e) { + logger.error("DataSourceClass not found - stopping application", e); + System.exit(-1); + } + // will never be reached + return null; } } diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java index 257227147c..83f5e8cafe 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java @@ -57,7 +57,6 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl persistentObject.delete(); super.delete(persistentObject); - System.err.println("number of taxa: "+ result.size() ); if (result.size()==1){ taxonDao.delete(taxon); } diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonomicTreeDaoHibernateImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonomicTreeDaoHibernateImpl.java index e1af5d15af..a56ccc4745 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonomicTreeDaoHibernateImpl.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonomicTreeDaoHibernateImpl.java @@ -10,10 +10,17 @@ package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon; +import java.util.ArrayList; +import java.util.List; + import org.apache.log4j.Logger; +import org.hibernate.Query; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; +import eu.etaxonomy.cdm.model.name.Rank; +import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.model.taxon.TaxonomicTree; import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase; import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonomicTreeDao; @@ -36,5 +43,20 @@ public class TaxonomicTreeDaoHibernateImpl extends IdentifiableDaoBase loadRankSpecificRootNodes(TaxonomicTree taxonomicTree, Rank rank, List propertyPaths){ + String hql = "SELECT tn FROM TaxonNode tn LEFT JOIN tn.childNodes as ctn" + + " WHERE tn.taxonomicTree = :tree AND (" + + " tn.taxon.name.rank = :rank" + + " OR (tn.taxon.name.rank < :rank AND tn.parent = null)" + + " OR (tn.taxon.name.rank > :rank AND ctn.taxon.name.rank < :rank)" + + " )"; + Query query = getSession().createQuery(hql); + query.setParameter("rank", rank); + query.setParameter("tree", taxonomicTree); + List results = query.list(); + defaultBeanInitializer.initializeAll(results, propertyPaths); + return results; + } + } diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonomicTreeDao.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonomicTreeDao.java index 37f04f88cd..7d676a9cfb 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonomicTreeDao.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonomicTreeDao.java @@ -9,6 +9,10 @@ package eu.etaxonomy.cdm.persistence.dao.taxon; +import java.util.List; + +import eu.etaxonomy.cdm.model.name.Rank; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.model.taxon.TaxonomicTree; import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao; @@ -18,5 +22,17 @@ import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao; */ public interface ITaxonomicTreeDao extends IIdentifiableDao { - + /** + * Loads all TaxonNodes of the specified tree for a given Rank. + * If a branch does not contain a TaxonNode with a TaxonName at the given + * Rank the node associated with the next lower Rank is taken as root node. + * If the rank is null the absolute root nodes will be returned. + * + * @param taxonomicTree + * @param rank may be null + * @param propertyPaths + * @return + */ + public List loadRankSpecificRootNodes(TaxonomicTree taxonomicTree, Rank rank, List propertyPaths); + } -- 2.34.1