]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java
Add a logger
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / commands / DeleteNode.java
1 package org.argeo.eclipse.ui.jcr.commands;
2
3 import java.util.Iterator;
4
5 import javax.jcr.Node;
6 import javax.jcr.RepositoryException;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.ArgeoException;
11 import org.argeo.eclipse.ui.dialogs.Error;
12 import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
13 import org.eclipse.core.commands.AbstractHandler;
14 import org.eclipse.core.commands.ExecutionEvent;
15 import org.eclipse.core.commands.ExecutionException;
16 import org.eclipse.jface.viewers.ISelection;
17 import org.eclipse.jface.viewers.IStructuredSelection;
18 import org.eclipse.ui.handlers.HandlerUtil;
19
20 /** Deletes the selected nodes */
21 public class DeleteNode extends AbstractHandler {
22 private final static Log log = LogFactory.getLog(DeleteNode.class);
23
24 public Object execute(ExecutionEvent event) throws ExecutionException {
25 ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
26 .getActivePage().getSelection();
27 AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
28 .getActiveWorkbenchWindow(event).getActivePage()
29 .findView(HandlerUtil.getActivePartId(event));
30
31 if (selection != null && selection instanceof IStructuredSelection) {
32 Iterator<?> it = ((IStructuredSelection) selection).iterator();
33 Object obj = null;
34 Node ancestor = null;
35 try {
36 while (it.hasNext()) {
37 obj = it.next();
38 if (obj instanceof Node) {
39 Node node = (Node) obj;
40 Node parentNode = node.getParent();
41 node.remove();
42 node.getSession().save();
43 ancestor = getOlder(ancestor, parentNode);
44 }
45 }
46 if (ancestor != null)
47 view.nodeRemoved(ancestor);
48 } catch (Exception e) {
49 Error.show("Cannot delete node " + obj, e);
50 }
51 }
52 return null;
53 }
54
55 private Node getOlder(Node A, Node B) {
56 try {
57
58 if (A == null)
59 return B == null ? null : B;
60 // Todo enhanced this method
61 else
62 return A.getDepth() <= B.getDepth() ? A : B;
63 } catch (RepositoryException re) {
64 throw new ArgeoException("Cannot find ancestor", re);
65 }
66 }
67 }