X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fplugins%2Forg.argeo.security.ui.admin%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Fviews%2FUsersView.java;h=5f47741f5edb951cff6fd40797d48c1e6cbfcbf3;hb=368bd27f3da5356a1e45ae3645f64e674eb89904;hp=8879e8fd4e594e0e500244a1fddcd147d632e8a6;hpb=61320e5902070e49d32379aab06faaa1544835ab;p=lgpl%2Fargeo-commons.git diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java index 8879e8fd4..5f47741f5 100644 --- a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,81 +15,61 @@ */ package org.argeo.security.ui.admin.views; -import java.util.ArrayList; -import java.util.List; - import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.observation.Event; import javax.jcr.observation.EventIterator; import javax.jcr.observation.EventListener; -import javax.jcr.query.Query; import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.EclipseUiUtils; -import org.argeo.eclipse.ui.specific.EclipseUiSpecificUtils; +import org.argeo.eclipse.ui.utils.CommandUtils; import org.argeo.jcr.ArgeoJcrConstants; 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.UserTableComposite; import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor; -import org.eclipse.core.commands.Command; -import org.eclipse.core.commands.IParameter; -import org.eclipse.core.commands.Parameterization; -import org.eclipse.core.commands.ParameterizedCommand; -import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.commands.ICommandService; -import org.eclipse.ui.handlers.IHandlerService; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.part.ViewPart; -/** List all users. */ +/** List all users with filter. */ public class UsersView extends ViewPart implements ArgeoNames { - public final static String ID = "org.argeo.security.ui.admin.adminUsersView"; + public final static String ID = SecurityAdminPlugin.PLUGIN_ID + + ".adminUsersView"; - private TableViewer viewer; + private UserTableComposite userTableCmp; private Session session; - - private UserStructureListener userStructureListener; - private UserPropertiesListener userPropertiesListener; - - private Font italic; - private Font bold; + private JcrUserListener userStructureListener; + private JcrUserListener userPropertiesListener; @Override public void createPartControl(Composite parent) { - italic = EclipseUiUtils.getItalicFont(parent); - bold = EclipseUiUtils.getBoldFont(parent); + parent.setLayout(new FillLayout()); + + // Create the composite that displays the list and a filter + userTableCmp = new UserTableComposite(parent, SWT.NO_FOCUS, session); + userTableCmp.populate(true, false); - // viewer = new TableViewer(createTable(parent)); - viewer = createTableViewer(parent); - EclipseUiSpecificUtils.enableToolTipSupport(viewer); - viewer.setContentProvider(new UsersContentProvider()); - // viewer.setLabelProvider(new UsersLabelProvider()); - viewer.addDoubleClickListener(new ViewDoubleClickListener()); - getViewSite().setSelectionProvider(viewer); - viewer.setInput(getViewSite()); + // Configure + userTableCmp.getTableViewer().addDoubleClickListener( + new ViewDoubleClickListener()); + getViewSite().setSelectionProvider(userTableCmp.getTableViewer()); - userStructureListener = new UserStructureListener(); + // 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 UserPropertiesListener(); + userPropertiesListener = new JcrUserListener(getSite().getShell() + .getDisplay()); JcrUtils.addListener(session, userStructureListener, Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED | Event.PROPERTY_REMOVED, @@ -97,91 +77,9 @@ public class UsersView extends ViewPart implements ArgeoNames { ArgeoTypes.ARGEO_USER_PROFILE); } - protected TableViewer createTableViewer(final Composite parent) { - - Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - TableViewer viewer = new TableViewer(table); - table.setLinesVisible(true); - table.setHeaderVisible(true); - - // User ID - TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE); - column.getColumn().setText("User ID"); - column.getColumn().setWidth(100); - column.setLabelProvider(new CLProvider() { - public String getText(Object elem) { - return getProperty(elem, ARGEO_USER_ID); - // if (username.equals(session.getUserID())) - // return "[" + username + "]"; - // else - // return username; - } - }); - - // Displayed name - column = new TableViewerColumn(viewer, SWT.NONE); - column.getColumn().setText("Name"); - column.getColumn().setWidth(150); - column.setLabelProvider(new CLProvider() { - public String getText(Object elem) { - return getProperty(elem, Property.JCR_TITLE); - } - }); - - // E-mail - column = new TableViewerColumn(viewer, SWT.NONE); - column.getColumn().setText("E-mail"); - column.getColumn().setWidth(150); - column.setLabelProvider(new CLProvider() { - public String getText(Object elem) { - return getProperty(elem, ARGEO_PRIMARY_EMAIL); - } - }); - - // E-mail - column = new TableViewerColumn(viewer, SWT.NONE); - column.getColumn().setText("Description"); - column.getColumn().setWidth(200); - column.setLabelProvider(new CLProvider() { - public String getText(Object elem) { - return getProperty(elem, Property.JCR_DESCRIPTION); - } - }); - - return viewer; - } - - private class CLProvider extends ColumnLabelProvider { - - public String getToolTipText(Object element) { - return getText(element); - } - - @Override - public Font getFont(Object elem) { - // self - String username = getProperty(elem, ARGEO_USER_ID); - if (username.equals(session.getUserID())) - return bold; - - // disabled - try { - Node userProfile = (Node) elem; - // Node userProfile = userHome.getNode(ARGEO_PROFILE); - if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean()) - return italic; - else - return null; - } catch (RepositoryException e) { - throw new ArgeoException("Cannot get font for " + username, e); - } - } - - } - @Override public void setFocus() { - viewer.getTable().setFocus(); + userTableCmp.setFocus(); } @Override @@ -196,71 +94,31 @@ public class UsersView extends ViewPart implements ArgeoNames { } public void refresh() { - viewer.refresh(); - } - - protected String getProperty(Node userProfile, String name) - throws RepositoryException { - return userProfile.hasProperty(name) ? userProfile.getProperty(name) - .getString() : ""; - } - - protected String getProperty(Object element, String name) { - try { - Node userProfile = (Node) element; - // Node userProfile = userHome.getNode(ARGEO_PROFILE); - return userProfile.hasProperty(name) ? userProfile - .getProperty(name).getString() : ""; - } catch (RepositoryException e) { - throw new ArgeoException("Cannot get property " + name, e); - } + this.getSite().getShell().getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + userTableCmp.refresh(); + } + }); } - private class UserStructureListener implements EventListener { + private class JcrUserListener implements EventListener { + private final Display display; - @Override - public void onEvent(EventIterator events) { - viewer.refresh(); + public JcrUserListener(Display display) { + super(); + this.display = display; } - } - - private class UserPropertiesListener implements EventListener { @Override public void onEvent(EventIterator events) { - viewer.refresh(); - } - } - - private class UsersContentProvider implements IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - try { - Query query = session - .getWorkspace() - .getQueryManager() - .createQuery( - "select * from [" - + ArgeoTypes.ARGEO_USER_PROFILE + "]", - Query.JCR_SQL2); - NodeIterator nit = query.execute().getNodes(); - List userProfiles = new ArrayList(); - while (nit.hasNext()) { - userProfiles.add(nit.nextNode()); + display.asyncExec(new Runnable() { + @Override + public void run() { + userTableCmp.refresh(); } - return userProfiles.toArray(); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot list users", e); - } - // return userAdminService.listUsers().toArray(); - } - - public void dispose() { + }); } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - } class ViewDoubleClickListener implements IDoubleClickListener { @@ -271,38 +129,16 @@ public class UsersView extends ViewPart implements ArgeoNames { Object obj = ((IStructuredSelection) evt.getSelection()) .getFirstElement(); if (obj instanceof Node) { - IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); - IHandlerService handlerService = (IHandlerService) iw - .getService(IHandlerService.class); try { String username = ((Node) obj).getProperty(ARGEO_USER_ID) .getString(); String commandId = OpenArgeoUserEditor.COMMAND_ID; String paramName = OpenArgeoUserEditor.PARAM_USERNAME; - - // TODO: factorize this - // execute related command - IWorkbenchWindow window = iw.getActiveWorkbenchWindow(); - ICommandService cmdService = (ICommandService) window - .getService(ICommandService.class); - Command cmd = cmdService.getCommand(commandId); - ArrayList parameters = new ArrayList(); - IParameter iparam = cmd.getParameter(paramName); - Parameterization param = new Parameterization(iparam, - username); - parameters.add(param); - ParameterizedCommand pc = new ParameterizedCommand(cmd, - parameters.toArray(new Parameterization[parameters - .size()])); - handlerService = (IHandlerService) window - .getService(IHandlerService.class); - handlerService.executeCommand(pc, null); - } catch (Exception e) { - throw new ArgeoException("Cannot open editor", e); + CommandUtils.callCommand(commandId, paramName, username); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot open user editor", e); } - } } } - -} +} \ No newline at end of file