From ab81a6a1a62b51e670eae7482b1aa9181801cfbd Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Sun, 18 Oct 2015 10:12:23 +0000 Subject: [PATCH] Enhance privilege display to ease JCR privilege management git-svn-id: https://svn.argeo.org/commons/trunk@8510 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/workbench/jcr/DefaultNodeEditor.java | 6 +- ...ementPage.java => NodePrivilegesPage.java} | 72 ++++++++++++++----- .../eclipse/ui/workbench/messages.properties | 2 +- 3 files changed, 57 insertions(+), 23 deletions(-) rename org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/{NodeRightsManagementPage.java => NodePrivilegesPage.java} (77%) diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/DefaultNodeEditor.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/DefaultNodeEditor.java index 93d4c6265..91a2cadec 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/DefaultNodeEditor.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/DefaultNodeEditor.java @@ -29,7 +29,7 @@ import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.eclipse.ui.workbench.jcr.internal.parts.ChildNodesPage; import org.argeo.eclipse.ui.workbench.jcr.internal.parts.GenericNodeEditorInput; import org.argeo.eclipse.ui.workbench.jcr.internal.parts.GenericPropertyPage; -import org.argeo.eclipse.ui.workbench.jcr.internal.parts.NodeRightsManagementPage; +import org.argeo.eclipse.ui.workbench.jcr.internal.parts.NodePrivilegesPage; import org.argeo.eclipse.ui.workbench.jcr.internal.parts.NodeVersionHistoryPage; import org.argeo.jcr.JcrUtils; import org.eclipse.core.runtime.IProgressMonitor; @@ -50,7 +50,7 @@ public class DefaultNodeEditor extends FormEditor { private GenericPropertyPage genericPropertyPage; private ChildNodesPage childNodesPage; - private NodeRightsManagementPage nodeRightsManagementPage; + private NodePrivilegesPage nodeRightsManagementPage; private NodeVersionHistoryPage nodeVersionHistoryPage; public void init(IEditorSite site, IEditorInput input) @@ -86,7 +86,7 @@ public class DefaultNodeEditor extends FormEditor { .privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL)); if (accessControlManager.hasPrivileges(currentNode.getPath(), privileges.toArray(new Privilege[0]))) { - nodeRightsManagementPage = new NodeRightsManagementPage(this, + nodeRightsManagementPage = new NodePrivilegesPage(this, WorkbenchUiPlugin .getMessage("nodeRightsManagementPageTitle"), currentNode); diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java similarity index 77% rename from org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java rename to org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java index 6c3e48889..799dedcad 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java @@ -42,16 +42,15 @@ import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ScrolledForm; /** Display and edit a given node rights */ -public class NodeRightsManagementPage extends FormPage { +public class NodePrivilegesPage extends FormPage { - private Node currentNode; + private Node context; private TableViewer viewer; - public NodeRightsManagementPage(FormEditor editor, String title, - Node currentNode) { - super(editor, "NodeRightsManagementPage", title); - this.currentNode = currentNode; + public NodePrivilegesPage(FormEditor editor, String title, Node context) { + super(editor, "NodePrivilegesPage", title); + this.context = context; } protected void createFormContent(IManagedForm managedForm) { @@ -132,6 +131,29 @@ public class NodeRightsManagementPage extends FormPage { return null; } }); + + // Relevant node + column = createTableViewerColumn(viewer, "Relevant node", 300); + column.setLabelProvider(new ColumnLabelProvider() { + /** + * + */ + private static final long serialVersionUID = 4245522992038244849L; + + public String getText(Object element) { + Node node = (Node) element; + try { + return node.getParent().getParent().getPath(); + } catch (RepositoryException e) { + throw new ArgeoException("Unable get path for " + node, e); + } + } + + public Image getImage(Object element) { + return null; + } + }); + viewer.setContentProvider(new RightsContentProvider()); viewer.setInput(getEditorSite()); } @@ -157,26 +179,38 @@ public class NodeRightsManagementPage extends FormPage { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } - // TODO clean retrieval of authorization + // TODO JackRabbit specific retrieval of authorization. Clean and + // generalize public Object[] getElements(Object inputElement) { try { List privs = new ArrayList(); - if (currentNode.hasNode("rep:policy")) { - NodeIterator nit = currentNode.getNode("rep:policy") - .getNodes(); - while (nit.hasNext()) { - Node currNode = nit.nextNode(); - if (currNode.getName().equals("allow")) - privs.add(currNode); + + Node currNode = context; + String currPath = currNode.getPath(); + + loop: while (true) { + if (currNode.hasNode("rep:policy")) { + NodeIterator nit = currNode.getNode("rep:policy") + .getNodes(); + while (nit.hasNext()) { + Node currPrivNode = nit.nextNode(); + if (currPrivNode.getName().equals("allow")) + privs.add(currPrivNode); + } + } + if ("/".equals(currPath)) + break loop; + else { + currNode = currNode.getParent(); + currPath = currNode.getPath(); } - return privs.toArray(); } - return null; + + return privs.toArray(); } catch (Exception e) { - throw new ArgeoException("Cannot retrieve authorization on " - + currentNode, e); + throw new ArgeoException("Cannot retrieve authorization for " + + context, e); } } - } } diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties index 694a24337..2eb9a012d 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties @@ -17,7 +17,7 @@ addFolderNodeCmdLbl= Add Folder nodeEditorLbl=Generic node editor genericNodePageTitle=Properties childNodesPageTitle=Children -nodeRightsManagementPageTitle=Defined privileges +nodeRightsManagementPageTitle=Effective privileges nodeVersionHistoryPageTitle=History # History -- 2.30.2