From: Bruno Sinou Date: Sun, 18 Oct 2015 10:12:23 +0000 (+0000) Subject: Enhance privilege display to ease JCR privilege management X-Git-Tag: argeo-commons-2.1.30~69 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=ab81a6a1a62b51e670eae7482b1aa9181801cfbd;p=lgpl%2Fargeo-commons.git Enhance privilege display to ease JCR privilege management git-svn-id: https://svn.argeo.org/commons/trunk@8510 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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/NodePrivilegesPage.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java new file mode 100644 index 000000000..799dedcad --- /dev/null +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.eclipse.ui.workbench.jcr.internal.parts; + +import java.util.ArrayList; +import java.util.List; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; +import javax.jcr.Value; + +import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; +import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.editor.FormEditor; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.widgets.ScrolledForm; + +/** Display and edit a given node rights */ +public class NodePrivilegesPage extends FormPage { + + private Node context; + + private TableViewer viewer; + + public NodePrivilegesPage(FormEditor editor, String title, Node context) { + super(editor, "NodePrivilegesPage", title); + this.context = context; + } + + protected void createFormContent(IManagedForm managedForm) { + ScrolledForm form = managedForm.getForm(); + form.setText(WorkbenchUiPlugin + .getMessage("nodeRightsManagementPageTitle")); + FillLayout layout = new FillLayout(); + layout.marginHeight = 5; + layout.marginWidth = 5; + form.getBody().setLayout(layout); + createRightsPart(form.getBody()); + } + + /** Creates the authorization part */ + protected void createRightsPart(Composite parent) { + Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + table.setLinesVisible(true); + table.setHeaderVisible(true); + viewer = new TableViewer(table); + + // Group / user name + TableViewerColumn column = createTableViewerColumn(viewer, + "User/Group Name", 280); + column.setLabelProvider(new ColumnLabelProvider() { + private static final long serialVersionUID = -2290781173498395973L; + + public String getText(Object element) { + Node node = (Node) element; + try { + if (node.hasProperty("rep:principalName")) + return node.getProperty("rep:principalName") + .getString(); + } catch (RepositoryException e) { + throw new ArgeoException("Unable to retrieve " + + "principal name on " + node, e); + } + return ""; + } + + public Image getImage(Object element) { + return null; + } + }); + + // Privileges + column = createTableViewerColumn(viewer, "Assigned privileges", 300); + column.setLabelProvider(new ColumnLabelProvider() { + private static final long serialVersionUID = -2290781173498395973L; + private String propertyName = "rep:privileges"; + + public String getText(Object element) { + Node node = (Node) element; + try { + if (node.hasProperty(propertyName)) { + String separator = ", "; + Value[] langs = node.getProperty(propertyName) + .getValues(); + StringBuilder builder = new StringBuilder(); + for (Value val : langs) { + String currStr = val.getString(); + builder.append(currStr).append(separator); + } + if (builder.lastIndexOf(separator) >= 0) + return builder.substring(0, builder.length() + - separator.length()); + else + return builder.toString(); + + } + } catch (RepositoryException e) { + throw new ArgeoException("Unable to retrieve " + + "privileges on " + node, e); + } + return ""; + } + + public Image getImage(Object element) { + 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()); + } + + protected TableViewerColumn createTableViewerColumn(TableViewer viewer, + String title, int bound) { + final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, + SWT.NONE); + final TableColumn column = viewerColumn.getColumn(); + column.setText(title); + column.setWidth(bound); + column.setResizable(true); + column.setMoveable(true); + return viewerColumn; + } + + private class RightsContentProvider implements IStructuredContentProvider { + private static final long serialVersionUID = -7631476348552802706L; + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + // TODO JackRabbit specific retrieval of authorization. Clean and + // generalize + public Object[] getElements(Object inputElement) { + try { + List privs = new ArrayList(); + + 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(); + } catch (Exception e) { + throw new ArgeoException("Cannot retrieve authorization for " + + context, e); + } + } + } +} 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/NodeRightsManagementPage.java deleted file mode 100644 index 6c3e48889..000000000 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.eclipse.ui.workbench.jcr.internal.parts; - -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; -import javax.jcr.Value; - -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -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 { - - private Node currentNode; - - private TableViewer viewer; - - public NodeRightsManagementPage(FormEditor editor, String title, - Node currentNode) { - super(editor, "NodeRightsManagementPage", title); - this.currentNode = currentNode; - } - - protected void createFormContent(IManagedForm managedForm) { - ScrolledForm form = managedForm.getForm(); - form.setText(WorkbenchUiPlugin - .getMessage("nodeRightsManagementPageTitle")); - FillLayout layout = new FillLayout(); - layout.marginHeight = 5; - layout.marginWidth = 5; - form.getBody().setLayout(layout); - createRightsPart(form.getBody()); - } - - /** Creates the authorization part */ - protected void createRightsPart(Composite parent) { - Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - table.setLinesVisible(true); - table.setHeaderVisible(true); - viewer = new TableViewer(table); - - // Group / user name - TableViewerColumn column = createTableViewerColumn(viewer, - "User/Group Name", 280); - column.setLabelProvider(new ColumnLabelProvider() { - private static final long serialVersionUID = -2290781173498395973L; - - public String getText(Object element) { - Node node = (Node) element; - try { - if (node.hasProperty("rep:principalName")) - return node.getProperty("rep:principalName") - .getString(); - } catch (RepositoryException e) { - throw new ArgeoException("Unable to retrieve " - + "principal name on " + node, e); - } - return ""; - } - - public Image getImage(Object element) { - return null; - } - }); - - // Privileges - column = createTableViewerColumn(viewer, "Assigned privileges", 300); - column.setLabelProvider(new ColumnLabelProvider() { - private static final long serialVersionUID = -2290781173498395973L; - private String propertyName = "rep:privileges"; - - public String getText(Object element) { - Node node = (Node) element; - try { - if (node.hasProperty(propertyName)) { - String separator = ", "; - Value[] langs = node.getProperty(propertyName) - .getValues(); - StringBuilder builder = new StringBuilder(); - for (Value val : langs) { - String currStr = val.getString(); - builder.append(currStr).append(separator); - } - if (builder.lastIndexOf(separator) >= 0) - return builder.substring(0, builder.length() - - separator.length()); - else - return builder.toString(); - - } - } catch (RepositoryException e) { - throw new ArgeoException("Unable to retrieve " - + "privileges on " + node, e); - } - return ""; - } - - public Image getImage(Object element) { - return null; - } - }); - viewer.setContentProvider(new RightsContentProvider()); - viewer.setInput(getEditorSite()); - } - - protected TableViewerColumn createTableViewerColumn(TableViewer viewer, - String title, int bound) { - final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, - SWT.NONE); - final TableColumn column = viewerColumn.getColumn(); - column.setText(title); - column.setWidth(bound); - column.setResizable(true); - column.setMoveable(true); - return viewerColumn; - } - - private class RightsContentProvider implements IStructuredContentProvider { - private static final long serialVersionUID = -7631476348552802706L; - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - // TODO clean retrieval of authorization - 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); - } - return privs.toArray(); - } - return null; - } catch (Exception e) { - throw new ArgeoException("Cannot retrieve authorization on " - + currentNode, 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