Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / parts / GroupsView.java
index 450a4a9598103fd63c4c1a928ce53a8dbffe78b0..82f4e1bdd8f27a0f6f1713f159d85e68910846ed 100644 (file)
@@ -20,15 +20,16 @@ import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
+import org.argeo.cms.CmsException;
+import org.argeo.cms.auth.AuthConstants;
+import org.argeo.cms.util.useradmin.UserAdminUtils;
 import org.argeo.eclipse.ui.ColumnDefinition;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.parts.LdifUsersTable;
 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.UiUserAdminListener;
 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;
@@ -46,6 +47,7 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.part.ViewPart;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.useradmin.Role;
@@ -72,20 +74,29 @@ public class GroupsView extends ViewPart implements ArgeoNames {
        @Override
        public void createPartControl(Composite parent) {
                parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+
+               boolean isAdmin = UserAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN);
+
                // Define the displayed columns
                columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 26));
                columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
                                150));
-               columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 120));
-               columnDefs.add(new ColumnDefinition(new UserNameLP(),
-                               "Distinguished Name", 300));
+               columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200));
+               // Only show technical DN to admin
+               if (isAdmin)
+                       columnDefs.add(new ColumnDefinition(new UserNameLP(),
+                                       "Distinguished Name", 300));
 
                // Create and configure the table
                groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
                                | SWT.H_SCROLL | SWT.V_SCROLL);
 
                groupTableViewerCmp.setColumnDefinitions(columnDefs);
-               groupTableViewerCmp.populateWithStaticFilters(false, false);
+               if (isAdmin)
+                       groupTableViewerCmp.populateWithStaticFilters(false, false);
+               else
+                       groupTableViewerCmp.populate(true, false);
+
                groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
 
                // Links
@@ -102,21 +113,38 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                userViewer.addDragSupport(operations, tt, new UserDragListener(
                                userViewer));
 
+               // // Register a useradmin listener
+               // listener = new UserAdminListener() {
+               // @Override
+               // public void roleChanged(UserAdminEvent event) {
+               // if (userViewer != null && !userViewer.getTable().isDisposed())
+               // refresh();
+               // }
+               // };
+               // userAdminWrapper.addListener(listener);
+               // }
+
                // Register a useradmin listener
-               listener = new UserAdminListener() {
-                       @Override
-                       public void roleChanged(UserAdminEvent event) {
-                               if (userViewer != null && !userViewer.getTable().isDisposed())
-                                       refresh();
-                       }
-               };
+               listener = new MyUiUAListener(parent.getDisplay());
                userAdminWrapper.addListener(listener);
        }
 
+       private class MyUiUAListener extends UiUserAdminListener {
+               public MyUiUAListener(Display display) {
+                       super(display);
+               }
+
+               @Override
+               public void roleChangedToUiThread(UserAdminEvent event) {
+                       if (userViewer != null && !userViewer.getTable().isDisposed())
+                               refresh();
+               }
+       }
+
        private class MyUserTableViewer extends LdifUsersTable {
                private static final long serialVersionUID = 8467999509931900367L;
 
-               private Button showSystemRoleBtn;
+               private boolean showSystemRoles = false;
 
                private final String[] knownProps = { LdifName.uid.name(),
                                LdifName.cn.name(), LdifName.dn.name() };
@@ -127,13 +155,15 @@ public class GroupsView extends ViewPart implements ArgeoNames {
 
                protected void populateStaticFilters(Composite staticFilterCmp) {
                        staticFilterCmp.setLayout(new GridLayout());
-                       showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK);
+                       final Button 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) {
+                                       showSystemRoles = showSystemRoleBtn.getSelection();
                                        refresh();
                                }
 
@@ -146,7 +176,7 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                        try {
                                StringBuilder builder = new StringBuilder();
                                StringBuilder tmpBuilder = new StringBuilder();
-                               if (UiAdminUtils.notNull(filter))
+                               if (EclipseUiUtils.notEmpty(filter))
                                        for (String prop : knownProps) {
                                                tmpBuilder.append("(");
                                                tmpBuilder.append(prop);
@@ -158,23 +188,23 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                                        builder.append("(&(").append(LdifName.objectClass.name())
                                                        .append("=").append(LdifName.groupOfNames.name())
                                                        .append(")");
-                                       if (!showSystemRoleBtn.getSelection())
+                                       if (!showSystemRoles)
                                                builder.append("(!(").append(LdifName.dn.name())
                                                                .append("=*")
-                                                               .append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
+                                                               .append(AuthConstants.ROLES_BASEDN)
                                                                .append("))");
                                        builder.append("(|");
                                        builder.append(tmpBuilder.toString());
                                        builder.append("))");
                                } else {
-                                       if (!showSystemRoleBtn.getSelection())
+                                       if (!showSystemRoles)
                                                builder.append("(&(")
                                                                .append(LdifName.objectClass.name())
                                                                .append("=")
                                                                .append(LdifName.groupOfNames.name())
                                                                .append(")(!(").append(LdifName.dn.name())
                                                                .append("=*")
-                                                               .append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
+                                                               .append(AuthConstants.ROLES_BASEDN)
                                                                .append(")))");
                                        else
                                                builder.append("(").append(LdifName.objectClass.name())
@@ -186,7 +216,7 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                                roles = userAdminWrapper.getUserAdmin().getRoles(
                                                builder.toString());
                        } catch (InvalidSyntaxException e) {
-                               throw new ArgeoException("Unable to get roles with filter: "
+                               throw new CmsException("Unable to get roles with filter: "
                                                + filter, e);
                        }
                        List<User> users = new ArrayList<User>();