X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fruntime%2Forg.argeo.eclipse.ui.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Feclipse%2Fui%2Fjcr%2Fcommands%2FDeleteNode.java;h=fc8ad6a0c36fbdf2f136740039d22cd6d06829e5;hb=7fe4a16dad045373bb014724733c1bbb175d44b5;hp=93304fd705e476603d9b7fe0dcb5551a793befac;hpb=591e96576707e4139b142026a7d915ffdde1e223;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java index 93304fd70..fc8ad6a0c 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java @@ -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); + } + } }