From: Bruno Sinou Date: Sat, 17 Oct 2015 22:25:41 +0000 (+0000) Subject: Fix glitch on new user creation X-Git-Tag: argeo-commons-2.1.30~70 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=d249537c17dc045b106bb661cf74e8c98d8b2a48;p=lgpl%2Fargeo-commons.git Fix glitch on new user creation Enhance default Node editor git-svn-id: https://svn.argeo.org/commons/trunk@8509 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 b4f3de393..93d4c6265 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 @@ -15,7 +15,14 @@ */ 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 privileges = new ArrayList(); + 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); } } diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/GenericNodeDoubleClickListener.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/GenericNodeDoubleClickListener.java index 5c030c11a..a70d9a52c 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/GenericNodeDoubleClickListener.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/GenericNodeDoubleClickListener.java @@ -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); diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/NodeLabelProvider.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/NodeLabelProvider.java index f8949e71e..7e377d516 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/NodeLabelProvider.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/NodeLabelProvider.java @@ -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) { diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java index 2340f362e..1a0b31dcf 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java @@ -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 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 index 212244be3..6c3e48889 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/NodeRightsManagementPage.java @@ -15,9 +15,13 @@ */ 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 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 rights", 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 3023c523f..694a24337 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=Rights +nodeRightsManagementPageTitle=Defined privileges nodeVersionHistoryPageTitle=History # History diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java index 9d4151caf..760088398 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java @@ -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))