X-Git-Url: http://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=a7437156d96e55ea24755b0bdf2596a9f44255a9;hb=3a3d316af102ba410d1d9e6de349d0c8f7ac044f;hp=af3a886efb950c58f91b31958cc15da068e2e96b;hpb=2f510fb09e18bc3d3e902c8131d0037763c5f279;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 af3a886ef..a7437156d 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,189 +1,128 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ 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.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 javax.jcr.query.Query; import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.dialogs.Error; +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.security.ArgeoUser; +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.argeo.security.ui.admin.editors.ArgeoUserEditor; -import org.argeo.security.ui.admin.editors.ArgeoUserEditorInput; -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.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PartInitException; -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. */ -public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes, - EventListener { - public final static String ID = "org.argeo.security.ui.admin.adminUsersView"; +/** List all users with filter. */ +public class UsersView extends ViewPart implements ArgeoNames { + public final static String ID = SecurityAdminPlugin.PLUGIN_ID + + ".adminUsersView"; - private TableViewer viewer; + /* DEPENDENCY INJECTION */ private Session session; + private UserTableComposite userTableCmp; + private JcrUserListener userStructureListener; + private JcrUserListener userPropertiesListener; + @Override public void createPartControl(Composite parent) { - viewer = new TableViewer(createTable(parent)); - viewer.setContentProvider(new UsersContentProvider()); - viewer.setLabelProvider(new UsersLabelProvider()); - viewer.addDoubleClickListener(new ViewDoubleClickListener()); - viewer.setInput(getViewSite()); - } - - protected Table createTable(Composite parent) { - Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - table.setLinesVisible(true); - table.setHeaderVisible(true); - TableColumn column = new TableColumn(table, SWT.LEFT, 0); - column.setText("User"); - column.setWidth(50); - column = new TableColumn(table, SWT.LEFT, 1); - column.setText("First Name"); - column.setWidth(100); - column = new TableColumn(table, SWT.LEFT, 2); - column.setText("Last Name"); - column.setWidth(100); - column = new TableColumn(table, SWT.LEFT, 3); - column.setText("E-mail"); - column.setWidth(100); - return table; + 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); + + // 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); } @Override public void setFocus() { - viewer.getTable().setFocus(); - } - - public void setSession(Session session) { - this.session = session; - } - - public void refresh() { - viewer.refresh(); + userTableCmp.setFocus(); } @Override - public void onEvent(EventIterator events) { - viewer.refresh(); + public void dispose() { + JcrUtils.removeListenerQuietly(session, userStructureListener); + JcrUtils.removeListenerQuietly(session, userPropertiesListener); + JcrUtils.logoutQuietly(session); + super.dispose(); } - private class UsersContentProvider implements IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - try { - Query query = session - .getWorkspace() - .getQueryManager() - .createQuery( - "select [" + ARGEO_USER_PROFILE + "] from [" - + ARGEO_USER_HOME + "]", Query.JCR_SQL2); - NodeIterator nit = query.execute().getNodes(); - List userProfiles = new ArrayList(); - while (nit.hasNext()) { - userProfiles.add(nit.nextNode()); - } - 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) { - } + // 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 UsersLabelProvider extends LabelProvider implements - ITableLabelProvider { - public String getColumnText(Object element, int columnIndex) { - try { - Node userHome = (Node) element; - switch (columnIndex) { - case 0: - String userName = userHome.getProperty(ARGEO_USER_ID) - .getString(); - if (userName.equals(session.getUserID())) - return "[" + userName + "]"; - else - return userName; - case 1: - return userHome.getNode(ARGEO_USER_PROFILE) - .getProperty(ARGEO_FIRST_NAME).getString(); - case 2: - return userHome.getNode(ARGEO_USER_PROFILE) - .getProperty(ARGEO_LAST_NAME).getString(); - case 3: - return userHome.getNode(ARGEO_USER_PROFILE) - .getProperty(ARGEO_PRIMARY_EMAIL).getString(); - default: - throw new ArgeoException("Unmanaged column " + columnIndex); - } - } catch (RepositoryException e) { - throw new ArgeoException("Cannot get text", e); - } + private class JcrUserListener implements EventListener { + private final Display display; - // String currentUsername = CurrentUser.getUsername(); - // String currentUsername = ""; - // ArgeoUser user = (ArgeoUser) element; - // SimpleUserNature simpleNature = SimpleUserNature - // .findSimpleUserNature(user, simpleNatureType); - // switch (columnIndex) { - // case 0: - // String userName = user.getUsername(); - // if (userName.equals(currentUsername)) - // userName = userName + "*"; - // return userName; - // case 1: - // return simpleNature.getFirstName(); - // case 2: - // return simpleNature.getLastName(); - // case 3: - // return simpleNature.getEmail(); - // default: - // throw new ArgeoException("Unmanaged column " + columnIndex); - // } + public JcrUserListener(Display display) { + super(); + this.display = display; } - public Image getColumnImage(Object element, int columnIndex) { - // TODO Auto-generated method stub - return null; + @Override + public void onEvent(EventIterator events) { + display.asyncExec(new Runnable() { + @Override + public void run() { + userTableCmp.refresh(); + } + }); } - } class ViewDoubleClickListener implements IDoubleClickListener { @@ -195,48 +134,25 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes, .getFirstElement(); if (obj instanceof Node) { try { - IWorkbench iw = SecurityAdminPlugin.getDefault() - .getWorkbench(); - iw.getActiveWorkbenchWindow() - .getActivePage() - .openEditor(new ArgeoUserEditorInput((Node) obj), - ArgeoUserEditor.ID); - } catch (PartInitException e) { - Error.show("Cannot open user editor for " + obj, e); - } - } else if (obj instanceof ArgeoUser) { - ArgeoUser argeoUser = (ArgeoUser) obj; - - 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, - argeoUser.getUsername()); - 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); } - } } } -} + /* DEPENDENCY INJECTION */ + public void setRepository(Repository repository) { + try { + session = repository.login(); + } catch (RepositoryException re) { + throw new ArgeoException("Unable to initialise local session", re); + } + } + +} \ No newline at end of file