Working users management
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 19 Apr 2018 17:32:14 +0000 (19:32 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 19 Apr 2018 17:32:14 +0000 (19:32 +0200)
org.argeo.cms.e4/src/org/argeo/cms/e4/CmsE4Utils.java [new file with mode: 0644]
org.argeo.cms.e4/src/org/argeo/cms/e4/users/AbstractRoleEditor.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupEditor.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupsView.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserEditor.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserTableDefaultDClickListener.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/UsersView.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/handlers/DeleteGroups.java
org.argeo.cms.e4/src/org/argeo/cms/e4/users/handlers/DeleteUsers.java
org.argeo.cms.ui.theme/icons/delete.png

diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/CmsE4Utils.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/CmsE4Utils.java
new file mode 100644 (file)
index 0000000..b8ad37e
--- /dev/null
@@ -0,0 +1,28 @@
+package org.argeo.cms.e4;
+
+import org.argeo.cms.CmsException;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
+
+public class CmsE4Utils {
+       public static void openEditor(EPartService partService, String editorId, String key, String state) {
+               for (MPart part : partService.getParts()) {
+                       String id = part.getPersistedState().get(key);
+                       if (id != null && state.equals(id)) {
+                               partService.showPart(part, PartState.ACTIVATE);
+                               return;
+                       }
+               }
+
+               // new part
+               MPart part = partService.createPart(editorId);
+               if (part == null)
+                       throw new CmsException("No editor found with id " + editorId);
+               part.getPersistedState().put(key, state);
+               partService.showPart(part, PartState.ACTIVATE);
+       }
+
+       private CmsE4Utils() {
+       }
+}
index 589cca60dea140f21dfcd5af0c63f996018c62e8..518be8ce59db78715ecf839d64d55612576811a4 100644 (file)
@@ -25,7 +25,6 @@ import javax.inject.Inject;
 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
 import org.argeo.cms.ui.eclipse.forms.IManagedForm;
 import org.argeo.cms.ui.eclipse.forms.ManagedForm;
-import org.argeo.cms.util.CmsUtils;
 import org.argeo.cms.util.UserAdminUtils;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.naming.LdapAttrs;
@@ -74,7 +73,7 @@ public abstract class AbstractRoleEditor {
 
        private NameChangeListener listener;
 
-       private IManagedForm managedForm;
+       private ManagedForm managedForm;
 
        // public void init(IEditorSite site, IEditorInput input) throws
        // PartInitException {
@@ -88,11 +87,18 @@ public abstract class AbstractRoleEditor {
                userAdminWrapper.addListener(listener);
                updateEditorTitle(null);
 
-               managedForm = new ManagedForm(parent);
+               managedForm = new ManagedForm(parent) {
+
+                       @Override
+                       public void staleStateChanged() {
+                               refresh();
+                       }
+               };
                ScrolledComposite scrolled = managedForm.getForm();
                Composite body = new Composite(scrolled, SWT.NONE);
                scrolled.setContent(body);
                createUi(body);
+               managedForm.refresh();
        }
 
        abstract void createUi(Composite parent);
@@ -171,6 +177,7 @@ public abstract class AbstractRoleEditor {
        @PreDestroy
        public void dispose() {
                userAdminWrapper.removeListener(listener);
+               managedForm.dispose();
        }
 
        // CONTROLERS FOR THIS EDITOR AND ITS PAGES
@@ -248,10 +255,10 @@ public abstract class AbstractRoleEditor {
        Text createLMT(Composite parent, String label, String value) {
                Label lbl = new Label(parent, SWT.NONE);
                lbl.setText(label);
-               lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
+               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
                Text text = new Text(parent, SWT.NONE);
                text.setText(value);
-               text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, true, true));
                return text;
        }
 
@@ -259,10 +266,10 @@ public abstract class AbstractRoleEditor {
        Text createLP(Composite parent, String label, String value) {
                Label lbl = new Label(parent, SWT.NONE);
                lbl.setText(label);
-               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, false, false));
-               Text text = new Text(parent, SWT.PASSWORD);
+               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
+               Text text = new Text(parent, SWT.PASSWORD | SWT.BORDER);
                text.setText(value);
-               text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, true, false));
                return text;
        }
 
