Fix glitch on new user creation
authorBruno Sinou <bsinou@argeo.org>
Sat, 17 Oct 2015 22:25:41 +0000 (22:25 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sat, 17 Oct 2015 22:25:41 +0000 (22:25 +0000)
Enhance default Node editor

git-svn-id: https://svn.argeo.org/commons/trunk@8509 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/GenericNodeDoubleClickListener.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/NodeLabelProvider.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/NodeRightsManagementPage.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/messages.properties
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java

index b4f3de393a8d5070b6f12d4f0d78a88933c181d2..93d4c62656461c866a44fa2802c9f883ee06bb2d 100644 (file)
  */
 package org.argeo.eclipse.ui.workbench.jcr;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
 
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
@@ -31,12 +38,9 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.editor.FormEditor;
 
-/**
- * Container for the node editor page. At creation time, it takes a JCR Node
- * that cannot be changed afterwards.
- */
+/** Default form editor for a Jcr {@link Node} */
 public class DefaultNodeEditor extends FormEditor {
-       private static final long serialVersionUID = -5397680152514917137L;
+       private static final long serialVersionUID = 8322127770921612239L;
 
        // private final static Log log =
        // LogFactory.getLog(GenericNodeEditor.class);
@@ -75,19 +79,33 @@ public class DefaultNodeEditor extends FormEditor {
                                        currentNode);
                        addPage(childNodesPage);
 
-                       nodeRightsManagementPage = new NodeRightsManagementPage(this,
-                                       WorkbenchUiPlugin
-                                                       .getMessage("nodeRightsManagementPageTitle"),
-                                       currentNode);
-                       addPage(nodeRightsManagementPage);
-
-                       nodeVersionHistoryPage = new NodeVersionHistoryPage(
-                                       this,
-                                       WorkbenchUiPlugin.getMessage("nodeVersionHistoryPageTitle"),
-                                       currentNode);
-                       addPage(nodeVersionHistoryPage);
+                       AccessControlManager accessControlManager = currentNode
+                                       .getSession().getAccessControlManager();
+                       List<Privilege> privileges = new ArrayList<Privilege>();
+                       privileges.add(accessControlManager
+                                       .privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL));
+                       if (accessControlManager.hasPrivileges(currentNode.getPath(),
+                                       privileges.toArray(new Privilege[0]))) {
+                               nodeRightsManagementPage = new NodeRightsManagementPage(this,
+                                               WorkbenchUiPlugin
+                                                               .getMessage("nodeRightsManagementPageTitle"),
+                                               currentNode);
+                               addPage(nodeRightsManagementPage);
+                       }
+                       if (currentNode.isNodeType(NodeType.MIX_VERSIONABLE)) {
+                               nodeVersionHistoryPage = new NodeVersionHistoryPage(this,
+                                               WorkbenchUiPlugin
+                                                               .getMessage("nodeVersionHistoryPageTitle"),
+                                               currentNode);
+                               addPage(nodeVersionHistoryPage);
+                       }
+
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get node info for " + currentNode,
+                                       e);
                } catch (PartInitException e) {
-                       throw new ArgeoException("Not able to add an empty page ", e);
+                       throw new ArgeoException("Cannot add page " + "on node editor for "
+                                       + currentNode, e);
                }
        }
 
index 5c030c11a3fd2004ba89785acc112d356930090e..a70d9a52c2a2ec8cb22de47543834bf9d47acf12 100644 (file)
@@ -32,11 +32,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.ui.PartInitException;
 
-/**
- * Centralizes the management of double click on a NodeTreeViewer
- */
+/** Centralizes the management of double click on a NodeTreeViewer */
 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
-
        // private final static Log log = LogFactory
        // .getLog(GenericNodeDoubleClickListener.class);
 
