1 package org
.argeo
.cms
.e4
.jcr
.handlers
;
5 import javax
.inject
.Named
;
7 import javax
.jcr
.RepositoryException
;
9 import org
.argeo
.cms
.e4
.jcr
.JcrBrowserView
;
10 import org
.argeo
.cms
.ui
.jcr
.model
.SingleJcrNodeElem
;
11 import org
.argeo
.cms
.ui
.jcr
.model
.WorkspaceElem
;
12 import org
.argeo
.cms
.ux
.widgets
.TreeParent
;
13 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
14 import org
.argeo
.eclipse
.ui
.dialogs
.ErrorFeedback
;
15 import org
.eclipse
.e4
.core
.di
.annotations
.Execute
;
16 import org
.eclipse
.e4
.ui
.model
.application
.ui
.basic
.MPart
;
17 import org
.eclipse
.e4
.ui
.services
.IServiceConstants
;
18 import org
.eclipse
.e4
.ui
.workbench
.modeling
.ESelectionService
;
19 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
20 import org
.eclipse
.swt
.widgets
.Display
;
23 * Delete the selected nodes: both in the JCR repository and in the UI view.
24 * Warning no check is done, except implementation dependent native checks,
27 * This handler is still 'hard linked' to a GenericJcrBrowser view to enable
28 * correct tree refresh when a node is added. This must be corrected in future
31 public class DeleteNodes
{
33 public void execute(@Named(IServiceConstants
.ACTIVE_PART
) MPart part
, ESelectionService selectionService
) {
34 List
<?
> selection
= (List
<?
>) selectionService
.getSelection();
35 if (selection
== null)
38 JcrBrowserView view
= (JcrBrowserView
) part
.getObject();
41 StringBuffer buf
= new StringBuffer("");
42 for (Object o
: selection
) {
43 SingleJcrNodeElem sjn
= (SingleJcrNodeElem
) o
;
44 buf
.append(sjn
.getName()).append(' ');
46 Boolean doRemove
= MessageDialog
.openConfirm(Display
.getCurrent().getActiveShell(), "Confirm deletion",
47 "Do you want to delete " + buf
+ "?");
51 SingleJcrNodeElem ancestor
= null;
52 WorkspaceElem rootAncestor
= null;
54 for (Object obj
: selection
) {
55 if (obj
instanceof SingleJcrNodeElem
) {
57 SingleJcrNodeElem sjn
= (SingleJcrNodeElem
) obj
;
58 TreeParent tp
= (TreeParent
) sjn
.getParent();
59 Node node
= sjn
.getNode();
63 node
.getSession().save();
67 // Check if the parent is the root node
68 if (tp
instanceof WorkspaceElem
)
69 rootAncestor
= (WorkspaceElem
) tp
;
71 ancestor
= getOlder(ancestor
, (SingleJcrNodeElem
) tp
);
74 if (rootAncestor
!= null)
75 view
.nodeRemoved(rootAncestor
);
76 else if (ancestor
!= null)
77 view
.nodeRemoved(ancestor
);
78 } catch (Exception e
) {
79 ErrorFeedback
.show("Cannot delete selected node ", e
);
84 private SingleJcrNodeElem
getOlder(SingleJcrNodeElem A
, SingleJcrNodeElem B
) {
87 return B
== null ?
null : B
;
88 // Todo enhanced this method
90 return A
.getNode().getDepth() <= B
.getNode().getDepth() ? A
: B
;
91 } catch (RepositoryException re
) {
92 throw new EclipseUiException("Cannot find ancestor", re
);