X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/933e5ac35bc1d1bf8d993aab6084de182cc8c0a4..cd26eb20fa0fb60fb47965ea3857477e5f61a7e2:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java index b7476f957a..64c052f92c 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java @@ -9,6 +9,7 @@ */ package eu.etaxonomy.cdm.api.service; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -37,36 +38,52 @@ public class PolytomousKeyNodeServiceImpl extends VersionableServiceBase children = node.getChildren(); + public DeleteResult delete(UUID nodeUUID, boolean deleteChildren){ + DeleteResult result = new DeleteResult(); + PolytomousKeyNode node = dao.findByUuid(nodeUUID); + node = (PolytomousKeyNode)HibernateProxyHelper.deproxy(node); + if(node == null) { + return null; + } + List children = new ArrayList(); + for (PolytomousKeyNode child: node.getChildren()){ + children.add(child); + } + PolytomousKeyNode parent = node.getParent(); + parent = HibernateProxyHelper.deproxy(parent, PolytomousKeyNode.class); - if(!deleteChildren){ - PolytomousKeyNode parent = node.getParent(); - for (PolytomousKeyNode child: children){ - parent.addChild(child); - parent.removeChild(node); - dao.update(child); - } + if(!deleteChildren){ - dao.update(node); - } - if (node.getParent()!= null){ - node.getParent().removeChild(node); - } - if (node.getKey().getRoot().equals(node)){ - node.getKey().setRoot(null); - } - dao.delete(node); - return uuid; + for (PolytomousKeyNode child: children){ + if (!child.equals(node)){ + parent.addChild(child); + dao.update(child); + result.addUpdatedObject(child); + } - } + } + + + dao.update(node); + result.addUpdatedObject(node); + } + if (parent!= null){ + parent.removeChild(node); + dao.update(parent); + } + if (node.getKey().getRoot().equals(node)){ + node.getKey().setRoot(null); + } + if (node.getTaxon() != null){ + node.removeTaxon(); + } + if (dao.delete(node) == null){ + result.setAbort(); + } + dao.saveOrUpdate(parent); + result.addUpdatedObject(parent); + return result; - @Override - public UUID delete(UUID nodeUuid, boolean deleteChildren){ - PolytomousKeyNode node = dao.load(nodeUuid); - return delete(node, deleteChildren); - } + } }