Code cleaning and refactoring.
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / parts / GroupsView.java
index 0f4d12ccfef357f317325b2d95704f2656682141..fd1931a4faf3510057732e357776a780c17d5378 100644 (file)
@@ -18,15 +18,18 @@ package org.argeo.security.ui.admin.internal.parts;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 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.jcr.ArgeoNames;
+import org.argeo.osgi.useradmin.LdifName;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.internal.ColumnDefinition;
 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.UserTableViewer;
 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;
@@ -38,17 +41,21 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionAdapter;
+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.ui.part.ViewPart;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.useradmin.Role;
 import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
 import org.osgi.service.useradmin.UserAdminEvent;
 import org.osgi.service.useradmin.UserAdminListener;
 
 /** List all groups with filter */
 public class GroupsView extends ViewPart implements ArgeoNames {
+       private final static Log log = LogFactory.getLog(GroupsView.class);
        public final static String ID = SecurityAdminPlugin.PLUGIN_ID
                        + ".groupsView";
 
@@ -56,7 +63,7 @@ public class GroupsView extends ViewPart implements ArgeoNames {
        private UserAdminWrapper userAdminWrapper;
 
        // UI Objects
-       private UserTableViewer groupTableViewerCmp;
+       private LdifUsersTable groupTableViewerCmp;
        private TableViewer userViewer;
        private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
 
@@ -75,10 +82,10 @@ public class GroupsView extends ViewPart implements ArgeoNames {
 
                // Create and configure the table
                groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
-                               | SWT.H_SCROLL | SWT.V_SCROLL, userAdminWrapper.getUserAdmin());
+                               | SWT.H_SCROLL | SWT.V_SCROLL);
 
                groupTableViewerCmp.setColumnDefinitions(columnDefs);
-               groupTableViewerCmp.populate(true, false);
+               groupTableViewerCmp.populateWithStaticFilters(false, false);
                groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
 
                // Links
@@ -106,15 +113,31 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                userAdminWrapper.addListener(listener);
        }
 
-       private class MyUserTableViewer extends UserTableViewer {
+       private class MyUserTableViewer extends LdifUsersTable {
                private static final long serialVersionUID = 8467999509931900367L;
 
-               private final String[] knownProps = { UserAdminConstants.KEY_UID,
-                               UserAdminConstants.KEY_CN, UserAdminConstants.KEY_DN };
+               private Button showSystemRoleBtn;
 
-               public MyUserTableViewer(Composite parent, int style,
-                               UserAdmin userAdmin) {
-                       super(parent, style, userAdmin);
+               private final String[] knownProps = { LdifName.uid.name(),
+                               LdifName.cn.name(), LdifName.dn.name() };
+
+               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
@@ -132,11 +155,25 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                                                tmpBuilder.append("*)");
                                        }
                                if (tmpBuilder.length() > 1) {
-                                       builder.append("(&(objectclass=groupOfNames)(|");
+                                       builder.append("(&(objectclass=groupOfNames)");
+                                       if (!showSystemRoleBtn.getSelection())
+                                               builder.append("(!(").append(LdifName.dn.name())
+                                                               .append("=*")
+                                                               .append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
+                                                               .append("))");
+                                       builder.append("(|");
                                        builder.append(tmpBuilder.toString());
                                        builder.append("))");
-                               } else
-                                       builder.append("(objectclass=groupOfNames)");
+                               } else {
+                                       if (!showSystemRoleBtn.getSelection())
+                                               builder.append("(&(objectclass=groupOfNames)(!(")
+                                                               .append(LdifName.dn.name()).append("=*")
+                                                               .append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
+                                                               .append(")))");
+                                       else
+                                               builder.append("(objectclass=groupOfNames)");
+
+                               }
                                roles = userAdminWrapper.getUserAdmin().getRoles(
                                                builder.toString());
                        } catch (InvalidSyntaxException e) {
@@ -145,8 +182,11 @@ public class GroupsView extends ViewPart implements ArgeoNames {
                        }
                        List<User> users = new ArrayList<User>();
                        for (Role role : roles)
-                               // if (role.getType() == Role.GROUP)
-                               users.add((User) role);
+                               if (!users.contains(role))
+                                       users.add((User) role);
+                               else
+                                       log.warn("Duplicated role: " + role);
+
                        return users;
                }
        }