From d6b532e59ebbea777f53fe55119524234dc95144 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 20 Jan 2011 12:11:14 +0000 Subject: [PATCH] Open user editor git-svn-id: https://svn.argeo.org/commons/trunk@4057 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/spring/commands.xml | 10 ++ .../META-INF/spring/editors.xml | 12 +++ .../org.argeo.security.ui/build.properties | 3 +- .../org.argeo.security.ui/icons/security.gif | Bin 0 -> 324 bytes .../org.argeo.security.ui/icons/user.gif | Bin 0 -> 310 bytes .../org.argeo.security.ui/icons/users.gif | Bin 0 -> 598 bytes .../plugins/org.argeo.security.ui/plugin.xml | 24 +++++ .../ui/commands/OpenArgeoUserEditor.java | 28 ++++++ .../security/ui/editors/ArgeoUserEditor.java | 58 +++++++++++ .../ui/editors/ArgeoUserEditorInput.java | 53 ++++++++++ .../ui/editors/ArgeoUserMainPage.java | 94 ++++++++++++++++++ .../argeo/security/ui/views/UsersView.java | 72 ++++++++++++-- 12 files changed, 345 insertions(+), 9 deletions(-) create mode 100644 security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml create mode 100644 security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/editors.xml create mode 100644 security/eclipse/plugins/org.argeo.security.ui/icons/security.gif create mode 100644 security/eclipse/plugins/org.argeo.security.ui/icons/user.gif create mode 100644 security/eclipse/plugins/org.argeo.security.ui/icons/users.gif create mode 100644 security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/OpenArgeoUserEditor.java create mode 100644 security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java create mode 100644 security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditorInput.java create mode 100644 security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserMainPage.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 index 000000000..4cee31dba --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml @@ -0,0 +1,10 @@ + + + + + + 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 index 000000000..747c2b7b6 --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/editors.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/security/eclipse/plugins/org.argeo.security.ui/build.properties b/security/eclipse/plugins/org.argeo.security.ui/build.properties index 7b6db787b..3868784bf 100644 --- a/security/eclipse/plugins/org.argeo.security.ui/build.properties +++ b/security/eclipse/plugins/org.argeo.security.ui/build.properties @@ -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 index 0000000000000000000000000000000000000000..57fb95edc3fe1e6cafc9f7bdc17e6bf886057030 GIT binary patch literal 324 zcmZ?wbhEHb6krfwxXQrr|4Y^XFV&x3w*LP<^Z(Cv|DQ4Ze<||+h3Nm6qW@nT|9@lh z|3moy&sG0FSO5Pu^U-PVH&+7x-?zWKN$c`P?VCHTE^iCEygm5DLY-|L^2-W^msKb& zt59232}D}UTbyPm@hoW$U)7zkx;t^hq>K%dGPg|6>q#}6kYzm~%Vt`k^VCA;X@xFR z3ti?``p&8JUD6aDVqx(A|9=Lef#OdVMg|5$1|5(Nke?XX5)aHM@X(R!Ke41pQ^#_q zDwAVC&?GkI;|>l|rF&HpS0ug+k;q_cxX5APvhjKo^KA#YDcowGBXt}MbvcElgt*#8 nMC1g;^_(@?IM_Kvw6qO%rn{=MvWjTz1OCBW9Gn(60SWa+}gzo||X6OdpAC pniZ}UB2{8+qLvgXp{K+VYbvgzz|tvZD96;vC(6Ls8R^Ji4FH!Gg(Uz0 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..2de7edd6467d1cda72bf3f3261a851ef5123c3d1 GIT binary patch literal 598 zcmZ?wbhEHb6krfwc*ek>-T+ljue_7{>xtp$SJo0$c(Z|!5 z?OV6+`s!Vm*6g~ta{IYW2d=N%b7{lg%j@@CTD$A~hP{^>rfi+|z>vY9 z12PO0Ck*VH8#0=jTUuKJg(6#hMZ;R{l7%y@_*^r@Qw&-og}YQ^cr$#(eOuy;wYXAU zd0kUw^gI)q9sF!#%@hO}%wj`>oSN<9ZDN(Zq@|c+gQFdr-4gv{mAuV0*kVJHBAP|? ztz%Vu%w2EFI%~H`2E_8HOQ|u%hMTk+M#ZMfSu&=5apzikqw&ERb{Up4DlZN!5}0Vn oe$M8?gaXEyQmrWw8HH*r)0xr|5*(5;1iCoXyjJN*axho}0DT+s*Z=?k literal 0 HcmV?d00001 diff --git a/security/eclipse/plugins/org.argeo.security.ui/plugin.xml b/security/eclipse/plugins/org.argeo.security.ui/plugin.xml index b99ba652f..cadb18f26 100644 --- a/security/eclipse/plugins/org.argeo.security.ui/plugin.xml +++ b/security/eclipse/plugins/org.argeo.security.ui/plugin.xml @@ -5,6 +5,7 @@ point="org.eclipse.ui.perspectives"> @@ -13,6 +14,7 @@ point="org.eclipse.ui.views"> @@ -55,4 +57,26 @@ configName="SPRING_SECURITY_CONTEXT"> + + + + + + + + + + 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 index 000000000..747d21a7e --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/OpenArgeoUserEditor.java @@ -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 index 000000000..fe5c0db0b --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java @@ -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 index 000000000..155f37e14 --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditorInput.java @@ -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 index 000000000..3591d0bb5 --- /dev/null +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserMainPage.java @@ -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(); + } + } +} diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java index d54c1a6e7..d83015520 100644 --- a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java @@ -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 parameters = new ArrayList(); + 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); + } + + } + } } } -- 2.30.2