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=f7a99415ff57f19f602316c838f2d70c7e06dbda;hb=7dade07e711b6731b9e53d32a6af20735db772c9;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..f7a99415f 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,11 +3,13 @@ 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.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -17,40 +19,49 @@ 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) .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(); 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); + } + } }