Open user editor
[lgpl/argeo-commons.git] / security / eclipse / plugins / org.argeo.security.ui / src / main / java / org / argeo / security / ui / views / UsersView.java
index d54c1a6e7b56bb60f82706e745aeacf750aecd62..d830155207f1db851dbb51297a5ebb2076e23d89 100644 (file)
@@ -1,10 +1,21 @@
 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.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,6 +25,10 @@ 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;
 
 public class UsersView extends ViewPart {
@@ -29,6 +44,7 @@ public class UsersView extends ViewPart {
                viewer.setContentProvider(new UsersContentProvider());
                viewer.setLabelProvider(new UsersLabelProvider());
                viewer.setInput(getViewSite());
+               viewer.addDoubleClickListener(new ViewDoubleClickListener());
                // viewer.setInput(SecurityContextHolder.getContext());
        }
 
@@ -66,6 +82,10 @@ public class UsersView extends ViewPart {
                viewer.getTable().setFocus();
        }
 
+       public void setSecurityService(ArgeoSecurityService securityService) {
+               this.securityService = securityService;
+       }
+
        private class UsersContentProvider implements IStructuredContentProvider {
 
                public Object[] getElements(Object inputElement) {
@@ -73,12 +93,12 @@ public class UsersView extends ViewPart {
                }
 
                public Object[] getChildren(Object parentElement) {
-//                     try {
-//                             Thread.sleep(3000);
-//                     } catch (InterruptedException e) {
-//                             // TODO Auto-generated catch block
-//                             e.printStackTrace();
-//                     }
+                       // try {
+                       // Thread.sleep(3000);
+                       // } catch (InterruptedException e) {
+                       // // TODO Auto-generated catch block
+                       // e.printStackTrace();
+                       // }
 
                        return securityService.getSecurityDao().listUsers().toArray();
                }
@@ -122,8 +142,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);
+                               }
+
+                       }
+               }
        }
 
 }