X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Fviews%2FUsersView.java;h=31586085bddbd62969e627d2b6c39f11e52055f2;hb=94c54deff25c97eb8143594c15c2a3dea06c5811;hp=ac979240183a07825c56be5e7dd91b746cd5f5a5;hpb=b5a45cd0f6a753c25d72d6e8df1ce5fdb7e6651d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java index ac9792401..31586085b 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java @@ -15,144 +15,106 @@ */ package org.argeo.security.ui.admin.views; -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.observation.Event; -import javax.jcr.observation.EventIterator; -import javax.jcr.observation.EventListener; +import java.util.ArrayList; +import java.util.List; import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.parts.UsersTable; -import org.argeo.eclipse.ui.workbench.CommandUtils; -import org.argeo.jcr.ArgeoJcrConstants; +import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.ArgeoNames; -import org.argeo.jcr.ArgeoTypes; -import org.argeo.jcr.JcrUtils; import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; +import org.argeo.security.ui.admin.internal.ColumnDefinition; +import org.argeo.security.ui.admin.internal.CommonNameLP; +import org.argeo.security.ui.admin.internal.MailLP; +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.layout.FillLayout; 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; +import org.osgi.service.useradmin.User; +import org.osgi.service.useradmin.UserAdmin; -/** List all users with filter. */ +/** List all users with filter - based on Ldif userAdmin */ public class UsersView extends ViewPart implements ArgeoNames { public final static String ID = SecurityAdminPlugin.PLUGIN_ID - + ".adminUsersView"; + + ".usersView"; /* DEPENDENCY INJECTION */ - private Session session; + private UserAdmin userAdmin; - private UsersTable userTableCmp; - private JcrUserListener userStructureListener; - private JcrUserListener userPropertiesListener; + // UI Objects + private UserTableViewer userTableViewerCmp; + private TableViewer userViewer; + private List columnDefs = new ArrayList(); @Override public void createPartControl(Composite parent) { - parent.setLayout(new FillLayout()); - - // Create the composite that displays the list and a filter - userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, session); - userTableCmp.populate(true, false); - - // Configure - userTableCmp.getTableViewer().addDoubleClickListener( - new ViewDoubleClickListener()); - getViewSite().setSelectionProvider(userTableCmp.getTableViewer()); - - // Add listener to refresh the list when something changes - userStructureListener = new JcrUserListener(getSite().getShell() - .getDisplay()); - JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED - | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null); - userPropertiesListener = new JcrUserListener(getSite().getShell() - .getDisplay()); - JcrUtils.addListener(session, userStructureListener, - Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED - | Event.PROPERTY_REMOVED, - ArgeoJcrConstants.PEOPLE_BASE_PATH, - ArgeoTypes.ARGEO_USER_PROFILE); + parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); + // Define the displayed columns + columnDefs.add(new ColumnDefinition(new UserNameLP(), + "Distinguished Name", 200)); + columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", + 150)); + columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150)); + + // Create and configure the table + userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI + | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin); + userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll()); + + userTableViewerCmp.setColumnDefinitions(columnDefs); + userTableViewerCmp.populate(true, false); + + // Links + userViewer = userTableViewerCmp.getTableViewer(); + userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); + getViewSite().setSelectionProvider(userViewer); + + // Really? + userTableViewerCmp.refresh(); } - @Override - public void setFocus() { - userTableCmp.setFocus(); - } - - @Override - public void dispose() { - JcrUtils.removeListenerQuietly(session, userStructureListener); - JcrUtils.removeListenerQuietly(session, userPropertiesListener); - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - // public void setSession(Session session) { - // this.session = session; - // } - - public void refresh() { - this.getSite().getShell().getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - userTableCmp.refresh(); - } - }); - } - - private class JcrUserListener implements EventListener { - private final Display display; + private class MyUserTableViewer extends UserTableViewer { + private static final long serialVersionUID = 8467999509931900367L; - public JcrUserListener(Display display) { - super(); - this.display = display; + public MyUserTableViewer(Composite parent, int style, + UserAdmin userAdmin) { + super(parent, style, userAdmin); } @Override - public void onEvent(EventIterator events) { - display.asyncExec(new Runnable() { - @Override - public void run() { - userTableCmp.refresh(); - } - }); + 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.USER && role.getType() != Role.GROUP) + users.add((User) role); + return users; } } - class ViewDoubleClickListener implements IDoubleClickListener { - public void doubleClick(DoubleClickEvent evt) { - if (evt.getSelection().isEmpty()) - return; - - Object obj = ((IStructuredSelection) evt.getSelection()) - .getFirstElement(); - if (obj instanceof Node) { - try { - String username = ((Node) obj).getProperty(ARGEO_USER_ID) - .getString(); - String commandId = OpenArgeoUserEditor.COMMAND_ID; - String paramName = OpenArgeoUserEditor.PARAM_USERNAME; - CommandUtils.callCommand(commandId, paramName, username); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot open user editor", e); - } - } - } + // Override generic view methods + @Override + public void dispose() { + super.dispose(); } - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException re) { - throw new ArgeoException("Unable to initialise local session", re); - } + @Override + public void setFocus() { + userTableViewerCmp.setFocus(); } + /* DEPENDENCY INJECTION */ + public void setUserAdmin(UserAdmin userAdmin) { + this.userAdmin = userAdmin; + } } \ No newline at end of file