Fix glitch on new user creation
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui.workbench / src / org / argeo / eclipse / ui / workbench / jcr / internal / parts / NodeRightsManagementPage.java
index 212244be37ab691c13c8451ca71ff58880a3d595..6c3e488891f6963fae4794839cd6b24a9a4d43f7 100644 (file)
  */
 package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.jcr.Node;
-import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.Privilege;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
 
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
@@ -61,37 +65,67 @@ public class NodeRightsManagementPage extends FormPage {
                createRightsPart(form.getBody());
        }
 
-       /** Creates the rights part */
+       /** 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);
 
-               // check column
-               TableViewerColumn column = createTableViewerColumn(viewer, "checked",
-                               20);
+               // Group / user name
+               TableViewerColumn column = createTableViewerColumn(viewer,
+                               "User/Group Name", 280);
                column.setLabelProvider(new ColumnLabelProvider() {
-                       private static final long serialVersionUID = 3314605415711811035L;
+                       private static final long serialVersionUID = -2290781173498395973L;
 
                        public String getText(Object element) {
-                               return null;
+                               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;
                        }
                });
-               // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
 
-               // role column
-               column = createTableViewerColumn(viewer, "Role", 200);
+               // 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) {
-                               Privilege p = (Privilege) element;
-                               return p.getName();
+                               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) {
@@ -123,15 +157,24 @@ public class NodeRightsManagementPage extends FormPage {
                public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
                }
 
+               // TODO clean retrieval of authorization
                public Object[] getElements(Object inputElement) {
                        try {
-                               AccessControlManager accessControlManager = currentNode
-                                               .getSession().getAccessControlManager();
-                               Privilege[] privileges = accessControlManager
-                                               .getPrivileges(currentNode.getPath());
-                               return privileges;
+                               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 rights", e);
+                               throw new ArgeoException("Cannot retrieve authorization on "
+                                               + currentNode, e);
                        }
                }