]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java
Work on security Admin UI, batch processing, specific admin abilities, some code...
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / parts / UserMainPage.java
index ab8ea321664a384e70bc1d60b32589cebd792b71..9ea1dcffcb9ed2496f1a1d4248564f84b7a22167 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.argeo.ArgeoException;
+import org.argeo.cms.auth.AuthConstants;
 import org.argeo.eclipse.ui.ColumnDefinition;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.parts.LdifUsersTable;
@@ -27,13 +28,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;
@@ -54,9 +55,12 @@ import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 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.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
@@ -95,6 +99,7 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                ScrolledForm form = mf.getForm();
                Composite body = form.getBody();
                GridLayout mainLayout = new GridLayout();
+               // mainLayout.marginRight = 10;
                body.setLayout(mainLayout);
                User user = editor.getDisplayedUser();
                appendOverviewPart(body, user);
@@ -122,11 +127,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,16 +155,13 @@ 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());
-                               // Enable common name ?
-                               // editor.setProperty(UserAdminConstants.KEY_CN,
-                               // email.getText());
                                super.commit(onSave);
                        }
 
@@ -171,9 +172,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();
@@ -250,22 +251,29 @@ public class UserMainPage extends FormPage implements ArgeoNames {
                Composite body = (Composite) section.getClient();
                body.setLayout(EclipseUiUtils.noSpaceGridLayout());
 
+               boolean isAdmin = UiAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN);
+
                // Displayed columns
                List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
                columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
                columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
                                150));
                columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name",
-                               120));
-               columnDefs.add(new ColumnDefinition(new UserNameLP(),
-                               "Distinguished Name", 300));
+                               200));
+               // Only show technical DN to administrators
+               if (isAdmin)
+                       columnDefs.add(new ColumnDefinition(new UserNameLP(),
+                                       "Distinguished Name", 120));
 
                // Create and configure the table
                final LdifUsersTable userViewerCmp = new MyUserTableViewer(body,
                                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user);
 
                userViewerCmp.setColumnDefinitions(columnDefs);
-               userViewerCmp.populate(true, false);
+               if (isAdmin)
+                       userViewerCmp.populateWithStaticFilters(false, false);
+               else
+                       userViewerCmp.populate(true, false);
                GridData gd = EclipseUiUtils.fillAll();
                gd.heightHint = 300;
                userViewerCmp.setLayoutData(gd);
@@ -312,21 +320,47 @@ public class UserMainPage extends FormPage implements ArgeoNames {
        }
 
        private class MyUserTableViewer extends LdifUsersTable {
-               private static final long serialVersionUID = 8467999509931900367L;
+               private static final long serialVersionUID = 2653790051461237329L;
+
+               private Button showSystemRoleBtn;
 
                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();
+                       userFilter.setShowSystemRole(false);
+               }
+
+               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) {
+                                       userFilter.setShowSystemRole(showSystemRoleBtn
+                                                       .getSelection());
+                                       refresh();
+                               }
+                       });
                }
 
                @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;
                }
        }