ref #6805 Set moved node as CDM entity for UpdateResult
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / FeatureNodeServiceImpl.java
index 3dc8fb1fffd6646d869de209da5dd20af1efe572..b0725fb59187954d150281997411aa947c0edba9 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2007 EDIT
 * European Distributed Institute of Taxonomy
@@ -32,7 +31,7 @@ import eu.etaxonomy.cdm.persistence.dao.description.IFeatureNodeDao;
 
 /**
  * @author n.hoffmann
- * @created Aug 5, 2010
+ * @since Aug 5, 2010
  * @version 1.0
  */
 @Service
@@ -87,16 +86,43 @@ public class FeatureNodeServiceImpl extends VersionableServiceBase<FeatureNode,
                 }
 
                 dao.delete(node);
+                result.addDeletedObject(node);
+                if(parent!=null){
+                    result.addUpdatedObject(parent);
+                }
                 if (config.isDeleteElement()){
                  feature = node.getFeature();
                  termService.delete(feature.getUuid());
+                 result.addDeletedObject(feature);
              }
             }
+            return result;
+        }
 
+        @Override
+        public UpdateResult createChildFeatureNode(FeatureNode node, Feature featureChild){
+            Feature feature = (Feature) termService.save(featureChild);
+            return addChildFeatureNode(node, feature);
+        }
 
+        @Override
+        public UpdateResult addChildFeatureNode(FeatureNode node, Feature featureChild){
+            FeatureNode childNode = FeatureNode.NewInstance(featureChild);
+            UpdateResult result = new UpdateResult();
+            node.addChild(childNode);
+            save(childNode);
+            result.addUpdatedObject(node);
+            result.setCdmEntity(childNode);
             return result;
         }
 
+        @Override
+        public UpdateResult addChildFeatureNode(UUID nodeUUID, UUID featureChildUuid){
+            FeatureNode node = load(nodeUUID);
+            Feature child = HibernateProxyHelper.deproxy(termService.load(featureChildUuid), Feature.class);
+            return addChildFeatureNode(node, child);
+        }
+
         @Override
         public DeleteResult isDeletable(FeatureNode node, FeatureNodeDeletionConfigurator config){
             DeleteResult result = new DeleteResult();
@@ -118,4 +144,35 @@ public class FeatureNodeServiceImpl extends VersionableServiceBase<FeatureNode,
             return result;
         }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public UpdateResult moveFeatureNode(UUID movedNodeUuid, UUID targetNodeUuid, int position) {
+        UpdateResult result = new UpdateResult();
+        FeatureNode movedNode = HibernateProxyHelper.deproxy(load(movedNodeUuid), FeatureNode.class);
+        FeatureNode targetNode = HibernateProxyHelper.deproxy(load(targetNodeUuid), FeatureNode.class);
+        FeatureNode parent = HibernateProxyHelper.deproxy(movedNode.getParent(), FeatureNode.class);
+        if(position<0){
+            targetNode.addChild(movedNode);
+        }
+        else{
+            targetNode.addChild(movedNode, position);
+        }
+        result.addUpdatedObject(targetNode);
+        if(parent!=null){
+            result.addUpdatedObject(parent);
+        }
+        result.setCdmEntity(movedNode);
+        return result;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public UpdateResult moveFeatureNode(UUID movedNodeUuid, UUID targetNodeUuid) {
+        return moveFeatureNode(movedNodeUuid, targetNodeUuid, -1);
+    }
+
 }