@@ -270,25 +277,25 @@ public abstract class AbstractRoleEditor {
        Text createLT(Composite parent, String label, String value) {
                Label lbl = new Label(parent, SWT.NONE);
                lbl.setText(label);
-               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, false, false));
+               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
                lbl.setFont(EclipseUiUtils.getBoldFont(parent));
-               Text text = new Text(parent, SWT.NONE);
+               Text text = new Text(parent, SWT.BORDER);
                text.setText(value);
                text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);
+               // CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);
                return text;
        }
 
        Text createReadOnlyLT(Composite parent, String label, String value) {
                Label lbl = new Label(parent, SWT.NONE);
                lbl.setText(label);
-               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, false, false));
+               lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
                lbl.setFont(EclipseUiUtils.getBoldFont(parent));
                Text text = new Text(parent, SWT.NONE);
                text.setText(value);
-               text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text.setLayoutData(new GridData(SWT.LEAD, SWT.FILL, true, false));
                text.setEditable(false);
-               CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);
+               // CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);
                return text;
        }
 
index 27af13684d0ba25243acada8d9a75cb10425759a..a38879424f87a1b990bb510d376ceea15ecd562b 100644 (file)
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.jcr.Node;
 import javax.jcr.Repository;
@@ -41,6 +42,7 @@ import org.argeo.cms.e4.users.providers.RoleIconLP;
 import org.argeo.cms.e4.users.providers.UserFilter;
 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
 import org.argeo.cms.ui.eclipse.forms.IManagedForm;
+import org.argeo.cms.util.CmsUtils;
 import org.argeo.cms.util.UserAdminUtils;
 import org.argeo.eclipse.ui.ColumnDefinition;
 import org.argeo.eclipse.ui.EclipseUiUtils;
@@ -64,12 +66,9 @@ import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -150,7 +149,7 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
                appendMembersPart(body, group);
        }
 
