From c41d6fae51e7bf019b1cb9605179e7a8d7099355 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Mon, 6 Feb 2012 11:59:49 +0000 Subject: [PATCH] Renamed from deleteNode to deleteNodeS to fit the real action done (deletion of multiple nodes) git-svn-id: https://svn.argeo.org/commons/trunk@5018 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../eclipse/ui/jcr/commands/DeleteNodes.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java new file mode 100644 index 000000000..8de1f2f00 --- /dev/null +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java @@ -0,0 +1,70 @@ +package org.argeo.eclipse.ui.jcr.commands; + +import java.util.Iterator; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +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; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Deletes the selected nodes and refresh the corresponding AbstractJcrView. + * Note that no model specific check is done to see if the node can be removed + * or not. Extend or override to implement specific behaviour. + */ +public class DeleteNodes extends AbstractHandler { + public final static String ID = "org.argeo.eclipse.ui.jcr.deleteNodes"; + public final static String DEFAULT_LABEL = "Delete selected nodes"; + + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) + .getActivePage().getSelection(); + 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(); + node.remove(); + node.getSession().save(); + ancestor = getOlder(ancestor, parentNode); + } + } + if (ancestor != null) + view.nodeRemoved(ancestor); + } catch (Exception e) { + ErrorFeedback.show("Cannot delete node " + obj, e); + } + } + return null; + } + + protected 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); + } + } +} -- 2.30.2