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=4141375ce9281ac1d8c37ae222fd2254aa19fdcb;hb=afd41f657b0eecb1e9a1db85af8bff0cc7bc4804;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..4141375ce 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,9 +3,11 @@ package org.argeo.eclipse.ui.jcr.commands; import java.util.Iterator; import javax.jcr.Node; +import javax.jcr.RepositoryException; -import org.argeo.eclipse.ui.dialogs.Error; -import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser; +import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.ErrorFeedback; +import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -15,17 +17,17 @@ import org.eclipse.ui.handlers.HandlerUtil; /** Deletes the selected nodes */ public class DeleteNode extends AbstractHandler { - public Object execute(ExecutionEvent event) throws ExecutionException { ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) .getActivePage().getSelection(); - GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil + AbstractJcrBrowser view = (AbstractJcrBrowser) 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,15 +35,29 @@ 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); + ErrorFeedback.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); + } + } }