}\r
}\r
}\r
+\r
+\r
+ private static String dataSourceClassName = BasicDataSource.class.getName();\r
\r
- \r
+\r
//name\r
protected String dataSourceName;\r
\r
dataSource.getMode(),\r
dataSource.getNomenclaturalCode());\r
}else{\r
- Class<? extends DataSource> dataSourceClass = BasicDataSource.class; //TODO make configurable\r
-\r
- return save(\r
+ \r
+ Class<? extends DataSource> dataSourceClass;\r
+ try {\r
+ dataSourceClass = (Class<? extends DataSource>) Class.forName(dataSourceClassName);\r
+ \r
+ CdmPersistentDataSource persistendDatasource = save(\r
strDataSourceName, \r
dataSource.getDatabaseType(), \r
getCheckedDataSourceParameter(dataSource.getServer()), \r
dataSourceClass, \r
null, null, null, null, null, null,\r
dataSource.getNomenclaturalCode());\r
+ \r
+ return persistendDatasource;\r
+ } catch (ClassNotFoundException e) {\r
+ logger.error("DataSourceClass not found - stopping application", e);\r
+ System.exit(-1);\r
+ }\r
+ // will never be reached\r
+ return null;\r
}\r
}\r
\r
persistentObject.delete();\r
super.delete(persistentObject);\r
\r
- System.err.println("number of taxa: "+ result.size() );\r
if (result.size()==1){\r
taxonDao.delete(taxon);\r
}\r
\r
package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon;\r
\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
import org.apache.log4j.Logger;\r
+import org.hibernate.Query;\r
import org.springframework.beans.factory.annotation.Qualifier;\r
import org.springframework.stereotype.Repository;\r
\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonomicTreeDao;\r
indexedClasses[0] = TaxonomicTree.class;\r
}\r
\r
+ public List<TaxonNode> loadRankSpecificRootNodes(TaxonomicTree taxonomicTree, Rank rank, List<String> propertyPaths){\r
+ String hql = "SELECT tn FROM TaxonNode tn LEFT JOIN tn.childNodes as ctn" +\r
+ " WHERE tn.taxonomicTree = :tree AND (" +\r
+ " tn.taxon.name.rank = :rank" +\r
+ " OR (tn.taxon.name.rank < :rank AND tn.parent = null)" +\r
+ " OR (tn.taxon.name.rank > :rank AND ctn.taxon.name.rank < :rank)" +\r
+ " )";\r
+ Query query = getSession().createQuery(hql);\r
+ query.setParameter("rank", rank);\r
+ query.setParameter("tree", taxonomicTree);\r
+ List<TaxonNode> results = query.list();\r
+ defaultBeanInitializer.initializeAll(results, propertyPaths);\r
+ return results;\r
+ }\r
+ \r
\r
}\r
\r
package eu.etaxonomy.cdm.persistence.dao.taxon;\r
\r
+import java.util.List;\r
+\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
\r
*/\r
public interface ITaxonomicTreeDao extends IIdentifiableDao<TaxonomicTree> {\r
\r
- \r
+ /**\r
+ * Loads all TaxonNodes of the specified tree for a given Rank.\r
+ * If a branch does not contain a TaxonNode with a TaxonName at the given\r
+ * Rank the node associated with the next lower Rank is taken as root node.\r
+ * If the <code>rank</code> is null the absolute root nodes will be returned.\r
+ *\r
+ * @param taxonomicTree\r
+ * @param rank may be null\r
+ * @param propertyPaths\r
+ * @return\r
+ */\r
+ public List<TaxonNode> loadRankSpecificRootNodes(TaxonomicTree taxonomicTree, Rank rank, List<String> propertyPaths);\r
+\r
}\r