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 b7476f957ac8b4bd531d7397db01eacd4fde68ca..64c052f92c13c68a7b25f02663c9d5d3831dc1e6 100644 (file)
@@ -9,6 +9,7 @@
 */\r
 package eu.etaxonomy.cdm.api.service;\r
 \r
+import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.UUID;\r
 \r
@@ -37,36 +38,52 @@ public class PolytomousKeyNodeServiceImpl  extends VersionableServiceBase<Polyto
        }\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
+       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
-                       PolytomousKeyNode parent = node.getParent();\r
-                       for (PolytomousKeyNode child: children){\r
-                               parent.addChild(child);\r
-                               parent.removeChild(node);\r
-                               dao.update(child);\r
-                       }\r
+        if(!deleteChildren){\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
+            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
+\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
-          @Override\r
-           public UUID delete(UUID nodeUuid, boolean deleteChildren){\r
-              PolytomousKeyNode node = dao.load(nodeUuid);\r
-              return delete(node, deleteChildren);\r
-          }\r
+    }\r
 \r
 }\r