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