Fix specimen retrieval by assignment status
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / FeatureTreeServiceImpl.java
index bc9833f4bf682fe19c8e6f0237b662a7b742dba5..ba8bf7c0782618160d6bafa56697d34fb4548a29 100644 (file)
@@ -21,7 +21,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
+import eu.etaxonomy.cdm.api.service.config.FeatureNodeDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;\r
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.description.FeatureNode;\r
 import eu.etaxonomy.cdm.model.description.FeatureTree;\r
 import eu.etaxonomy.cdm.persistence.dao.description.IFeatureNodeDao;\r
@@ -37,6 +40,9 @@ public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree,
     @Autowired\r
     private IVocabularyService vocabularyService;\r
 \r
+    @Autowired\r
+    private IFeatureNodeService featureNodeService;\r
+\r
     @Override\r
     @Autowired\r
     protected void setDao(IFeatureTreeDao dao) {\r
@@ -111,7 +117,7 @@ public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree,
         if(featureTree == null){\r
             throw new EntityNotFoundException("No FeatureTree entity found for " + uuid);\r
         }\r
-        dao.loadNodes(featureTree.getRoot(),nodePaths);\r
+        dao.deepLoadNodes(featureTree.getRoot().getChildNodes() ,nodePaths);\r
         return featureTree;\r
     }\r
 \r
@@ -137,6 +143,23 @@ public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree,
         return load(IFeatureTreeDao.DefaultFeatureTreeUuid);\r
     }\r
 \r
+    @Override\r
+    public DeleteResult delete(UUID featureTreeUuid){\r
+        DeleteResult result = new DeleteResult();\r
+        FeatureTree tree = dao.load(featureTreeUuid);\r
+\r
+        FeatureNode rootNode = HibernateProxyHelper.deproxy(tree.getRoot(), FeatureNode.class);\r
+        FeatureNodeDeletionConfigurator config = new FeatureNodeDeletionConfigurator();\r
+        config.setChildHandling(ChildHandling.DELETE);\r
+        result =featureNodeService.deleteFeatureNode(rootNode.getUuid(), config);\r
+        tree.setRoot(null);\r
+        if (result.isOk()){\r
+          dao.delete(tree);\r
+        }\r
+        return result;\r
+\r
+    }\r
+\r
 \r
 \r
 }\r