]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java
Work on userAdmin UI:
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / views / UsersView.java
index ac979240183a07825c56be5e7dd91b746cd5f5a5..31586085bddbd62969e627d2b6c39f11e52055f2 100644 (file)
  */
 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<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
 
        @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<User> 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<User> users = new ArrayList<User>();
+                       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