]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java
Improve Security
[lgpl/argeo-commons.git] / security / eclipse / plugins / org.argeo.security.ui / src / main / java / org / argeo / security / ui / views / UsersView.java
index d54c1a6e7b56bb60f82706e745aeacf750aecd62..d77ad0e07f154471f1f9fc71976cc4ef4d09a3b8 100644 (file)
@@ -1,10 +1,22 @@
 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;
@@ -14,50 +26,46 @@ 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.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;
        }
 
@@ -66,31 +74,28 @@ public class UsersView extends ViewPart {
                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
-
                }
 
        }
@@ -99,17 +104,21 @@ public class UsersView extends ViewPart {
                        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);
                        }
@@ -122,8 +131,44 @@ public class UsersView extends ViewPart {
 
        }
 
-       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);
+                               }
+
+                       }
+               }
        }
 
 }