]> 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
Improve GIS
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / commands / DeleteNode.java
index 93304fd705e476603d9b7fe0dcb5551a793befac..fc8ad6a0c36fbdf2f136740039d22cd6d06829e5 100644 (file)
@@ -3,7 +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;
@@ -15,6 +19,7 @@ import org.eclipse.ui.handlers.HandlerUtil;
 
 /** Deletes the selected nodes */
 public class DeleteNode extends AbstractHandler {
+       private final static Log log = LogFactory.getLog(DeleteNode.class);
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
@@ -22,10 +27,11 @@ 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();
@@ -33,10 +39,12 @@ public class DeleteNode extends AbstractHandler {
                                                Node node = (Node) obj;
                                                Node parentNode = node.getParent();
                                                node.remove();
-                                               view.nodeRemoved(parentNode);
                                                node.getSession().save();
+                                               ancestor = getOlder(ancestor, parentNode);
                                        }
                                }
+                               if (ancestor != null)
+                                       view.nodeRemoved(ancestor);
                        } catch (Exception e) {
                                Error.show("Cannot delete node " + obj, e);
                        }
@@ -44,4 +52,16 @@ public class DeleteNode extends AbstractHandler {
                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);
+               }
+       }
 }