X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Fviews%2FGroupsView.java;h=1ee26a2ab160ab03e94ae0750030dadfe8953697;hb=1b8ad59bf691c15ed1317378a83c71c56c81cad2;hp=34bda0e6993d17fee97eae92dcf92865410ba90e;hpb=dd3d0d60b62c99810eca8619a376b66dbca5e44d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java index 34bda0e69..1ee26a2ab 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java @@ -19,82 +19,104 @@ import java.util.ArrayList; import java.util.List; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.ArgeoNames; import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.UserAdminConstants; -import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.argeo.security.ui.admin.internal.ColumnDefinition; +import org.argeo.security.ui.admin.internal.CommonNameLP; +import org.argeo.security.ui.admin.internal.UserNameLP; +import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener; +import org.argeo.security.ui.admin.internal.UserTableViewer; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; +import org.osgi.service.useradmin.UserAdmin; /** List all groups with filter */ public class GroupsView extends UsersView implements ArgeoNames { public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".groupsView"; - // The displayed columns - /** Overwrite to display other columns */ - public List getColumnsDef() { - List columnDefs = new ArrayList(); - // Group ID - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 200)); - // Displayed name + /* DEPENDENCY INJECTION */ + private UserAdmin userAdmin; + + // UI Objects + private UserTableViewer groupTableViewerCmp; + private TableViewer userViewer; + private List columnDefs = new ArrayList(); + + @Override + public void createPartControl(Composite parent) { + parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); + // Define the displayed columns columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); - return columnDefs; + 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, userAdmin); + + groupTableViewerCmp.setColumnDefinitions(columnDefs); + groupTableViewerCmp.populate(true, false); + groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll()); + + // Links + userViewer = groupTableViewerCmp.getTableViewer(); + userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); + getViewSite().setSelectionProvider(userViewer); + + // Really? + groupTableViewerCmp.refresh(); } - /** - * Refresh the user list: caller might overwrite in order to display a - * subset of all users, typically to remove current user from the list - */ - protected void refreshFilteredList(String filter) { - try { - Role[] roles = userAdmin().getRoles(filter); + private class MyUserTableViewer extends UserTableViewer { + private static final long serialVersionUID = 8467999509931900367L; + + public MyUserTableViewer(Composite parent, int style, + UserAdmin userAdmin) { + super(parent, style, userAdmin); + } + + @Override + protected List listFilteredElements(String filter) { + Role[] roles; + try { + roles = userAdmin.getRoles(filter); + } catch (InvalidSyntaxException e) { + throw new ArgeoException("Unable to get roles with filter: " + + filter, e); + } List users = new ArrayList(); for (Role role : roles) if (role.getType() == Role.GROUP) users.add((User) role); - getViewer().setInput(users.toArray()); - } catch (InvalidSyntaxException e) { - throw new ArgeoException("Unable to get roles with filter: " - + filter, e); + return users; } } - private abstract class GroupAdminAbstractLP extends ColumnLabelProvider { - private static final long serialVersionUID = 137336765024922368L; - - @Override - public String getText(Object element) { - User user = (User) element; - return getText(user); - } - - public abstract String getText(User user); + public void refresh() { + groupTableViewerCmp.refresh(); } - private class UserNameLP extends GroupAdminAbstractLP { - private static final long serialVersionUID = 6550449442061090388L; - - @Override - public String getText(User user) { - return user.getName(); - } + + // Override generic view methods + @Override + public void dispose() { + super.dispose(); } - private class CommonNameLP extends GroupAdminAbstractLP { - private static final long serialVersionUID = 5256703081044911941L; - - @Override - public String getText(User user) { - Object obj = user.getProperties().get(UserAdminConstants.KEY_CN); - if (obj != null) - return (String) obj; - else - return ""; - } + @Override + public void setFocus() { + groupTableViewerCmp.setFocus(); } + /* DEPENDENCY INJECTION */ + public void setUserAdmin(UserAdmin userAdmin) { + this.userAdmin = userAdmin; + } } \ No newline at end of file