Open user editor
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 20 Jan 2011 12:11:14 +0000 (12:11 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 20 Jan 2011 12:11:14 +0000 (12:11 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4057 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

12 files changed:
security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/editors.xml [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/build.properties
security/eclipse/plugins/org.argeo.security.ui/icons/security.gif [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/icons/user.gif [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/icons/users.gif [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/plugin.xml
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/OpenArgeoUserEditor.java [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditorInput.java [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserMainPage.java [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java

diff --git a/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml b/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml
new file mode 100644 (file)
index 0000000..4cee31d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+       <bean id="org.argeo.security.ui.openArgeoUserEditor" class="org.argeo.security.ui.commands.OpenArgeoUserEditor"
+               scope="prototype">
+       </bean>
+</beans>
diff --git a/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/editors.xml b/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/editors.xml
new file mode 100644 (file)
index 0000000..747c2b7
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+       <!-- Editors -->
+       <bean id="org.argeo.security.ui.argeoUserEditor" class="org.argeo.security.ui.editors.ArgeoUserEditor"
+               scope="prototype">
+               <property name="securityService" ref="securityService" />
+       </bean>
+</beans>
index 7b6db787bdf89f9f733acba7a946bf64854580c7..3868784bf842eed7f55ac6da0a547f19794556f1 100644 (file)
@@ -2,4 +2,5 @@ source.. = src/main/java/
 output.. = target/classes/
 bin.includes = META-INF/,\
                .,\
-               plugin.xml
+               plugin.xml,\
+               icons/
diff --git a/security/eclipse/plugins/org.argeo.security.ui/icons/security.gif b/security/eclipse/plugins/org.argeo.security.ui/icons/security.gif
new file mode 100644 (file)
index 0000000..57fb95e
Binary files /dev/null and b/security/eclipse/plugins/org.argeo.security.ui/icons/security.gif differ
diff --git a/security/eclipse/plugins/org.argeo.security.ui/icons/user.gif b/security/eclipse/plugins/org.argeo.security.ui/icons/user.gif
new file mode 100644 (file)
index 0000000..90a0014
Binary files /dev/null and b/security/eclipse/plugins/org.argeo.security.ui/icons/user.gif differ
diff --git a/security/eclipse/plugins/org.argeo.security.ui/icons/users.gif b/security/eclipse/plugins/org.argeo.security.ui/icons/users.gif
new file mode 100644 (file)
index 0000000..2de7edd
Binary files /dev/null and b/security/eclipse/plugins/org.argeo.security.ui/icons/users.gif differ
index b99ba652f6795c1f63130ecc999214890fd4ee59..cadb18f2628225bb86f77ea8f9cd7d52db173ec8 100644 (file)
@@ -5,6 +5,7 @@
          point="org.eclipse.ui.perspectives">
       <perspective
             class="org.argeo.security.ui.SecurityPerspective"
+            icon="icons/security.gif"
             id="org.argeo.security.ui.securityPerspective"
             name="Security">
       </perspective>
@@ -13,6 +14,7 @@
          point="org.eclipse.ui.views">
       <view
             class="org.argeo.eclipse.spring.SpringExtensionFactory"
+            icon="icons/users.gif"
             id="org.argeo.security.ui.usersView"
             name="Users"
             restorable="false">
             configName="SPRING_SECURITY_CONTEXT">
       </callbackHandlerMapping>
    </extension>
+   <extension
+           point="org.eclipse.ui.editors">
+               <editor
+                 class="org.argeo.eclipse.spring.SpringExtensionFactory"
+              id="org.argeo.security.ui.argeoUserEditor"
+              name="User"
+              icon="icons/user.gif"
+              default="false">
+        </editor>
+     </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+            id="org.argeo.security.ui.openArgeoUserEditor"
+            name="OpenArgeoUserEditor">
+                       <commandParameter
+                       id="org.argeo.security.ui.username"
+                       name="Username">
+                       </commandParameter>
+      </command>
+    </extension>
  </plugin>
diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/OpenArgeoUserEditor.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/OpenArgeoUserEditor.java
new file mode 100644 (file)
index 0000000..747d21a
--- /dev/null
@@ -0,0 +1,28 @@
+package org.argeo.security.ui.commands;
+
+import org.argeo.security.ui.editors.ArgeoUserEditor;
+import org.argeo.security.ui.editors.ArgeoUserEditorInput;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Command handler to set visible or open a Argeo user. */
+public class OpenArgeoUserEditor extends AbstractHandler {
+       public final static String COMMAND_ID = "org.argeo.security.ui.openArgeoUserEditor";
+       public final static String PARAM_USERNAME = "org.argeo.security.ui.username";
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               try {
+                       ArgeoUserEditorInput editorInput = new ArgeoUserEditorInput(
+                                       event.getParameter(PARAM_USERNAME));
+                       IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(
+                                       event).getActivePage();
+                       activePage.openEditor(editorInput, ArgeoUserEditor.ID);
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+               return null;
+       }
+}
diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java
new file mode 100644 (file)
index 0000000..fe5c0db
--- /dev/null
@@ -0,0 +1,58 @@
+package org.argeo.security.ui.editors;
+
+import org.argeo.ArgeoException;
+import org.argeo.security.ArgeoSecurityService;
+import org.argeo.security.ArgeoUser;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.editor.FormEditor;
+
+/** Editor for an Argeo user. */
+public class ArgeoUserEditor extends FormEditor {
+       public final static String ID = "org.argeo.security.ui.argeoUserEditor";
+
+       private ArgeoUser user;
+       private ArgeoSecurityService securityService;
+
+       public void init(IEditorSite site, IEditorInput input)
+                       throws PartInitException {
+               super.init(site, input);
+               String username = ((ArgeoUserEditorInput) getEditorInput())
+                               .getUsername();
+               user = securityService.getSecurityDao().getUser(username);
+               this.setPartProperty("name", username);
+       }
+
+       protected void addPages() {
+               try {
+                       addPage(new ArgeoUserMainPage(this, user));
+               } catch (PartInitException e) {
+                       throw new ArgeoException("Not able to add page ", e);
+               }
+       }
+
+       @Override
+       public void doSave(IProgressMonitor monitor) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public void doSaveAs() {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public boolean isSaveAsAllowed() {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       public void setSecurityService(ArgeoSecurityService securityService) {
+               this.securityService = securityService;
+       }
+
+}
diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditorInput.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditorInput.java
new file mode 100644 (file)
index 0000000..155f37e
--- /dev/null
@@ -0,0 +1,53 @@
+package org.argeo.security.ui.editors;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/** Editor input for an Argeo user. */
+public class ArgeoUserEditorInput implements IEditorInput {
+       private final String username;
+
+       public ArgeoUserEditorInput(String username) {
+               this.username = username;
+       }
+
+       public Object getAdapter(Class adapter) {
+               return null;
+       }
+
+       public boolean exists() {
+               // TODO: use security service?
+               return true;
+       }
+
+       public ImageDescriptor getImageDescriptor() {
+               return null;
+       }
+
+       public String getName() {
+               return username;
+       }
+
+       public IPersistableElement getPersistable() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       public String getToolTipText() {
+               return username;
+       }
+
+       public boolean equals(Object obj) {
+               if (!(obj instanceof ArgeoUserEditorInput))
+                       return false;
+               if (((ArgeoUserEditorInput) obj).getUsername() == null)
+                       return false;
+               return ((ArgeoUserEditorInput) obj).getUsername().equals(username);
+       }
+
+       public String getUsername() {
+               return username;
+       }
+
+}
diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserMainPage.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserMainPage.java
new file mode 100644 (file)
index 0000000..3591d0b
--- /dev/null
@@ -0,0 +1,94 @@
+package org.argeo.security.ui.editors;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.security.ArgeoUser;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ColumnLayout;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * 
+ * @author bsinou
+ * 
+ *         This page display main info of a specified Ebi. Roles enable the
+ */
+public class ArgeoUserMainPage extends FormPage {
+       private final static Log log = LogFactory.getLog(ArgeoUserMainPage.class);
+
+       private ArgeoUser user;
+
+       private Text text;
+       private Combo combo;
+
+       public ArgeoUserMainPage(FormEditor editor, ArgeoUser user) {
+               super(editor, "argeoUserEditor.mainPage", "Main");
+               this.user = user;
+       }
+
+       protected void createFormContent(IManagedForm managedForm) {
+               try {
+                       ScrolledForm form = managedForm.getForm();
+
+                       // Set the title of the current form
+                       form.setText(user.toString());
+
+                       ColumnLayout mainLayout = new ColumnLayout();
+                       mainLayout.minNumColumns = 1;
+                       mainLayout.maxNumColumns = 4;
+
+                       mainLayout.topMargin = 0;
+                       mainLayout.bottomMargin = 5;
+                       mainLayout.leftMargin = mainLayout.rightMargin = mainLayout.horizontalSpacing = mainLayout.verticalSpacing = 10;
+                       form.getBody().setLayout(mainLayout);
+
+                       FormToolkit toolkit = managedForm.getToolkit();
+
+                       Composite body = toolkit.createComposite(form.getBody());
+                       GridLayout layout = new GridLayout();
+                       layout.marginWidth = layout.marginHeight = 0;
+                       layout.numColumns = 2;
+                       body.setLayout(layout);
+
+                       // Comments
+                       toolkit.createLabel(body, "Label1");
+                       text = toolkit.createText(body, user.getUsername(), SWT.WRAP
+                                       | SWT.BORDER);
+
+                       // Project Status
+                       // A combo Box
+                       toolkit.createLabel(body, "Statut du Projet");
+                       // TIP : we have to create a composite to wrap the combo box that
+                       // cannot be handled directly by the toolkit.
+                       Composite subBody = toolkit.createComposite(body);
+
+                       GridLayout subLayout = new GridLayout();
+                       subLayout.marginWidth = 3;
+                       layout.numColumns = 2;
+                       subBody.setLayout(subLayout);
+
+                       // The subBody fills 2 columns and a row
+                       GridData gd;
+                       gd = new GridData(GridData.FILL_BOTH);
+                       gd.horizontalSpan = 2;
+                       subBody.setLayoutData(gd);
+
+                       toolkit.adapt(subBody, true, true);
+
+                       toolkit.createLabel(body, "Some more text");
+                       toolkit.createLabel(body, "And Again");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+}
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);
+                               }
+
+                       }
+               }
        }
 
 }