index f8949e71e5bbe6d3e9462d67716eae77af9796c6..7e377d5168943d93ab95550bccd37cdbf512ed8b 100644 (file)
@@ -43,6 +43,8 @@ public class NodeLabelProvider extends ColumnLabelProvider {
                        if (element instanceof SingleJcrNodeElem) {
                                SingleJcrNodeElem sjn = (SingleJcrNodeElem) element;
                                return getText(sjn.getNode());
+                       } else if (element instanceof Node) {
+                               return getText((Node) element);
                        } else
                                return super.getText(element);
                } catch (RepositoryException e) {
@@ -83,7 +85,7 @@ public class NodeLabelProvider extends ColumnLabelProvider {
                } else if (element instanceof SingleJcrNodeElem) {
                        Node nodeElem = ((SingleJcrNodeElem) element).getNode();
                        return getImage(nodeElem);
-                                       
+
                        // if (element instanceof Node) {
                        // return getImage((Node) element);
                        // } else if (element instanceof WrappedNode) {
index 2340f362e3ef3b2f097950f0eb422e7aa668ca16..1a0b31dcf5644c6365179544cda70575026a2e3a 100644 (file)
@@ -18,16 +18,21 @@ package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
 import javax.jcr.Node;
 
 import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
-import org.argeo.eclipse.ui.workbench.jcr.internal.GenericNodeDoubleClickListener;
+import org.argeo.eclipse.ui.workbench.jcr.DefaultNodeEditor;
 import org.argeo.eclipse.ui.workbench.jcr.internal.NodeLabelProvider;
 import org.argeo.eclipse.ui.workbench.jcr.internal.SingleNodeAsTreeContentProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.editor.FormEditor;
 import org.eclipse.ui.forms.editor.FormPage;
@@ -64,7 +69,6 @@ public class ChildNodesPage extends FormPage {
                                managedForm.getToolkit().createLabel(body,
                                                WorkbenchUiPlugin.getMessage("warningNoChildNode"));
                        } else {
-
                                nodeContentProvider = new SingleNodeAsTreeContentProvider();
                                nodesViewer = createNodeViewer(body, nodeContentProvider);
                                nodesViewer.setInput(currentNode);
@@ -78,16 +82,37 @@ public class ChildNodesPage extends FormPage {
        protected TreeViewer createNodeViewer(Composite parent,
                        final ITreeContentProvider nodeContentProvider) {
 
-               final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
-
-               tmpNodeViewer.getTree().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
-
+               final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.BORDER);
+               Tree tree = tmpNodeViewer.getTree();
+               tree.setLinesVisible(true);
+               tmpNodeViewer.getTree().setLayoutData(EclipseUiUtils.fillAll());
                tmpNodeViewer.setContentProvider(nodeContentProvider);
                tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
-               tmpNodeViewer
-                               .addDoubleClickListener(new GenericNodeDoubleClickListener(
-                                               tmpNodeViewer));
+               tmpNodeViewer.addDoubleClickListener(new DClickListener());
                return tmpNodeViewer;
        }
-}
+
+       public class DClickListener implements IDoubleClickListener {
+
+               public void doubleClick(DoubleClickEvent event) {
+                       if (event.getSelection() == null || event.getSelection().isEmpty())
+                               return;
+                       Object obj = ((IStructuredSelection) event.getSelection())
+                                       .getFirstElement();
+                       if (obj instanceof Node) {
+                               Node node = (Node) obj;
+                               try {
+                                       GenericNodeEditorInput gnei = new GenericNodeEditorInput(
+                                                       node);
+                                       WorkbenchUiPlugin.getDefault().getWorkbench()
+                                                       .getActiveWorkbenchWindow().getActivePage()
+                                                       .openEditor(gnei, DefaultNodeEditor.ID);
+                               } catch (PartInitException pie) {
+                                       throw new ArgeoException(
+                                                       "Unexepected exception while opening node editor",
+                                                       pie);
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file
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);
                        }
                }
 
index 3023c523f69fc942edcdb2ffb39d273f091243ed..694a243378c983d83e104419424fd6da984d5ad1 100644 (file)
@@ -17,7 +17,7 @@ addFolderNodeCmdLbl= Add Folder
 nodeEditorLbl=Generic node editor
 genericNodePageTitle=Properties
 childNodesPageTitle=Children
-nodeRightsManagementPageTitle=Rights
+nodeRightsManagementPageTitle=Defined privileges
 nodeVersionHistoryPageTitle=History
 
 # History 
index 9d4151caf15826c100b126644ee5df961b138a11..7600883989eb33f3287eedb87880671dcbf6d401 100644 (file)
@@ -110,7 +110,7 @@ public class NewUser extends AbstractHandler {
 
                                String lastNameStr = lastNameTxt.getText();
                                if (UiAdminUtils.notNull(lastNameStr))
-                                       props.put(LdifName.dn.name(), lastNameStr);
+                                       props.put(LdifName.sn.name(), lastNameStr);
 
                                String firstNameStr = firstNameTxt.getText();
                                if (UiAdminUtils.notNull(firstNameStr))