--- /dev/null
+<?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>
--- /dev/null
+<?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>
output.. = target/classes/
bin.includes = META-INF/,\
.,\
- plugin.xml
+ plugin.xml,\
+ icons/
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>
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>
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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();
+ }
+ }
+}
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;
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 {
viewer.setContentProvider(new UsersContentProvider());
viewer.setLabelProvider(new UsersLabelProvider());
viewer.setInput(getViewSite());
+ viewer.addDoubleClickListener(new ViewDoubleClickListener());
// viewer.setInput(SecurityContextHolder.getContext());
}
viewer.getTable().setFocus();
}
+ public void setSecurityService(ArgeoSecurityService securityService) {
+ this.securityService = securityService;
+ }
+
private class UsersContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
}
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();
}
}
- 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);
+ }
+
+ }
+ }
}
}