Enhance privilege display to ease JCR privilege management
authorBruno Sinou <bsinou@argeo.org>
Sun, 18 Oct 2015 10:12:23 +0000 (10:12 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sun, 18 Oct 2015 10:12:23 +0000 (10:12 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8510 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/DefaultNodeEditor.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodePrivilegesPage.java [new file with mode: 0644]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java [deleted file]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties

index 93d4c62656461c866a44fa2802c9f883ee06bb2d..91a2cadecb1ae0349ecb60fe8a4f60b67fb2dc95 100644 (file)
@@ -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 (file)
index 0000000..799dedc
--- /dev/null
@@ -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<Node> privs = new ArrayList<Node>();
+
+                               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 (file)
index 6c3e488..0000000
+++ /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<Node> privs = new ArrayList<Node>();
-                               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);
-                       }
-               }
-
-       }
-}
index 694a243378c983d83e104419424fd6da984d5ad1..2eb9a012dff31898ed48503c5401402de62c7f86 100644 (file)
@@ -17,7 +17,7 @@ addFolderNodeCmdLbl= Add Folder
 nodeEditorLbl=Generic node editor
 genericNodePageTitle=Properties
 childNodesPageTitle=Children
-nodeRightsManagementPageTitle=Defined privileges
+nodeRightsManagementPageTitle=Effective privileges
 nodeVersionHistoryPageTitle=History
 
 # History