-       @Override
+       @PreDestroy
        public void dispose() {
                JcrUtils.logoutQuietly(session);
                super.dispose();
@@ -158,14 +157,15 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
 
        /** Creates the general section */
        protected void appendOverviewPart(final Composite parent, final Group group) {
-               Composite body = new Composite(parent, SWT.BORDER);
+               Composite body = new Composite(parent, SWT.NONE);
                // GridLayout layout = new GridLayout(5, false);
                GridLayout layout = new GridLayout(2, false);
                body.setLayout(layout);
+               body.setLayoutData(CmsUtils.fillWidth());
 
                String cn = UserAdminUtils.getProperty(group, LdapAttrs.cn.name());
                createReadOnlyLT(body, "Name", cn);
-               // Text dnTxt = createReadOnlyLT(body, "DN", group.getName());
+               createReadOnlyLT(body, "DN", group.getName());
                createReadOnlyLT(body, "Domain", UserAdminUtils.getDomainName(group));
 
                // Description
@@ -263,20 +263,11 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
                // section.setText("Members");
                // section.setLayoutData(EclipseUiUtils.fillAll());
 
-               Composite body = new Composite(parent, SWT.NO_FOCUS);
-               body.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               Composite body = new Composite(parent, SWT.BORDER);
+               body.setLayout(new GridLayout());
                // section.setClient(body);
                body.setLayoutData(EclipseUiUtils.fillAll());
 
-               LdifUsersTable userTableViewerCmp = createMemberPart(body, group);
-
-               AbstractFormPart part = new GroupMembersPart(userTableViewerCmp);
-               getManagedForm().addPart(part);
-               addRemoveAbitily(body, userTableViewerCmp.getTableViewer(), group);
-       }
-
-       private LdifUsersTable createMemberPart(Composite parent, Group group) {
-
                // Define the displayed columns
                List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
                columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
@@ -286,7 +277,7 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
                // 240));
 
                // Create and configure the table
-               LdifUsersTable userViewerCmp = new MyUserTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL,
+               LdifUsersTable userViewerCmp = new MyUserTableViewer(body, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL,
                                userAdminWrapper.getUserAdmin());
 
                userViewerCmp.setColumnDefinitions(columnDefs);
@@ -301,9 +292,57 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
                userViewer.addDropSupport(operations, tt,
                                new GroupDropListener(userAdminWrapper, userViewerCmp, (Group) getDisplayedUser()));
 
-               return userViewerCmp;
+               AbstractFormPart part = new GroupMembersPart(userViewerCmp);
+               getManagedForm().addPart(part);
+
+               // remove button
+               // addRemoveAbility(toolBarManager, userViewerCmp.getTableViewer(), group);
+               Action action = new RemoveMembershipAction(userViewer, group, "Remove selected items from this group",
+                               SecurityAdminImages.ICON_REMOVE_DESC);
+
+               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+               ToolBar toolBar = toolBarManager.createControl(body);
+               toolBar.setLayoutData(CmsUtils.fillWidth());
+
+               toolBarManager.add(action);
+               toolBarManager.update(true);
+
        }
 
+       // private LdifUsersTable createMemberPart(Composite parent, Group group) {
+       //
+       // // Define the displayed columns
+       // List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+       // columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
+       // columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Name", 150));
+       // columnDefs.add(new ColumnDefinition(new MailLP(), "Mail", 150));
+       // // columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished
+       // Name",
+       // // 240));
+       //
+       // // Create and configure the table
+       // LdifUsersTable userViewerCmp = new MyUserTableViewer(parent, SWT.MULTI |
+       // SWT.H_SCROLL | SWT.V_SCROLL,
+       // userAdminWrapper.getUserAdmin());
+       //
+       // userViewerCmp.setColumnDefinitions(columnDefs);
+       // userViewerCmp.populate(true, false);
+       // userViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+       //
+       // // Controllers
+       // TableViewer userViewer = userViewerCmp.getTableViewer();
+       // userViewer.addDoubleClickListener(new
+       // UserTableDefaultDClickListener(partService));
+       // int operations = DND.DROP_COPY | DND.DROP_MOVE;
+       // Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
+       // userViewer.addDropSupport(operations, tt,
+       // new GroupDropListener(userAdminWrapper, userViewerCmp, (Group)
+       // getDisplayedUser()));
+       //
+       // // userViewerCmp.refresh();
+       // return userViewerCmp;
+       // }
+
        // Local viewers
        private class MyUserTableViewer extends LdifUsersTable {
                private static final long serialVersionUID = 8467999509931900367L;
@@ -332,28 +371,32 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames {
                }
        }
 
-       private void addRemoveAbitily(Composite parent, TableViewer userViewer, Group group) {
-               // Section section = sectionPart.getSection();
-               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
-               ToolBar toolbar = toolBarManager.createControl(parent);
-               final Cursor handCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
-               toolbar.setCursor(handCursor);
-               toolbar.addDisposeListener(new DisposeListener() {
-                       private static final long serialVersionUID = 3882131405820522925L;
-
-                       public void widgetDisposed(DisposeEvent e) {
-                               if ((handCursor != null) && (handCursor.isDisposed() == false)) {
-                                       handCursor.dispose();
-                               }
-                       }
-               });
-
-               Action action = new RemoveMembershipAction(userViewer, group, "Remove selected items from this group",
-                               SecurityAdminImages.ICON_REMOVE_DESC);
-               toolBarManager.add(action);
-               toolBarManager.update(true);
-               // section.setTextClient(toolbar);
-       }
+       // private void addRemoveAbility(ToolBarManager toolBarManager, TableViewer
+       // userViewer, Group group) {
+       // // Section section = sectionPart.getSection();
+       // // ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+       // // ToolBar toolbar = toolBarManager.createControl(parent);
+       // // ToolBar toolbar = toolBarManager.getControl();
+       // // final Cursor handCursor = new Cursor(toolbar.getDisplay(),
+       // SWT.CURSOR_HAND);
+       // // toolbar.setCursor(handCursor);
+       // // toolbar.addDisposeListener(new DisposeListener() {
+       // // private static final long serialVersionUID = 3882131405820522925L;
+       // //
+       // // public void widgetDisposed(DisposeEvent e) {
+       // // if ((handCursor != null) && (handCursor.isDisposed() == false)) {
+       // // handCursor.dispose();
+       // // }
+       // // }
+       // // });
+       //
+       // Action action = new RemoveMembershipAction(userViewer, group, "Remove
+       // selected items from this group",
+       // SecurityAdminImages.ICON_REMOVE_DESC);
+       // toolBarManager.add(action);
+       // toolBarManager.update(true);
+       // // section.setTextClient(toolbar);
+       // }
 
        private class RemoveMembershipAction extends Action {
                private static final long serialVersionUID = -1337713097184522588L;
index 2007abf7dffff778c02ff0fd3a1fb580ada4c9b9..53937c9d773e8fe78a82348fa0c7a5f79e4ed179 100644 (file)
@@ -47,6 +47,10 @@ import org.argeo.naming.LdapObjs;
 import org.argeo.node.NodeConstants;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
@@ -84,7 +88,7 @@ public class GroupsView implements ArgeoNames {
        private UserAdminListener listener;
 
        @PostConstruct
-       public void createPartControl(Composite parent) {
+       public void createPartControl(Composite parent, ESelectionService selectionService) {
                parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
 
                // boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN);
@@ -113,6 +117,14 @@ public class GroupsView implements ArgeoNames {
                userViewer = groupTableViewerCmp.getTableViewer();
                userViewer.addDoubleClickListener(new UserTableDefaultDClickListener(partService));
                // getViewSite().setSelectionProvider(userViewer);
+               userViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+                       @Override
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+                               selectionService.setSelection(selection.toList());
+                       }
+               });
 
                // Really?
                groupTableViewerCmp.refresh();
index c7e5fe40e6046dceb39b8a651c4cbff08a52dd5a..4ac96464bba2298f9641f66ff170130912198538 100644 (file)
@@ -61,13 +61,10 @@ import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -118,12 +115,12 @@ public class UserEditor extends AbstractRoleEditor implements ArgeoNames {
 
        @Override
        protected void createUi(Composite body) {
-//             Composite body = new Composite(parent, SWT.BORDER);
+               // Composite body = new Composite(parent, SWT.BORDER);
                GridLayout mainLayout = new GridLayout();
                // mainLayout.marginRight = 10;
                body.setLayout(mainLayout);
-//             body.getParent().setLayout(new GridLayout());
-//             body.setLayoutData(CmsUtils.fillAll());
+               // body.getParent().setLayout(new GridLayout());
+               // body.setLayoutData(CmsUtils.fillAll());
                User user = getDisplayedUser();
                appendOverviewPart(body, user);
                // Remove to ability to force the password for his own user. The user
@@ -139,7 +136,7 @@ public class UserEditor extends AbstractRoleEditor implements ArgeoNames {
                // GridData gd = EclipseUiUtils.fillWidth();
                // // gd.verticalAlignment = PRE_TITLE_INDENT;
                // section.setLayoutData(gd);
-               Composite body = new Composite(parent, SWT.BORDER);
+               Composite body = new Composite(parent, SWT.NONE);
                body.setLayoutData(EclipseUiUtils.fillWidth());
                // section.setClient(body);
                // body.setLayout(new GridLayout(6, false));
@@ -295,8 +292,8 @@ public class UserEditor extends AbstractRoleEditor implements ArgeoNames {
                // Section section = addSection(tk, parent, "Roles");
                // Composite body = (Composite) section.getClient();
                // Composite body= parent;
-               Composite body = new Composite(parent, SWT.NONE);
-               body.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               Composite body = new Composite(parent, SWT.BORDER);
+               body.setLayout(new GridLayout());
                body.setLayoutData(CmsUtils.fillAll());
 
                // boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN);
@@ -360,6 +357,14 @@ public class UserEditor extends AbstractRoleEditor implements ArgeoNames {
                };
                getManagedForm().addPart(part);
                // addRemoveAbitily(body, userViewer, user);
+               // userViewerCmp.refresh();
+               String tooltip = "Remove " + UserAdminUtils.getUserLocalId(user.getName()) + " from the below selected groups";
+               Action action = new RemoveMembershipAction(userViewer, user, tooltip, SecurityAdminImages.ICON_REMOVE_DESC);
+               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+               ToolBar toolBar = toolBarManager.createControl(body);
+               toolBar.setLayoutData(CmsUtils.fillWidth());
+               toolBarManager.add(action);
+               toolBarManager.update(true);
                return userViewerCmp;
        }
 
@@ -409,28 +414,31 @@ public class UserEditor extends AbstractRoleEditor implements ArgeoNames {
                }
        }
 
-       private void addRemoveAbitily(Composite parent, TableViewer userViewer, User user) {
-               // Section section = sectionPart.getSection();
-               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
-               ToolBar toolbar = toolBarManager.createControl(parent);
-               final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
-               toolbar.setCursor(handCursor);
-               toolbar.addDisposeListener(new DisposeListener() {
-                       private static final long serialVersionUID = 3882131405820522925L;
-
-                       public void widgetDisposed(DisposeEvent e) {
-                               if ((handCursor != null) && (handCursor.isDisposed() == false)) {
-                                       handCursor.dispose();
-                               }
-                       }
-               });
-
-               String tooltip = "Remove " + UserAdminUtils.getUserLocalId(user.getName()) + " from the below selected groups";
-               Action action = new RemoveMembershipAction(userViewer, user, tooltip, SecurityAdminImages.ICON_REMOVE_DESC);
-               toolBarManager.add(action);
-               toolBarManager.update(true);
-               // section.setTextClient(toolbar);
-       }
+       // private void addRemoveAbility(Composite parent, TableViewer userViewer, User
+       // user) {
+       // // Section section = sectionPart.getSection();
+       // ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+       // ToolBar toolbar = toolBarManager.createControl(parent);
+       // final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
+       // toolbar.setCursor(handCursor);
+       // toolbar.addDisposeListener(new DisposeListener() {
+       // private static final long serialVersionUID = 3882131405820522925L;
+       //
+       // public void widgetDisposed(DisposeEvent e) {
+       // if ((handCursor != null) && (handCursor.isDisposed() == false)) {
+       // handCursor.dispose();
+       // }
+       // }
+       // });
+       //
+       // String tooltip = "Remove " + UserAdminUtils.getUserLocalId(user.getName()) +
+       // " from the below selected groups";
+       // Action action = new RemoveMembershipAction(userViewer, user, tooltip,
+       // SecurityAdminImages.ICON_REMOVE_DESC);
+       // toolBarManager.add(action);
+       // toolBarManager.update(true);
+       // // section.setTextClient(toolbar);
+       // }
 
        private class RemoveMembershipAction extends Action {
                private static final long serialVersionUID = -1337713097184522588L;
index 6acaa0baeee526c9b27132185b3d916d9f16668b..a9a4ede0af17e6a3a9af3106348c7e9c06abc1e7 100644 (file)
@@ -1,10 +1,8 @@
 package org.argeo.cms.e4.users;
 
-import org.argeo.cms.CmsException;
+import org.argeo.cms.e4.CmsE4Utils;
 import org.argeo.naming.LdapAttrs;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
-import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -28,30 +26,8 @@ public class UserTableDefaultDClickListener implements IDoubleClickListener {
                Object obj = ((IStructuredSelection) evt.getSelection()).getFirstElement();
                User user = (User) obj;
 
-               String entityEditorId = getEditorId(user);
-               MPart part = partService.createPart(entityEditorId);
-               part.setLabel(user.toString());
-               part.getPersistedState().put(LdapAttrs.uid.name(), user.getName());
-
-               // the provided part is be shown
-               partService.showPart(part, PartState.ACTIVATE);
-
-               // IWorkbenchWindow iww = WorkbenchUiPlugin.getDefault().getWorkbench()
-               // .getActiveWorkbenchWindow();
-               // IWorkbenchPage iwp = iww.getActivePage();
-               // UserEditorInput uei = new UserEditorInput(user.getName());
-               // FIXME open editor
-
-               try {
-                       // Works around the fact that dynamic setting of the editor icon
-                       // causes NPE after a login/logout on RAP
-                       // if (user instanceof Group)
-                       // iwp.openEditor(uei, UserEditor.GROUP_EDITOR_ID);
-                       // else
-                       // iwp.openEditor(uei, UserEditor.USER_EDITOR_ID);
-               } catch (Exception pie) {
-                       throw new CmsException("Unable to open UserEditor for " + user, pie);
-               }
+               String editorId = getEditorId(user);
+               CmsE4Utils.openEditor(partService, editorId, LdapAttrs.uid.name(), user.getName());
        }
 
        protected String getEditorId(User user) {
index 7562421cc7d2c1d5794b93836993595d0acc852f..fb57a62010266a8936329a08790bfbf7ec780188 100644 (file)
@@ -38,6 +38,10 @@ import org.argeo.naming.LdapObjs;
 import org.argeo.node.NodeConstants;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
@@ -70,7 +74,7 @@ public class UsersView implements ArgeoNames {
        private UserAdminListener listener;
 
        @PostConstruct
-       public void createPartControl(Composite parent) {
+       public void createPartControl(Composite parent, ESelectionService selectionService) {
 
                parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
                // Define the displayed columns
@@ -90,6 +94,14 @@ public class UsersView implements ArgeoNames {
                // Links
                userViewer = userTableViewerCmp.getTableViewer();
                userViewer.addDoubleClickListener(new UserTableDefaultDClickListener(partService));
+               userViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+                       @Override
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+                               selectionService.setSelection(selection.toList());
+                       }
+               });
                // getViewSite().setSelectionProvider(userViewer);
 
                // Really?
index 95a411635a8a5edcafad5dc7f7795c72e3b3ce76..561468dc62d0bd65db8fe13cda2fa4a6fe31f5bc 100644 (file)
  */
 package org.argeo.cms.e4.users.handlers;
 
-import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
+import org.argeo.cms.e4.users.GroupsView;
 import org.argeo.cms.e4.users.UserAdminWrapper;
 import org.argeo.cms.util.UserAdminUtils;
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Display;
 import org.osgi.service.useradmin.Group;
 import org.osgi.service.useradmin.UserAdmin;
@@ -35,63 +36,75 @@ import org.osgi.service.useradmin.UserAdminEvent;
 
 /** Delete the selected groups */
 public class DeleteGroups {
-//     public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".deleteGroups";
+       // public final static String ID = WorkbenchUiPlugin.PLUGIN_ID +
+       // ".deleteGroups";
 
        /* DEPENDENCY INJECTION */
        @Inject
        private UserAdminWrapper userAdminWrapper;
-       
+
        @Inject
        ESelectionService selectionService;
 
        @SuppressWarnings("unchecked")
        @Execute
-       public Object execute() {
-               ISelection selection = null;// HandlerUtil.getCurrentSelection(event);
-               if (selection.isEmpty())
-                       return null;
+       public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, ESelectionService selectionService) {
+               // ISelection selection = null;// HandlerUtil.getCurrentSelection(event);
+               // if (selection.isEmpty())
+               // return null;
+               //
+               // List<Group> groups = new ArrayList<Group>();
+               // Iterator<Group> it = ((IStructuredSelection) selection).iterator();
+
+               List<Group> selection = (List<Group>) selectionService.getSelection();
+               if (selection == null)
+                       return;
 
-               List<Group> groups = new ArrayList<Group>();
-               Iterator<Group> it = ((IStructuredSelection) selection).iterator();
                StringBuilder builder = new StringBuilder();
-               while (it.hasNext()) {
-                       Group currGroup = it.next();
+               for (Group group : selection) {
+                       Group currGroup = group;
                        String groupName = UserAdminUtils.getUserLocalId(currGroup.getName());
                        // TODO add checks
                        builder.append(groupName).append("; ");
-                       groups.add(currGroup);
+                       // groups.add(currGroup);
                }
 
                if (!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Delete Groups", "Are you sure that you "
                                + "want to delete these groups?\n" + builder.substring(0, builder.length() - 2)))
-                       return null;
+                       return;
 
                userAdminWrapper.beginTransactionIfNeeded();
                UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
-//             IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
-               for (Group group : groups) {
+               // IWorkbenchPage iwp =
+               // HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
+               for (Group group : selection) {
                        String groupName = group.getName();
                        // TODO find a way to close the editor cleanly if opened. Cannot be
                        // done through the UserAdminListeners, it causes a
                        // java.util.ConcurrentModificationException because disposing the
                        // editor unregisters and disposes the listener
-//                     IEditorPart part = iwp.findEditor(new UserEditorInput(groupName));
-//                     if (part != null)
-//                             iwp.closeEditor(part, false);
+                       // IEditorPart part = iwp.findEditor(new UserEditorInput(groupName));
+                       // if (part != null)
+                       // iwp.closeEditor(part, false);
                        userAdmin.removeRole(groupName);
                }
                userAdminWrapper.commitOrNotifyTransactionStateChange();
 
                // Update the view
-               for (Group group : groups) {
+               for (Group group : selection) {
                        userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_REMOVED, group));
                }
 
-               return null;
+               // return null;
        }
 
-       /* DEPENDENCY INJECTION */
-       public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
-               this.userAdminWrapper = userAdminWrapper;
+       @CanExecute
+       public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) MPart part, ESelectionService selectionService) {
+               return part.getObject() instanceof GroupsView && selectionService.getSelection() != null;
        }
+
+       /* DEPENDENCY INJECTION */
+       // public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+       // this.userAdminWrapper = userAdminWrapper;
+       // }
 }
index 4a9417c9ef99f7bc4750aa35f7dc67dfa335f54b..b70312bc8abc590dbe8d770bd1267cc79bfe1ea3 100644 (file)
  */
 package org.argeo.cms.e4.users.handlers;
 
-import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.argeo.cms.e4.users.UserAdminWrapper;
+import org.argeo.cms.e4.users.UsersView;
 import org.argeo.cms.util.UserAdminUtils;
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Display;
 import org.osgi.service.useradmin.User;
 import org.osgi.service.useradmin.UserAdmin;
@@ -42,37 +44,41 @@ public class DeleteUsers {
 
        @SuppressWarnings("unchecked")
        @Execute
-       public Object execute() {
-               ISelection selection = null;// HandlerUtil.getCurrentSelection(event);
-               if (selection.isEmpty())
-                       return null;
+       public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, ESelectionService selectionService) {
+               // ISelection selection = null;// HandlerUtil.getCurrentSelection(event);
+               // if (selection.isEmpty())
+               // return null;
+               List<User> selection = (List<User>) selectionService.getSelection();
+               if (selection == null)
+                       return;
 
-               Iterator<User> it = ((IStructuredSelection) selection).iterator();
-               List<User> users = new ArrayList<User>();
+//             Iterator<User> it = ((IStructuredSelection) selection).iterator();
+//             List<User> users = new ArrayList<User>();
                StringBuilder builder = new StringBuilder();
 
-               while (it.hasNext()) {
-                       User currUser = it.next();
+               for(User user:selection) {
+                       User currUser = user;
+//                     User currUser = it.next();
                        String userName = UserAdminUtils.getUserLocalId(currUser.getName());
                        if (UserAdminUtils.isCurrentUser(currUser)) {
                                MessageDialog.openError(Display.getCurrent().getActiveShell(), "Deletion forbidden",
                                                "You cannot delete your own user this way.");
-                               return null;
+                               return;
                        }
                        builder.append(userName).append("; ");
-                       users.add(currUser);
+//                     users.add(currUser);
                }
 
                if (!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Delete Users",
                                "Are you sure that you want to delete these users?\n" + builder.substring(0, builder.length() - 2)))
-                       return null;
+                       return;
 
                userAdminWrapper.beginTransactionIfNeeded();
                UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
                // IWorkbenchPage iwp =
                // HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
 
-               for (User user : users) {
+               for (User user : selection) {
                        String userName = user.getName();
                        // TODO find a way to close the editor cleanly if opened. Cannot be
                        // done through the UserAdminListeners, it causes a
@@ -85,14 +91,13 @@ public class DeleteUsers {
                }
                userAdminWrapper.commitOrNotifyTransactionStateChange();
 
-               for (User user : users) {
+               for (User user : selection) {
                        userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_REMOVED, user));
                }
-               return null;
        }
 
-       /* DEPENDENCY INJECTION */
-       public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
-               this.userAdminWrapper = userAdminWrapper;
+       @CanExecute
+       public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) MPart part, ESelectionService selectionService) {
+               return part.getObject() instanceof UsersView && selectionService.getSelection() != null;
        }
 }
index 66d1cd761c83be3b2f86b44c15b308778bff3d82..676a39dcfa1f55439af9dbffc29dd6a3c0710498 100644 (file)
Binary files a/org.argeo.cms.ui.theme/icons/delete.png and b/org.argeo.cms.ui.theme/icons/delete.png differ