package org.argeo.security.ui.views;
+import java.util.ArrayList;
+
import org.argeo.ArgeoException;
import org.argeo.security.ArgeoSecurityService;
import org.argeo.security.ArgeoUser;
import org.argeo.security.equinox.CurrentUser;
+import org.argeo.security.nature.SimpleUserNature;
+import org.argeo.security.ui.SecurityUiPlugin;
+import org.argeo.security.ui.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.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.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.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;
+/** List all users. */
public class UsersView extends ViewPart {
+ public final static String ID = "org.argeo.security.ui.usersView";
+
private TableViewer viewer;
private ArgeoSecurityService securityService;
+ private String simpleNatureType = null;
+
@Override
public void createPartControl(Composite parent) {
-
- // viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
- // | SWT.V_SCROLL);
viewer = new TableViewer(createTable(parent));
viewer.setContentProvider(new UsersContentProvider());
viewer.setLabelProvider(new UsersLabelProvider());
+ viewer.addDoubleClickListener(new ViewDoubleClickListener());
viewer.setInput(getViewSite());
- // viewer.setInput(SecurityContextHolder.getContext());
}
protected Table createTable(Composite parent) {
- int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
-
- Table table = new Table(parent, style);
-
- // GridData gridData = new GridData(GridData.FILL_BOTH);
- // gridData.grabExcessVerticalSpace = true;
- // gridData.grabExcessHorizontalSpace = true;
- // gridData.horizontalSpan = 3;
- // table.setLayoutData(gridData);
-
+ 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("ID");
- column.setWidth(100);
-
+ column.setText("User");
+ column.setWidth(50);
column = new TableColumn(table, SWT.LEFT, 1);
- column.setText("Password");
- column.setWidth(200);
-
- // column = new TableColumn(table, SWT.LEFT, 2);
- // column.setText("Roles");
- // column.setWidth(300);
-
+ 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;
}
viewer.getTable().setFocus();
}
- private class UsersContentProvider implements IStructuredContentProvider {
+ public void setSecurityService(ArgeoSecurityService securityService) {
+ this.securityService = securityService;
+ }
- public Object[] getElements(Object inputElement) {
- return getChildren(inputElement);
- }
+ public void setSimpleNatureType(String simpleNatureType) {
+ this.simpleNatureType = simpleNatureType;
+ }
- public Object[] getChildren(Object parentElement) {
-// try {
-// Thread.sleep(3000);
-// } catch (InterruptedException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
+ public void refresh() {
+ viewer.refresh();
+ }
- return securityService.getSecurityDao().listUsers().toArray();
+ private class UsersContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ return securityService.listUsers().toArray();
}
public void dispose() {
- // TODO Auto-generated method stub
-
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // TODO Auto-generated method stub
-
}
}
ITableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
String currentUsername = CurrentUser.getUsername();
- ArgeoUser argeoUser = (ArgeoUser) element;
+ ArgeoUser user = (ArgeoUser) element;
+ SimpleUserNature simpleNature = SimpleUserNature
+ .findSimpleUserNature(user, simpleNatureType);
switch (columnIndex) {
case 0:
- String userName = argeoUser.getUsername();
+ String userName = user.getUsername();
if (userName.equals(currentUsername))
userName = userName + "*";
return userName;
case 1:
- return argeoUser.getPassword();
+ return simpleNature.getFirstName();
case 2:
- return argeoUser.getRoles().toString();
+ return simpleNature.getLastName();
+ case 3:
+ return simpleNature.getEmail();
default:
throw new ArgeoException("Unmanaged column " + columnIndex);
}
}
- public void setSecurityService(ArgeoSecurityService securityService) {
- this.securityService = securityService;
+ class ViewDoubleClickListener implements IDoubleClickListener {
+ public void doubleClick(DoubleClickEvent evt) {
+ Object obj = ((IStructuredSelection) evt.getSelection())
+ .getFirstElement();
+
+ if (obj instanceof ArgeoUser) {
+ ArgeoUser argeoUser = (ArgeoUser) obj;
+
+ IWorkbench iw = SecurityUiPlugin.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<Parameterization> parameters = new ArrayList<Parameterization>();
+ 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);
+ }
+
+ }
+ }
}
}