]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java
-> Finalisation of file download for RAP
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / commands / DeleteNode.java
index 5133b04b628fd300ff501c071fb2f73f93832b69..fc8ad6a0c36fbdf2f136740039d22cd6d06829e5 100644 (file)
@@ -3,9 +3,11 @@ package org.argeo.eclipse.ui.jcr.commands;
 import java.util.Iterator;
 
 import javax.jcr.Node;
+import javax.jcr.RepositoryException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.dialogs.Error;
 import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
@@ -17,7 +19,7 @@ import org.eclipse.ui.handlers.HandlerUtil;
 
 /** Deletes the selected nodes */
 public class DeleteNode extends AbstractHandler {
-       private static Log log = LogFactory.getLog(DeleteNode.class);
+       private final static Log log = LogFactory.getLog(DeleteNode.class);
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
@@ -25,32 +27,41 @@ public class DeleteNode extends AbstractHandler {
                GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(HandlerUtil.getActivePartId(event));
+
                if (selection != null && selection instanceof IStructuredSelection) {
                        Iterator<?> it = ((IStructuredSelection) selection).iterator();
                        Object obj = null;
+                       Node ancestor = null;
                        try {
                                while (it.hasNext()) {
                                        obj = it.next();
                                        if (obj instanceof Node) {
                                                Node node = (Node) obj;
                                                Node parentNode = node.getParent();
-                                               log.debug("Node ids : node :" + node.getIdentifier()
-                                                               + " - pNode : " + parentNode.getIdentifier());
                                                node.remove();
-
-                                               // Postpone the refresh after the session.save
-                                               // view.nodeRemoved(parentNode);
-
                                                node.getSession().save();
-                                               if (log.isDebugEnabled())
-                                                       log.debug("session saved");
-                                               view.nodeRemoved(parentNode);
+                                               ancestor = getOlder(ancestor, parentNode);
                                        }
                                }
+                               if (ancestor != null)
+                                       view.nodeRemoved(ancestor);
                        } catch (Exception e) {
                                Error.show("Cannot delete node " + obj, e);
                        }
                }
                return null;
        }
+
+       private Node getOlder(Node A, Node B) {
+               try {
+
+                       if (A == null)
+                               return B == null ? null : B;
+                       // Todo enhanced this method
+                       else
+                               return A.getDepth() <= B.getDepth() ? A : B;
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Cannot find ancestor", re);
+               }
+       }
 }