fixing problems regarding lucene search after merge - one test still failing
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / PolytomousKeyNodeServiceImpl.java
index 98e8b9144df9dc19a8ac74930ff50b3c447c6bc8..64c052f92c13c68a7b25f02663c9d5d3831dc1e6 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2009 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
@@ -15,10 +15,8 @@ import java.util.UUID;
 \r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
-import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
-import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;\r
 import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyNodeDao;\r
@@ -33,36 +31,59 @@ import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyNodeDao;
 public class PolytomousKeyNodeServiceImpl  extends VersionableServiceBase<PolytomousKeyNode, IPolytomousKeyNodeDao> implements IPolytomousKeyNodeService {\r
 \r
 \r
-       @Autowired\r
+       @Override\r
+    @Autowired\r
        protected void setDao(IPolytomousKeyNodeDao dao) {\r
                this.dao = dao;\r
        }\r
-       \r
+\r
        @Override\r
-       public UUID delete(PolytomousKeyNode node, boolean deleteChildren){\r
-               UUID uuid = node.getUuid();\r
-               node = (PolytomousKeyNode)HibernateProxyHelper.deproxy(node);\r
-               List<PolytomousKeyNode> children = node.getChildren();\r
-               \r
-               if(!deleteChildren){\r
-                       PolytomousKeyNode parent = node.getParent();\r
-                       for (PolytomousKeyNode child: children){\r
-                               parent.addChild(child);\r
-                               parent.removeChild(node);\r
-                               dao.update(child);\r
-                       }\r
-                       \r
-                       dao.update(node);\r
-               }\r
-               if (node.getParent()!= null){\r
-                       node.getParent().removeChild(node);\r
-               }\r
-               if (node.getKey().getRoot().equals(node)){\r
-                       node.getKey().setRoot(null);\r
-               }\r
-               dao.delete(node);\r
-               return uuid;\r
-               \r
-       }\r
+       public DeleteResult delete(UUID nodeUUID, boolean deleteChildren){\r
+        DeleteResult result = new DeleteResult();\r
+        PolytomousKeyNode node = dao.findByUuid(nodeUUID);\r
+        node = (PolytomousKeyNode)HibernateProxyHelper.deproxy(node);\r
+        if(node == null) {\r
+            return null;\r
+        }\r
+        List<PolytomousKeyNode> children = new ArrayList<PolytomousKeyNode>();\r
+        for (PolytomousKeyNode child: node.getChildren()){\r
+            children.add(child);\r
+        }\r
+        PolytomousKeyNode parent = node.getParent();\r
+        parent = HibernateProxyHelper.deproxy(parent, PolytomousKeyNode.class);\r
+\r
+        if(!deleteChildren){\r
+\r
+            for (PolytomousKeyNode child: children){\r
+                if (!child.equals(node)){\r
+                    parent.addChild(child);\r
+                    dao.update(child);\r
+                    result.addUpdatedObject(child);\r
+                }\r
+\r
+            }\r
+\r
+\r
+            dao.update(node);\r
+            result.addUpdatedObject(node);\r
+        }\r
+        if (parent!= null){\r
+            parent.removeChild(node);\r
+            dao.update(parent);\r
+        }\r
+        if (node.getKey().getRoot().equals(node)){\r
+            node.getKey().setRoot(null);\r
+        }\r
+        if (node.getTaxon() != null){\r
+            node.removeTaxon();\r
+        }\r
+        if (dao.delete(node) == null){\r
+            result.setAbort();\r
+        }\r
+        dao.saveOrUpdate(parent);\r
+        result.addUpdatedObject(parent);\r
+        return result;\r
+\r
+    }\r
 \r
 }\r