// $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
\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
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