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.RepositoryException; import javax.jcr.Session; 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.jcr.ArgeoNames; import org.argeo.jcr.ArgeoTypes; import org.argeo.security.ArgeoUser; import org.argeo.security.ui.admin.SecurityAdminPlugin; 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.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.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"; private TableViewer viewer; private Session session; @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; } @Override public void setFocus() { viewer.getTable().setFocus(); } public void setSession(Session session) { this.session = session; } public void refresh() { viewer.refresh(); } @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 [" + ARGEO_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) { } } 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_PROFILE) .getProperty(ARGEO_FIRST_NAME).getString(); case 2: return userHome.getNode(ARGEO_PROFILE) .getProperty(ARGEO_LAST_NAME).getString(); case 3: return userHome.getNode(ARGEO_PROFILE) .getProperty(ARGEO_PRIMARY_EMAIL).getString(); default: throw new ArgeoException("Unmanaged column " + columnIndex); } } catch (RepositoryException e) { throw new ArgeoException("Cannot get text", e); } // 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 Image getColumnImage(Object element, int columnIndex) { // TODO Auto-generated method stub return null; } } 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 { 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 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); } } } } }