Work on user UI
authorBruno Sinou <bsinou@argeo.org>
Fri, 16 Oct 2015 15:31:14 +0000 (15:31 +0000)
committerBruno Sinou <bsinou@argeo.org>
Fri, 16 Oct 2015 15:31:14 +0000 (15:31 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8497 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

21 files changed:
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddPrivileges.java
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/AddPrivilegeWizard.java [new file with mode: 0644]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChangeRightsWizard.java [deleted file]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChooseRightsPage.java [deleted file]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/GroupLP.java [deleted file]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpGroupDialog.java [deleted file]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpUserDialog.java [new file with mode: 0644]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/UserLP.java [new file with mode: 0644]
org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/internal/UsersUtils.java
org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifName.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UsersView.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/DomainNameLP.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/MailLP.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/UserFilter.java [new file with mode: 0644]

index 49ed4378f8ca5959bdceb9bd060ac8ba7595c422..4e0a0454612ce74ad6925f0822f8dc41ec19b99f 100644 (file)
@@ -24,7 +24,7 @@ import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
 import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem;
 import org.argeo.eclipse.ui.workbench.jcr.internal.model.WorkspaceElem;
-import org.argeo.eclipse.ui.workbench.jcr.internal.parts.ChangeRightsWizard;
+import org.argeo.eclipse.ui.workbench.jcr.internal.parts.AddPrivilegeWizard;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -61,17 +61,17 @@ public class AddPrivileges extends AbstractHandler {
                                return null;
 
                        try {
-                               ChangeRightsWizard wizard = new ChangeRightsWizard(
-                                               jcrParentNode.getSession(), jcrParentNode.getPath(),
-                                               userAdmin);
+                               String targetPath = jcrParentNode.getPath();
+                               AddPrivilegeWizard wizard = new AddPrivilegeWizard(
+                                               jcrParentNode.getSession(), targetPath, userAdmin);
                                WizardDialog dialog = new WizardDialog(
                                                HandlerUtil.getActiveShell(event), wizard);
                                dialog.open();
                                return null;
                        } catch (RepositoryException re) {
-                               throw new ArgeoException(
-                                               "Unexpected error while creating the new workspace.",
-                                               re);
+                               throw new ArgeoException("Unable to retrieve "
+                                               + "path or JCR session to add privilege on "
+                                               + jcrParentNode, re);
                        }
                } else {
                        ErrorFeedback.show("Cannot add privileges");
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/AddPrivilegeWizard.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/AddPrivilegeWizard.java
new file mode 100644 (file)
index 0000000..52cf087
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * 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.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.security.Privilege;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.workbench.users.PickUpUserDialog;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.jcr.JcrUtils;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Text;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+/** Add Jcr privileges to the chosen user group on a given node */
+public class AddPrivilegeWizard extends Wizard {
+
+       // Context
+       private UserAdmin userAdmin;
+       private Session currentSession;
+       private String targetPath;
+       // Chosen parameters
+       private User chosenUser;
+       private String jcrPrivilege;
+
+       // UI Object
+       private DefinePrivilegePage page;
+
+       // TODO enable external definition of possible values and corresponding
+       // description
+       protected static final Map<String, String> AUTH_TYPE_LABELS;
+       static {
+               Map<String, String> tmpMap = new HashMap<String, String>();
+               tmpMap.put(Privilege.JCR_READ, "jcr:read");
+               tmpMap.put(Privilege.JCR_WRITE, "jcr:write");
+               tmpMap.put(Privilege.JCR_ALL, "jcr:all");
+               AUTH_TYPE_LABELS = Collections.unmodifiableMap(tmpMap);
+       }
+
+       protected static final Map<String, String> AUTH_TYPE_DESC;
+       static {
+               Map<String, String> tmpMap = new HashMap<String, String>();
+               tmpMap.put(Privilege.JCR_READ,
+                               "The privilege to retrieve a node and get its properties and their values.");
+               tmpMap.put(Privilege.JCR_WRITE, "An aggregate privilege that "
+                               + "contains: jcr:modifyProperties, jcr:addChildNodes, "
+                               + "jcr:removeNode, jcr:removeChildNodes");
+               tmpMap.put(Privilege.JCR_ALL, "An aggregate privilege that "
+                               + "contains all JCR predefined privileges, "
+                               + "plus all implementation-defined privileges. ");
+               AUTH_TYPE_DESC = Collections.unmodifiableMap(tmpMap);
+       }
+
+       public AddPrivilegeWizard(Session currentSession, String path,
+                       UserAdmin userAdmin) {
+               super();
+               this.userAdmin = userAdmin;
+               this.currentSession = currentSession;
+               this.targetPath = path;
+       }
+
+       @Override
+       public void addPages() {
+               try {
+                       setWindowTitle("Add privilege on " + targetPath);
+                       page = new DefinePrivilegePage(userAdmin, targetPath);
+                       addPage(page);
+               } catch (Exception e) {
+                       throw new ArgeoException("Cannot add page to wizard ", e);
+               }
+       }
+
+       @Override
+       public boolean performFinish() {
+               if (!canFinish())
+                       return false;
+               try {
+                       JcrUtils.addPrivilege(currentSession, targetPath,
+                                       chosenUser.getName(), jcrPrivilege);
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Cannot set " + jcrPrivilege + " for "
+                                       + chosenUser.getName() + " on " + targetPath, re);
+               }
+               return true;
+       }
+
+       private class DefinePrivilegePage extends WizardPage implements
+                       ModifyListener {
+               private static final long serialVersionUID = 8084431378762283920L;
+
+               // Context
+               final private UserAdmin userAdmin;
+
+               public DefinePrivilegePage(UserAdmin userAdmin, String path) {
+                       super("Main");
+                       this.userAdmin = userAdmin;
+                       setTitle("Define the privilege to apply to " + path);
+                       setMessage("Please choose a user or a group and relevant JCR Privilege.");
+               }
+
+               public void createControl(Composite parent) {
+                       final Composite composite = new Composite(parent, SWT.NONE);
+                       composite.setLayout(new GridLayout(3, false));
+
+                       // specify subject
+                       createBoldLabel(composite, "User or group name");
+                       final Label groupNameLbl = new Label(composite, SWT.LEAD);
+                       groupNameLbl.setLayoutData(EclipseUiUtils.fillWidth());
+
+                       Link pickUpLk = new Link(composite, SWT.LEFT);
+                       pickUpLk.setText(" <a>Change</a> ");
+
+                       createBoldLabel(composite, "User or group DN");
+                       final Text groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
+                       groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth(2));
+
+                       pickUpLk.addSelectionListener(new SelectionAdapter() {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       PickUpUserDialog dialog = new PickUpUserDialog(
+                                                       getShell(), "Choose a group or a user", userAdmin);
+                                       if (dialog.open() == Window.OK) {
+                                               chosenUser = dialog.getSelected();
+                                               groupNameLbl.setText(UsersUtils
+                                                               .getCommonName(chosenUser));
+                                               groupNameTxt.setText(chosenUser.getName());
+                                       }
+                               }
+                       });
+
+                       groupNameTxt.addFocusListener(new FocusListener() {
+                               private static final long serialVersionUID = 1965498600105667738L;
+
+                               @Override
+                               public void focusLost(FocusEvent event) {
+                                       String dn = groupNameTxt.getText();
+                                       User newChosen = null;
+                                       try {
+                                               newChosen = (User) userAdmin.getRole(dn);
+                                       } catch (Exception e) {
+                                               boolean tryAgain = MessageDialog.openQuestion(
+                                                               getShell(), "Unvalid DN",
+                                                               "DN " + dn + " is not valid.\nError message: "
+                                                                               + e.getMessage()
+                                                                               + "\n\t\tDo you want to try again?");
+                                               if (tryAgain)
+                                                       groupNameTxt.setFocus();
+                                               else
+                                                       resetOnFail();
+                                       }
+
+                                       if (userAdmin.getRole(dn) == null) {
+                                               boolean tryAgain = MessageDialog.openQuestion(
+                                                               getShell(), "Unexisting role", "User/group "
+                                                                               + dn + " does not exist. "
+                                                                               + "Do you want to try again?");
+                                               if (tryAgain)
+                                                       groupNameTxt.setFocus();
+                                               else
+                                                       resetOnFail();
+                                       } else {
+                                               chosenUser = newChosen;
+                                               groupNameLbl.setText(UsersUtils
+                                                               .getCommonName(chosenUser));
+                                       }
+                               }
+
+                               private void resetOnFail() {
+                                       String oldDn = chosenUser == null ? "" : chosenUser
+                                                       .getName();
+                                       groupNameTxt.setText(oldDn);
+                               }
+
+                               @Override
+                               public void focusGained(FocusEvent event) {
+                               }
+                       });
+
+                       // JCR Privileges
+                       createBoldLabel(composite, "Privilege type");
+                       Combo authorizationCmb = new Combo(composite, SWT.BORDER
+                                       | SWT.READ_ONLY | SWT.V_SCROLL);
+                       authorizationCmb.setItems(AUTH_TYPE_LABELS.values().toArray(
+                                       new String[0]));
+                       authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
+                       createBoldLabel(composite, ""); // empty cell
+                       final Label descLbl = new Label(composite, SWT.WRAP);
+                       descLbl.setLayoutData(EclipseUiUtils.fillWidth(2));
+
+                       authorizationCmb.addSelectionListener(new SelectionAdapter() {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       String chosenPrivStr = ((Combo) e.getSource()).getText();
+                                       if (AUTH_TYPE_LABELS.containsValue(chosenPrivStr)) {
+                                               loop: for (String key : AUTH_TYPE_LABELS.keySet()) {
+                                                       if (AUTH_TYPE_LABELS.get(key).equals(chosenPrivStr)) {
+                                                               jcrPrivilege = key;
+                                                               break loop;
+                                                       }
+                                               }
+                                       }
+
+                                       if (jcrPrivilege != null) {
+                                               descLbl.setText(AUTH_TYPE_DESC.get(jcrPrivilege));
+                                               composite.layout(true, true);
+                                       }
+                               }
+                       });
+
+                       // Compulsory
+                       setControl(composite);
+               }
+
+               public void modifyText(ModifyEvent event) {
+                       String message = checkComplete();
+                       if (message != null)
+                               setMessage(message, WizardPage.ERROR);
+                       else {
+                               setMessage("Complete", WizardPage.INFORMATION);
+                               setPageComplete(true);
+                       }
+               }
+
+               /** @return error message or null if complete */
+               protected String checkComplete() {
+                       if (chosenUser == null)
+                               return "Please choose a relevant group or user";
+                       else if (userAdmin.getRole(chosenUser.getName()) == null)
+                               return "Please choose a relevant group or user";
+                       else if (jcrPrivilege == null)
+                               return "Please choose a relevant JCR privilege";
+                       return null;
+               }
+       }
+
+       private Label createBoldLabel(Composite parent, String value) {
+               Label label = new Label(parent, SWT.RIGHT);
+               label.setText(" " + value);
+               label.setFont(EclipseUiUtils.getBoldFont(parent));
+               label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+               return label;
+       }
+}
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChangeRightsWizard.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChangeRightsWizard.java
deleted file mode 100644 (file)
index 2339ce1..0000000
+++ /dev/null
@@ -1,171 +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 javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.security.Privilege;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.workbench.users.PickUpGroupDialog;
-import org.argeo.jcr.JcrUtils;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Add Jcr privileges to the chosen user group on a given node */
-public class ChangeRightsWizard extends Wizard {
-
-       private UserAdmin userAdmin;
-       private Session currentSession;
-       private String path;
-
-       // This page widget
-       private DefinePrivilegePage page;
-
-       // USABLE SHORTCUTS
-       protected final static String[] validAuthType = { Privilege.JCR_READ,
-                       Privilege.JCR_WRITE, Privilege.JCR_ALL };
-
-       public ChangeRightsWizard(Session currentSession, String path,
-                       UserAdmin userAdmin) {
-               super();
-               this.userAdmin = userAdmin;
-               this.currentSession = currentSession;
-               this.path = path;
-       }
-
-       @Override
-       public void addPages() {
-               try {
-                       page = new DefinePrivilegePage(userAdmin, path);
-                       addPage(page);
-               } catch (Exception e) {
-                       throw new ArgeoException("Cannot add page to wizard ", e);
-               }
-       }
-
-       @Override
-       public boolean performFinish() {
-               if (!canFinish())
-                       return false;
-               try {
-                       JcrUtils.addPrivilege(currentSession, path, page.getGroupName(),
-                                       page.getAuthTypeStr());
-               } catch (RepositoryException re) {
-                       throw new ArgeoException(
-                                       "Unexpected error while setting privileges", re);
-               }
-               return true;
-       }
-
-       private class DefinePrivilegePage extends WizardPage implements ModifyListener {
-               private static final long serialVersionUID = 8084431378762283920L;
-
-               // Context
-               final private UserAdmin userAdmin;
-
-               // This page widget
-               private Text groupNameTxt;
-               private Combo authorizationCmb;
-
-               public DefinePrivilegePage(UserAdmin userAdmin, String path) {
-                       super("Main");
-                       this.userAdmin = userAdmin;
-                       setTitle("Define the privilege to apply to " + path);
-               }
-
-               public void createControl(Composite parent) {
-                       // specify subject
-                       Composite composite = new Composite(parent, SWT.NONE);
-                       composite.setLayout(new GridLayout(3, false));
-                       Label lbl = new Label(composite, SWT.LEAD);
-                       lbl.setText("Group name");
-                       lbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
-                       groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
-                       groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth());
-                       if (groupNameTxt != null)
-                               groupNameTxt.addModifyListener(this);
-
-                       Link pickUpLk = new Link(composite, SWT.LEFT);
-                       pickUpLk.setText(" <a>Pick up</a> ");
-                       pickUpLk.addSelectionListener(new SelectionAdapter() {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               public void widgetSelected(SelectionEvent e) {
-                                       PickUpGroupDialog dialog = new PickUpGroupDialog(
-                                                       getShell(), "Choose a group", userAdmin);
-                                       if (dialog.open() == Window.OK)
-                                               groupNameTxt.setText(dialog.getSelected());
-                               }
-
-                       });
-
-                       // Choose rigths
-                       new Label(composite, SWT.NONE)
-                                       .setText("Choose corresponding rights");
-                       authorizationCmb = new Combo(composite, SWT.BORDER | SWT.V_SCROLL);
-                       authorizationCmb.setItems(validAuthType);
-                       authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
-                       authorizationCmb.select(0);
-
-                       // Compulsory
-                       setControl(composite);
-               }
-
-               protected String getGroupName() {
-                       return groupNameTxt.getText();
-               }
-
-               protected String getAuthTypeStr() {
-                       return authorizationCmb.getItem(authorizationCmb
-                                       .getSelectionIndex());
-               }
-
-               public void modifyText(ModifyEvent event) {
-                       String message = checkComplete();
-                       if (message != null)
-                               setMessage(message, WizardPage.ERROR);
-                       else {
-                               setMessage("Complete", WizardPage.INFORMATION);
-                               setPageComplete(true);
-                       }
-               }
-
-               /** @return error message or null if complete */
-               protected String checkComplete() {
-                       String groupStr = groupNameTxt.getText();
-                       if (groupStr == null || "".equals(groupStr))
-                               return "Please enter the name of the corresponding group.";
-                       return null;
-               }
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChooseRightsPage.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChooseRightsPage.java
deleted file mode 100644 (file)
index 09c653c..0000000
+++ /dev/null
@@ -1,123 +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 javax.jcr.security.Privilege;
-
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.workbench.users.PickUpGroupDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Simple wizard page to choose a group and corresponding rights to assign */
-public class ChooseRightsPage extends WizardPage implements ModifyListener {
-       private static final long serialVersionUID = 8084431378762283920L;
-
-       // Context
-       final private UserAdmin userAdmin;
-
-       // This page widget
-       private Text groupNameTxt;
-       private Combo authorizationCmb;
-
-       // USABLE SHORTCUTS
-       protected final static String[] validAuthType = { Privilege.JCR_READ,
-                       Privilege.JCR_WRITE, Privilege.JCR_ALL };
-
-       public ChooseRightsPage(UserAdmin userAdmin, String path) {
-               super("Main");
-               this.userAdmin = userAdmin;
-               setTitle("Add privilege to " + path);
-       }
-
-       public void createControl(Composite parent) {
-               // specify subject
-               Composite composite = new Composite(parent, SWT.NONE);
-               composite.setLayout(new GridLayout(3, false));
-               Label lbl = new Label(composite, SWT.LEAD);
-               lbl.setText("Group name");
-               // lbl.setText("Group or user name (no blank, no special chars)");
-               lbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
-               groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
-               groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth());
-               if (groupNameTxt != null)
-                       groupNameTxt.addModifyListener(this);
-
-               Link pickUpLk = new Link(composite, SWT.LEFT);
-               pickUpLk.setText("<a>Pick up</a>");
-               pickUpLk.addSelectionListener(new SelectionAdapter() {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               PickUpGroupDialog dialog = new PickUpGroupDialog(getShell(),
-                                               "Choose a group", userAdmin);
-                               if (dialog.open() == Window.OK)
-                                       groupNameTxt.setText(dialog.getSelected());
-                       }
-
-               });
-
-               // Choose rigths
-               new Label(composite, SWT.NONE).setText("Choose corresponding rights");
-               authorizationCmb = new Combo(composite, SWT.BORDER | SWT.V_SCROLL);
-               authorizationCmb.setItems(validAuthType);
-               authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
-               authorizationCmb.select(0);
-
-               // Compulsory
-               setControl(composite);
-       }
-
-       protected String getGroupName() {
-               return groupNameTxt.getText();
-       }
-
-       protected String getAuthTypeStr() {
-               return authorizationCmb.getItem(authorizationCmb.getSelectionIndex());
-       }
-
-       public void modifyText(ModifyEvent event) {
-               String message = checkComplete();
-               if (message != null)
-                       setMessage(message, WizardPage.ERROR);
-               else {
-                       setMessage("Complete", WizardPage.INFORMATION);
-                       setPageComplete(true);
-               }
-       }
-
-       /** @return error message or null if complete */
-       protected String checkComplete() {
-               String groupStr = groupNameTxt.getText();
-               if (groupStr == null || "".equals(groupStr))
-                       return "Please enter the name of the corresponding group.";
-               return null;
-       }
-}
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/GroupLP.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/GroupLP.java
deleted file mode 100644 (file)
index 5e054dc..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.argeo.eclipse.ui.workbench.users;
-
-import java.util.List;
-
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.workbench.users.internal.UsersImages;
-import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
-import org.argeo.osgi.useradmin.LdifName;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-
-/** Centralize label providers for the group table */
-class GroupLP extends ColumnLabelProvider {
-       private static final long serialVersionUID = -4645930210988368571L;
-
-       // TODO this constant is defined in the CMS
-       final static String ROLES_BASEDN = "ou=roles,ou=node";
-
-       final static String COL_ICON = "colID.icon";
-       final static String COL_DN = "colID.dn";
-       final static String COL_DISPLAY_NAME = "colID.displayName";
-       final static String COL_DOMAIN = "colID.domain";
-
-       final String currType;
-
-       // private Font italic;
-       private Font bold;
-
-       GroupLP(String colId) {
-               this.currType = colId;
-       }
-
-       @Override
-       public Font getFont(Object element) {
-               // Self as bold
-               try {
-                       LdapName selfUserName = UsersUtils.getLdapName();
-                       String userName = UsersUtils.getProperty((User) element,
-                                       LdifName.dn.name());
-                       LdapName userLdapName = new LdapName(userName);
-                       if (userLdapName.equals(selfUserName)) {
-                               if (bold == null)
-                                       bold = JFaceResources.getFontRegistry()
-                                                       .defaultFontDescriptor().setStyle(SWT.BOLD)
-                                                       .createFont(Display.getCurrent());
-                               return bold;
-                       }
-               } catch (InvalidNameException e) {
-                       throw new ArgeoException("cannot parse dn for " + element, e);
-               }
-
-               // Disabled as Italic
-               // Node userProfile = (Node) elem;
-               // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
-               // return italic;
-
-               return null;
-               // return super.getFont(element);
-       }
-
-       @Override
-       public Image getImage(Object element) {
-               if (COL_ICON.equals(currType)) {
-                       User user = (User) element;
-                       String dn = (String) user.getProperties().get(LdifName.dn.name());
-                       if (dn.endsWith(ROLES_BASEDN))
-                               return UsersImages.ICON_ROLE;
-                       else if (user.getType() == Role.GROUP)
-                               return UsersImages.ICON_GROUP;
-                       else
-                               return UsersImages.ICON_USER;
-               } else
-                       return null;
-       }
-
-       @Override
-       public String getText(Object element) {
-               User user = (User) element;
-               return getText(user);
-
-       }
-
-       public String getText(User user) {
-               if (COL_DN.equals(currType))
-                       return user.getName();
-               else if (COL_DISPLAY_NAME.equals(currType)) {
-                       Object obj = user.getProperties().get(LdifName.cn.name());
-                       if (obj != null)
-                               return (String) obj;
-                       else
-                               return "";
-               } else if (COL_DOMAIN.equals(currType)) {
-                       String dn = (String) user.getProperties().get(LdifName.dn.name());
-                       if (dn.endsWith(ROLES_BASEDN))
-                               return "System roles";
-                       try {
-                               LdapName name;
-                               name = new LdapName(dn);
-                               List<Rdn> rdns = name.getRdns();
-                               return (String) rdns.get(1).getValue() + '.'
-                                               + (String) rdns.get(0).getValue();
-                       } catch (InvalidNameException e) {
-                               throw new ArgeoException("Unable to get domain name for " + dn,
-                                               e);
-                       }
-               } else
-                       return "";
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpGroupDialog.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpGroupDialog.java
deleted file mode 100644 (file)
index e9c31e3..0000000
+++ /dev/null
@@ -1,228 +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.users;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.ColumnDefinition;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.parts.LdifUsersTable;
-import org.argeo.osgi.useradmin.LdifName;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.useradmin.Group;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Dialog with a group list to pick up one */
-public class PickUpGroupDialog extends TrayDialog {
-       private static final long serialVersionUID = -1420106871173920369L;
-
-       // Business objects
-       private final UserAdmin userAdmin;
-       private Group selectedGroup;
-
-       // this page widgets and UI objects
-       private String title;
-       private LdifUsersTable groupTableViewerCmp;
-       private TableViewer userViewer;
-       private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
-       public PickUpGroupDialog(Shell parentShell, String title,
-                       UserAdmin userAdmin) {
-               super(parentShell);
-               this.title = title;
-               this.userAdmin = userAdmin;
-
-               // Define the displayed columns
-               columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_ICON), "",
-                               26, 0));
-               columnDefs.add(new ColumnDefinition(new GroupLP(
-                               GroupLP.COL_DISPLAY_NAME), "Common Name", 150, 100));
-               columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_DOMAIN),
-                               "Domain", 100, 120));
-               columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_DN),
-                               "Distinguished Name", 300, 100));
-       }
-
-       protected Point getInitialSize() {
-               return new Point(600, 450);
-       }
-
-       protected Control createDialogArea(Composite parent) {
-               Composite dialogArea = (Composite) super.createDialogArea(parent);
-               dialogArea.setLayout(new FillLayout());
-
-               Composite bodyCmp = new Composite(dialogArea, SWT.NO_FOCUS);
-               bodyCmp.setLayout(new GridLayout());
-
-               // Create and configure the table
-               groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
-                               | SWT.H_SCROLL | SWT.V_SCROLL);
-
-               groupTableViewerCmp.setColumnDefinitions(columnDefs);
-               groupTableViewerCmp.populateWithStaticFilters(false, false);
-               groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
-               groupTableViewerCmp.refresh();
-
-               // Controllers
-               userViewer = groupTableViewerCmp.getTableViewer();
-               userViewer.addDoubleClickListener(new MyDoubleClickListener());
-               userViewer
-                               .addSelectionChangedListener(new MySelectionChangedListener());
-
-               parent.pack();
-               return dialogArea;
-       }
-
-       public String getSelected() {
-               if (selectedGroup == null)
-                       return null;
-               else
-                       return selectedGroup.getName();
-       }
-
-       protected void configureShell(Shell shell) {
-               super.configureShell(shell);
-               shell.setText(title);
-       }
-
-       class MyDoubleClickListener implements IDoubleClickListener {
-               public void doubleClick(DoubleClickEvent evt) {
-                       if (evt.getSelection().isEmpty())
-                               return;
-
-                       Object obj = ((IStructuredSelection) evt.getSelection())
-                                       .getFirstElement();
-                       if (obj instanceof Group) {
-                               selectedGroup = (Group) obj;
-                               okPressed();
-                       }
-               }
-       }
-
-       class MySelectionChangedListener implements ISelectionChangedListener {
-               @Override
-               public void selectionChanged(SelectionChangedEvent event) {
-                       if (event.getSelection().isEmpty()) {
-                               selectedGroup = null;
-                               return;
-                       }
-                       Object obj = ((IStructuredSelection) event.getSelection())
-                                       .getFirstElement();
-                       if (obj instanceof Group) {
-                               selectedGroup = (Group) obj;
-                       }
-               }
-       }
-
-       private class MyUserTableViewer extends LdifUsersTable {
-               private static final long serialVersionUID = 8467999509931900367L;
-
-               private final String[] knownProps = { LdifName.uid.name(),
-                               LdifName.cn.name(), LdifName.dn.name() };
-
-               private Button showSystemRoleBtn;
-
-               public MyUserTableViewer(Composite parent, int style) {
-                       super(parent, style);
-               }
-
-               protected void populateStaticFilters(Composite staticFilterCmp) {
-                       staticFilterCmp.setLayout(new GridLayout());
-                       showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK);
-                       showSystemRoleBtn.setText("Show system roles  ");
-                       showSystemRoleBtn.addSelectionListener(new SelectionAdapter() {
-                               private static final long serialVersionUID = -7033424592697691676L;
-
-                               @Override
-                               public void widgetSelected(SelectionEvent e) {
-                                       refresh();
-                               }
-
-                       });
-               }
-
-               @Override
-               protected List<User> listFilteredElements(String filter) {
-                       Role[] roles;
-                       try {
-                               StringBuilder builder = new StringBuilder();
-                               StringBuilder tmpBuilder = new StringBuilder();
-                               if (notNull(filter))
-                                       for (String prop : knownProps) {
-                                               tmpBuilder.append("(");
-                                               tmpBuilder.append(prop);
-                                               tmpBuilder.append("=*");
-                                               tmpBuilder.append(filter);
-                                               tmpBuilder.append("*)");
-                                       }
-                               if (tmpBuilder.length() > 1) {
-                                       builder.append("(&(objectclass=groupOfNames)");
-                                       if (!showSystemRoleBtn.getSelection())
-                                               builder.append("(!(").append(LdifName.dn.name())
-                                                               .append("=*").append(GroupLP.ROLES_BASEDN)
-                                                               .append("))");
-                                       builder.append("(|");
-                                       builder.append(tmpBuilder.toString());
-                                       builder.append("))");
-                               } else {
-                                       if (!showSystemRoleBtn.getSelection())
-                                               builder.append("(&(objectclass=groupOfNames)(!(")
-                                                               .append(LdifName.dn.name()).append("=*")
-                                                               .append(GroupLP.ROLES_BASEDN).append(")))");
-                                       else
-                                               builder.append("(objectclass=groupOfNames)");
-
-                               }
-                               roles = userAdmin.getRoles(builder.toString());
-                       } catch (InvalidSyntaxException e) {
-                               throw new ArgeoException("Unable to get roles with filter: "
-                                               + filter, e);
-                       }
-                       List<User> users = new ArrayList<User>();
-                       for (Role role : roles)
-                               users.add((User) role);
-                       return users;
-               }
-       }
-
-       private boolean notNull(String string) {
-               if (string == null)
-                       return false;
-               else
-                       return !"".equals(string.trim());
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpUserDialog.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/PickUpUserDialog.java
new file mode 100644 (file)
index 0000000..23d9c5a
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * 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.users;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.ColumnDefinition;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.parts.LdifUsersTable;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.osgi.useradmin.LdifName;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.useradmin.Group;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+/** Dialog with a group list to pick up one */
+public class PickUpUserDialog extends TrayDialog {
+       private static final long serialVersionUID = -1420106871173920369L;
+
+       // Business objects
+       private final UserAdmin userAdmin;
+       private User selectedUser;
+
+       // this page widgets and UI objects
+       private String title;
+       private LdifUsersTable userTableViewerCmp;
+       private TableViewer userViewer;
+       private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+
+       public PickUpUserDialog(Shell parentShell, String title, UserAdmin userAdmin) {
+               super(parentShell);
+               this.title = title;
+               this.userAdmin = userAdmin;
+
+               // Define the displayed columns
+               columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_ICON), "",
+                               26, 0));
+               columnDefs.add(new ColumnDefinition(
+                               new UserLP(UserLP.COL_DISPLAY_NAME), "Common Name", 150, 100));
+               columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_DOMAIN),
+                               "Domain", 100, 120));
+               columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_DN),
+                               "Distinguished Name", 300, 100));
+       }
+
+       protected Point getInitialSize() {
+               return new Point(700, 450);
+       }
+
+       protected Control createDialogArea(Composite parent) {
+               Composite dialogArea = (Composite) super.createDialogArea(parent);
+               dialogArea.setLayout(new FillLayout());
+
+               Composite bodyCmp = new Composite(dialogArea, SWT.NO_FOCUS);
+               bodyCmp.setLayout(new GridLayout());
+
+               // Create and configure the table
+               userTableViewerCmp = new MyUserTableViewer(bodyCmp, SWT.MULTI
+                               | SWT.H_SCROLL | SWT.V_SCROLL);
+
+               userTableViewerCmp.setColumnDefinitions(columnDefs);
+               userTableViewerCmp.populateWithStaticFilters(false, false);
+               userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+               userTableViewerCmp.refresh();
+
+               // Controllers
+               userViewer = userTableViewerCmp.getTableViewer();
+               userViewer.addDoubleClickListener(new MyDoubleClickListener());
+               userViewer
+                               .addSelectionChangedListener(new MySelectionChangedListener());
+
+               parent.pack();
+               return dialogArea;
+       }
+
+       public User getSelected() {
+               if (selectedUser == null)
+                       return null;
+               else
+                       return selectedUser;
+       }
+
+       protected void configureShell(Shell shell) {
+               super.configureShell(shell);
+               shell.setText(title);
+       }
+
+       class MyDoubleClickListener implements IDoubleClickListener {
+               public void doubleClick(DoubleClickEvent evt) {
+                       if (evt.getSelection().isEmpty())
+                               return;
+
+                       Object obj = ((IStructuredSelection) evt.getSelection())
+                                       .getFirstElement();
+                       if (obj instanceof User) {
+                               selectedUser = (User) obj;
+                               okPressed();
+                       }
+               }
+       }
+
+       class MySelectionChangedListener implements ISelectionChangedListener {
+               @Override
+               public void selectionChanged(SelectionChangedEvent event) {
+                       if (event.getSelection().isEmpty()) {
+                               selectedUser = null;
+                               return;
+                       }
+                       Object obj = ((IStructuredSelection) event.getSelection())
+                                       .getFirstElement();
+                       if (obj instanceof Group) {
+                               selectedUser = (Group) obj;
+                       }
+               }
+       }
+
+       private class MyUserTableViewer extends LdifUsersTable {
+               private static final long serialVersionUID = 8467999509931900367L;
+
+               private final String[] knownProps = { LdifName.uid.name(),
+                               LdifName.cn.name(), LdifName.dn.name() };
+
+               private Button showSystemRoleBtn;
+               private Button showUserBtn;
+
+               public MyUserTableViewer(Composite parent, int style) {
+                       super(parent, style);
+               }
+
+               protected void populateStaticFilters(Composite staticFilterCmp) {
+                       staticFilterCmp.setLayout(new GridLayout());
+                       showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK);
+                       showSystemRoleBtn.setText("Show system roles  ");
+
+                       showUserBtn = new Button(staticFilterCmp, SWT.CHECK);
+                       showUserBtn.setText("Show users  ");
+
+                       SelectionListener sl = new SelectionAdapter() {
+                               private static final long serialVersionUID = -7033424592697691676L;
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       refresh();
+                               }
+                       };
+
+                       showSystemRoleBtn.addSelectionListener(sl);
+                       showUserBtn.addSelectionListener(sl);
+               }
+
+               @Override
+               protected List<User> listFilteredElements(String filter) {
+                       Role[] roles;
+                       try {
+                               StringBuilder builder = new StringBuilder();
+
+                               StringBuilder filterBuilder = new StringBuilder();
+                               if (notNull(filter))
+                                       for (String prop : knownProps) {
+                                               filterBuilder.append("(");
+                                               filterBuilder.append(prop);
+                                               filterBuilder.append("=*");
+                                               filterBuilder.append(filter);
+                                               filterBuilder.append("*)");
+                                       }
+
+                               String typeStr = "(" + LdifName.objectClass.name() + "="
+                                               + LdifName.groupOfNames.name() + ")";
+                               if ((showUserBtn.getSelection()))
+                                       typeStr = "(|(" + LdifName.objectClass.name() + "="
+                                                       + LdifName.inetOrgPerson.name() + ")" + typeStr
+                                                       + ")";
+
+                               if (!showSystemRoleBtn.getSelection())
+                                       typeStr = "(& " + typeStr + "(!(" + LdifName.dn.name()
+                                                       + "=*" + UsersUtils.ROLES_BASEDN + ")))";
+
+                               if (filterBuilder.length() > 1) {
+                                       builder.append("(&" + typeStr);
+                                       builder.append("(|");
+                                       builder.append(filterBuilder.toString());
+                                       builder.append("))");
+                               } else {
+                                       builder.append(typeStr);
+                               }
+                               roles = userAdmin.getRoles(builder.toString());
+                       } catch (InvalidSyntaxException e) {
+                               throw new ArgeoException("Unable to get roles with filter: "
+                                               + filter, e);
+                       }
+                       List<User> users = new ArrayList<User>();
+                       for (Role role : roles)
+                               if (!users.contains(role))
+                                       users.add((User) role);
+                       return users;
+               }
+       }
+
+       private boolean notNull(String string) {
+               if (string == null)
+                       return false;
+               else
+                       return !"".equals(string.trim());
+       }
+}
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/UserLP.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/UserLP.java
new file mode 100644 (file)
index 0000000..0b74e7e
--- /dev/null
@@ -0,0 +1,97 @@
+package org.argeo.eclipse.ui.workbench.users;
+
+import javax.naming.InvalidNameException;
+import javax.naming.ldap.LdapName;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersImages;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.osgi.useradmin.LdifName;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+
+/** Centralize label providers for the group table */
+class UserLP extends ColumnLabelProvider {
+       private static final long serialVersionUID = -4645930210988368571L;
+
+       final static String COL_ICON = "colID.icon";
+       final static String COL_DN = "colID.dn";
+       final static String COL_DISPLAY_NAME = "colID.displayName";
+       final static String COL_DOMAIN = "colID.domain";
+
+       final String currType;
+
+       // private Font italic;
+       private Font bold;
+
+       UserLP(String colId) {
+               this.currType = colId;
+       }
+
+       @Override
+       public Font getFont(Object element) {
+               // Self as bold
+               try {
+                       LdapName selfUserName = UsersUtils.getLdapName();
+                       String userName = UsersUtils.getProperty((User) element,
+                                       LdifName.dn.name());
+                       LdapName userLdapName = new LdapName(userName);
+                       if (userLdapName.equals(selfUserName)) {
+                               if (bold == null)
+                                       bold = JFaceResources.getFontRegistry()
+                                                       .defaultFontDescriptor().setStyle(SWT.BOLD)
+                                                       .createFont(Display.getCurrent());
+                               return bold;
+                       }
+               } catch (InvalidNameException e) {
+                       throw new ArgeoException("cannot parse dn for " + element, e);
+               }
+
+               // Disabled as Italic
+               // Node userProfile = (Node) elem;
+               // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
+               // return italic;
+
+               return null;
+               // return super.getFont(element);
+       }
+
+       @Override
+       public Image getImage(Object element) {
+               if (COL_ICON.equals(currType)) {
+                       User user = (User) element;
+                       String dn = (String) user.getProperties().get(LdifName.dn.name());
+                       if (dn.endsWith(UsersUtils.ROLES_BASEDN))
+                               return UsersImages.ICON_ROLE;
+                       else if (user.getType() == Role.GROUP)
+                               return UsersImages.ICON_GROUP;
+                       else
+                               return UsersImages.ICON_USER;
+               } else
+                       return null;
+       }
+
+       @Override
+       public String getText(Object element) {
+               User user = (User) element;
+               return getText(user);
+
+       }
+
+       public String getText(User user) {
+               if (COL_DN.equals(currType))
+                       return user.getName();
+               else if (COL_DISPLAY_NAME.equals(currType))
+                       return UsersUtils.getCommonName(user);
+               else if (COL_DOMAIN.equals(currType))
+                       return UsersUtils.getDomainName(user);
+               else
+                       return "";
+       }
+}
\ No newline at end of file
index e6c29f3401cf66fdff665377a9201b7fd3b77d9b..7470ea121581ac5f965e3703d9b69c7b84b8cad7 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.eclipse.ui.workbench.users.internal;
 
 import java.security.AccessController;
