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=5133b04b628fd300ff501c071fb2f73f93832b69;hpb=5a00c032d8c7b9617777db83b0a6d60ab6b74d18;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 5133b04b6..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,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); + } + } }