+import java.util.List;
 
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
 
@@ -14,6 +16,8 @@ import org.osgi.service.useradmin.User;
 
 /** Utility methods to manage user concepts in the ui.workbench bundle */
 public class UsersUtils {
+       // TODO this constant is defined in the CMS
+       public final static String ROLES_BASEDN = "ou=roles,ou=node";
 
        public final static boolean isCurrentUser(User user) {
                String userName = getProperty(user, LdifName.dn.name());
@@ -43,6 +47,37 @@ public class UsersUtils {
                return dn;
        }
 
+       public final static String getCommonName(User user) {
+               return getProperty(user, LdifName.cn.name());
+       }
+
+       /** Simply retrieves a display name of the relevant domain */
+       public final static String getDomainName(User user) {
+               String dn = (String) user.getProperties().get(LdifName.dn.name());
+               if (dn.endsWith(ROLES_BASEDN))
+                       return "System roles";
+               try {
+                       LdapName name;
+                       name = new LdapName(dn);
+                       List<Rdn> rdns = name.getRdns();
+                       String dname = null;
+                       int i = 0;
+                       loop: while (i < rdns.size()) {
+                               Rdn currrRdn = rdns.get(i);
+                               if (!"dc".equals(currrRdn.getType()))
+                                       break loop;
+                               else {
+                                       String currVal = (String) currrRdn.getValue();
+                                       dname = dname == null ? currVal : currVal + "." + dname;
+                               }
+                               i++;
+                       }
+                       return dname;
+               } catch (InvalidNameException e) {
+                       throw new ArgeoException("Unable to get domain name for " + dn, e);
+               }
+       }
+
        public final static String getProperty(Role role, String key) {
                Object obj = role.getProperties().get(key);
                if (obj != null)
@@ -61,4 +96,5 @@ public class UsersUtils {
                else
                        return !"".equals(string.trim());
        }
+
 }
\ No newline at end of file
index 24d13ad7cf48a70ca350a79de0275e7d78be7762..a63f51288fcfe36939bc6185c15473938639636c 100644 (file)
@@ -9,7 +9,7 @@ import javax.naming.ldap.LdapName;
  */
 public enum LdifName {
        // Attributes
-       dn, cn, sn, uid, mail, displayName, objectClass, userpassword,
+       dn, cn, sn, uid, mail, displayName, objectClass, userpassword, givenname, description,
        // Object classes
        inetOrgPerson, organizationalPerson, person, groupOfNames, top;
 
index 4419d80a9e0b9387ba1dd37f489d831d1e4ef4e8..c23f01cff77f31615562af7ae5eee2b6c3a78856 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.security.ui.admin.internal;
 
 import java.security.AccessController;
+import java.util.List;
 
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
 import javax.transaction.Status;
@@ -68,6 +70,33 @@ public class UiAdminUtils {
                return cn;
        }
 
+       /** Simply retrieves a display name of the relevant domain */
+       public final static String getDomainName(User user) {
+               String dn = (String) user.getProperties().get(LdifName.dn.name());
+               if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN))
+                       return "System roles";
+               try {
+                       LdapName name;
+                       name = new LdapName(dn);
+                       List<Rdn> rdns = name.getRdns();
+                       String dname = null;
+                       int i = 0;
+                       loop: while (i < rdns.size()) {
+                               Rdn currrRdn = rdns.get(i);
+                               if (!"dc".equals(currrRdn.getType()))
+                                       break loop;
+                               else {
+                                       String currVal = (String) currrRdn.getValue();
+                                       dname = dname == null ? currVal : currVal + "." + dname;
+                               }
+                               i++;
+                       }
+                       return dname;
+               } catch (InvalidNameException e) {
+                       throw new ArgeoException("Unable to get domain name for " + dn, e);
+               }
+       }
+
        public final static String getProperty(Role role, String key) {
                Object obj = role.getProperties().get(key);
                if (obj != null)
index a2e28b02d55ec535bf9a79d85131ec0d3c8a4d2f..ee7708b99e73fe7d26043e7291f4de7eedad2440 100644 (file)
@@ -3,10 +3,6 @@ package org.argeo.security.ui.admin.internal;
 /** Temporary centralization of the user admin constants */
 public interface UserAdminConstants {
 
-       public final static String KEY_DESC = "description";
-       public final static String KEY_FIRSTNAME = "givenname";
-       public final static String KEY_LASTNAME = "sn";
-
        // TO BE CLEANED
        public final static String SYSTEM_ROLE_BASE_DN = "ou=roles,ou=node";
 
index ddf0dceb79a3a324b9d3ebfd1d125b3a1f33418e..fba2d3920e1bc9b649bd6be46f1a1005567e3028 100644 (file)
@@ -22,9 +22,9 @@ import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
 import org.argeo.jcr.ArgeoNames;
+import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -96,7 +96,7 @@ public class NewGroup extends AbstractHandler {
                                Dictionary props = group.getProperties();
                                String descStr = descriptionTxt.getText();
                                if (UiAdminUtils.notNull(descStr))
-                                       props.put(UserAdminConstants.KEY_DESC, descStr);
+                                       props.put(LdifName.description.name(), descStr);
                                userAdminWrapper.notifyListeners(new UserAdminEvent(null,
                                                UserAdminEvent.ROLE_CREATED, group));
                                return true;
index 7f89b6ab2ade8597b1d29acc450e829190032f5c..9d4151caf15826c100b126644ee5df961b138a11 100644 (file)
@@ -29,7 +29,6 @@ import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -115,7 +114,7 @@ public class NewUser extends AbstractHandler {
 
                                String firstNameStr = firstNameTxt.getText();
                                if (UiAdminUtils.notNull(firstNameStr))
-                                       props.put(UserAdminConstants.KEY_FIRSTNAME, firstNameStr);
+                                       props.put(LdifName.givenname.name(), firstNameStr);
 
                                String cn = UiAdminUtils
                                                .getDefaultCn(firstNameStr, lastNameStr);
index 5df5b662d5ffe95e112755ac9b9f25bd5a124e3a..1e6cd4f10564f0cb61fc1bba72b5fcf39967cc9c 100644 (file)
@@ -26,13 +26,13 @@ import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminImages;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
 import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener;
 import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener;
 import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
 import org.argeo.security.ui.admin.internal.providers.MailLP;
 import org.argeo.security.ui.admin.internal.providers.RoleIconLP;
+import org.argeo.security.ui.admin.internal.providers.UserFilter;
 import org.argeo.security.ui.admin.internal.providers.UserNameLP;
 import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener;
 import org.eclipse.jface.action.Action;
@@ -144,7 +144,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames {
 
                        @SuppressWarnings("unchecked")
                        public void commit(boolean onSave) {
-                               group.getProperties().put(UserAdminConstants.KEY_DESC,
+                               group.getProperties().put(LdifName.description.name(),
                                                descTxt.getText());
                                // Enable common name ?
                                // editor.setProperty(UserAdminConstants.KEY_CN,
@@ -159,8 +159,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames {
                                cnTxt.setText(UiAdminUtils.getProperty(group,
                                                LdifName.cn.name()));
                                descTxt.setText(UiAdminUtils.getProperty(group,
-                                               UserAdminConstants.KEY_DESC));
-
+                                               LdifName.description.name()));
                                super.refresh();
                        }
                };
@@ -227,9 +226,13 @@ public class GroupMainPage extends FormPage implements ArgeoNames {
        private class MyUserTableViewer extends LdifUsersTable {
                private static final long serialVersionUID = 8467999509931900367L;
 
+               private final UserFilter userFilter;
+
                public MyUserTableViewer(Composite parent, int style,
                                UserAdmin userAdmin) {
                        super(parent, style, true);
+                       userFilter = new UserFilter();
+
                }
 
                @Override
@@ -237,9 +240,11 @@ public class GroupMainPage extends FormPage implements ArgeoNames {
                        Group group = (Group) editor.getDisplayedUser();
                        Role[] roles = group.getMembers();
                        List<User> users = new ArrayList<User>();
+                       userFilter.setSearchText(filter);
                        for (Role role : roles)
                                // if (role.getType() == Role.GROUP)
-                               users.add((User) role);
+                               if (userFilter.select(null, null, role))
+                                       users.add((User) role);
                        return users;
                }
        }
index fd1931a4faf3510057732e357776a780c17d5378..450a4a9598103fd63c4c1a928ce53a8dbffe78b0 100644 (file)
@@ -155,7 +155,9 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                                                tmpBuilder.append("*)");
                                        }
                                if (tmpBuilder.length() > 1) {
-                                       builder.append("(&(objectclass=groupOfNames)");
+                                       builder.append("(&(").append(LdifName.objectClass.name())
+                                                       .append("=").append(LdifName.groupOfNames.name())
+                                                       .append(")");
                                        if (!showSystemRoleBtn.getSelection())
                                                builder.append("(!(").append(LdifName.dn.name())
                                                                .append("=*")
@@ -166,12 +168,19 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                                        builder.append("))");
                                } else {
                                        if (!showSystemRoleBtn.getSelection())
-                                               builder.append("(&(objectclass=groupOfNames)(!(")
-                                                               .append(LdifName.dn.name()).append("=*")
+                                               builder.append("(&(")
+                                                               .append(LdifName.objectClass.name())
+                                                               .append("=")
+                                                               .append(LdifName.groupOfNames.name())
+                                                               .append(")(!(").append(LdifName.dn.name())
+                                                               .append("=*")
                                                                .append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
                                                                .append(")))");
                                        else
-                                               builder.append("(objectclass=groupOfNames)");
+                                               builder.append("(").append(LdifName.objectClass.name())
+                                                               .append("=")
+                                                               .append(LdifName.groupOfNames.name())
+                                                               .append(")");
 
                                }
                                roles = userAdminWrapper.getUserAdmin().getRoles(
index ab8ea321664a384e70bc1d60b32589cebd792b71..d732e7e7fbdccc96f5d7b406d948a281b4ee8b14 100644 (file)
@@ -27,13 +27,13 @@ import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminImages;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
 import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener;
 import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener;
 import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
 import org.argeo.security.ui.admin.internal.providers.DomainNameLP;
 import org.argeo.security.ui.admin.internal.providers.RoleIconLP;
+import org.argeo.security.ui.admin.internal.providers.UserFilter;
 import org.argeo.security.ui.admin.internal.providers.UserNameLP;
 import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener;
 import org.eclipse.jface.action.Action;
@@ -122,11 +122,10 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                commonName.setEnabled(false);
 
                final Text firstName = createLT(tk, body, "First name",
-                               UiAdminUtils
-                                               .getProperty(user, UserAdminConstants.KEY_FIRSTNAME));
+                               UiAdminUtils.getProperty(user, LdifName.givenname.name()));
 
                final Text lastName = createLT(tk, body, "Last name",
-                               UiAdminUtils.getProperty(user, UserAdminConstants.KEY_LASTNAME));
+                               UiAdminUtils.getProperty(user, LdifName.sn.name()));
 
                final Text email = createLT(tk, body, "Email",
                                UiAdminUtils.getProperty(user, LdifName.mail.name()));
@@ -151,10 +150,10 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                        @SuppressWarnings("unchecked")
                        public void commit(boolean onSave) {
                                // TODO Sanity checks (mail validity...)
-                               user.getProperties().put(UserAdminConstants.KEY_FIRSTNAME,
+                               user.getProperties().put(LdifName.givenname.name(),
                                                firstName.getText());
-                               user.getProperties().put(UserAdminConstants.KEY_LASTNAME,
-                                               lastName.getText());
+                               user.getProperties()
+                                               .put(LdifName.sn.name(), lastName.getText());
                                user.getProperties().put(LdifName.cn.name(),
                                                commonName.getText());
                                user.getProperties().put(LdifName.mail.name(), email.getText());
@@ -171,9 +170,9 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                                commonName.setText(UiAdminUtils.getProperty(user,
                                                LdifName.cn.name()));
                                firstName.setText(UiAdminUtils.getProperty(user,
-                                               UserAdminConstants.KEY_FIRSTNAME));
+                                               LdifName.givenname.name()));
                                lastName.setText(UiAdminUtils.getProperty(user,
-                                               UserAdminConstants.KEY_LASTNAME));
+                                               LdifName.sn.name()));
                                email.setText(LdifName.mail.name());
                                refreshFormTitle(user);
                                super.refresh();
@@ -315,18 +314,25 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                private static final long serialVersionUID = 8467999509931900367L;
 
                private final User user;
+               private final UserFilter userFilter;
 
                public MyUserTableViewer(Composite parent, int style, User user) {
                        super(parent, style, true);
                        this.user = user;
+                       userFilter = new UserFilter();
                }
 
                @Override
                protected List<User> listFilteredElements(String filter) {
                        List<User> users = (List<User>) editor.getFlatGroups(null);
+                       List<User> filteredUsers = new ArrayList<User>();
                        if (users.contains(user))
                                users.remove(user);
-                       return users;
+                       userFilter.setSearchText(filter);
+                       for (User user : users)
+                               if (userFilter.select(null, null, user))
+                                       filteredUsers.add(user);
+                       return filteredUsers;
                }
        }
 
index 837d6a17e4856facbd7f4d2de0f9eccff64bd20a..b52e8591ef6eb55bfab2f461845c8ba2155162d5 100644 (file)
@@ -26,7 +26,6 @@ import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
 import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
 import org.argeo.security.ui.admin.internal.providers.DomainNameLP;
@@ -50,7 +49,7 @@ import org.osgi.service.useradmin.UserAdminListener;
 /** List all users with filter - based on Ldif userAdmin */
 public class UsersView extends ViewPart implements ArgeoNames {
        // private final static Log log = LogFactory.getLog(UsersView.class);
-       
+
        public final static String ID = SecurityAdminPlugin.PLUGIN_ID
                        + ".usersView";
 
@@ -114,8 +113,8 @@ public class UsersView extends ViewPart implements ArgeoNames {
 
                private final String[] knownProps = { LdifName.uid.name(),
                                LdifName.dn.name(), LdifName.cn.name(),
-                               UserAdminConstants.KEY_FIRSTNAME,
-                               UserAdminConstants.KEY_LASTNAME, LdifName.mail.name() };
+                               LdifName.givenname.name(), LdifName.sn.name(),
+                               LdifName.mail.name() };
 
                public MyUserTableViewer(Composite parent, int style) {
                        super(parent, style);
@@ -138,11 +137,15 @@ public class UsersView extends ViewPart implements ArgeoNames {
                                                tmpBuilder.append("*)");
                                        }
                                if (tmpBuilder.length() > 1) {
-                                       builder.append("(&(objectclass=inetOrgPerson)(|");
+                                       builder.append("(&(").append(LdifName.objectClass.name())
+                                                       .append("=").append(LdifName.inetOrgPerson.name())
+                                                       .append(")(|");
                                        builder.append(tmpBuilder.toString());
                                        builder.append("))");
                                } else
-                                       builder.append("(objectclass=inetOrgPerson)");
+                                       builder.append("(").append(LdifName.objectClass.name())
+                                                       .append("=").append(LdifName.inetOrgPerson.name())
+                                                       .append(")");
                                roles = userAdminWrapper.getUserAdmin().getRoles(
                                                builder.toString());
                        } catch (InvalidSyntaxException e) {
index 287d2facce9dc90418b48c3a6382752663b6b91a..107a4d1ae53f3756df00283e81d0b6938e2c4bad 100644 (file)
@@ -1,14 +1,6 @@
 package org.argeo.security.ui.admin.internal.providers;
 
-import java.util.List;
-
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import org.argeo.ArgeoException;
-import org.argeo.osgi.useradmin.LdifName;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
 import org.osgi.service.useradmin.User;
 
 /** The human friendly domain name for the corresponding user. */
@@ -17,17 +9,6 @@ public class DomainNameLP extends UserAdminAbstractLP {
 
        @Override
        public String getText(User user) {
-               String dn = (String) user.getProperties().get(LdifName.dn.name());
-               if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN))
-                       return "System roles";
-               try {
-                       LdapName name;
-                       name = new LdapName(dn);
-                       List<Rdn> rdns = name.getRdns();
-                       return (String) rdns.get(1).getValue() + '.'
-                                       + (String) rdns.get(0).getValue();
-               } catch (InvalidNameException e) {
-                       throw new ArgeoException("Unable to get domain name for " + dn, e);
-               }
+               return UiAdminUtils.getDomainName(user);
        }
 }
\ No newline at end of file
index 1037446c927035f8caccff5f6cc5935f9d964334..f71d77a7f4c7b32bc93de9e3b76f7e336ac9af38 100644 (file)
@@ -1,8 +1,7 @@
 package org.argeo.security.ui.admin.internal.providers;
 
-import java.util.Dictionary;
-
 import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
 import org.osgi.service.useradmin.User;
 
 /** Simply declare a label provider that returns the Primary Mail of a user */
@@ -11,12 +10,6 @@ public class MailLP extends UserAdminAbstractLP {
 
        @Override
        public String getText(User user) {
-               @SuppressWarnings("rawtypes")
-               Dictionary props = user.getProperties();
-               Object obj = props.get(LdifName.mail.name());
-               if (obj != null)
-                       return (String) obj;
-               else
-                       return "";
+               return UiAdminUtils.getProperty(user, LdifName.mail.name());
        }
 }
\ No newline at end of file
diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/UserFilter.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/UserFilter.java
new file mode 100644 (file)
index 0000000..43c36eb
--- /dev/null
@@ -0,0 +1,50 @@
+package org.argeo.security.ui.admin.internal.providers;
+
+import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.osgi.service.useradmin.User;
+
+public class UserFilter extends ViewerFilter {
+       private static final long serialVersionUID = 5082509381672880568L;
+
+       private String searchString;
+
+       private final String[] knownProps = { LdifName.dn.name(),
+                       LdifName.cn.name(), LdifName.givenname.name(), LdifName.sn.name(),
+                       LdifName.uid.name(), LdifName.description.name(),
+                       LdifName.mail.name() };
+
+       public void setSearchText(String s) {
+               // ensure that the value can be used for matching
+               if (notNull(s))
+                       searchString = ".*" + s.toLowerCase() + ".*";
+               else
+                       searchString = ".*";
+       }
+
+       @Override
+       public boolean select(Viewer viewer, Object parentElement, Object element) {
+               if (searchString == null || searchString.length() == 0) {
+                       return true;
+               }
+               User user = (User) element;
+
+               if (user.getName().matches(searchString))
+                       return true;
+
+               for (String key : knownProps) {
+                       String currVal = UiAdminUtils.getProperty(user, key);
+                       if (notNull(currVal) && currVal.toLowerCase().matches(searchString))
+                               return true;
+               }
+
+               return false;
+       }
+
+       private boolean notNull(String str) {
+               return !(str == null || "".equals(str.trim()));
+       }
+
+}
\ No newline at end of file