X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Fusers%2FGroupEditor.java;h=a011c5f62c19c45fcdeca8ce4644ed732fe539f6;hb=633a8acd189cc22f06944d278879601189be1bc8;hp=27af13684d0ba25243acada8d9a75cb10425759a;hpb=d6390257a328199a2a4a677b33e79b6535175169;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupEditor.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupEditor.java index 27af13684..a011c5f62 100644 --- a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupEditor.java +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/GroupEditor.java @@ -1,54 +1,39 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.cms.e4.users; -import static org.argeo.cms.util.UserAdminUtils.setProperty; -import static org.argeo.naming.LdapAttrs.businessCategory; -import static org.argeo.naming.LdapAttrs.description; -import static org.argeo.node.NodeInstance.WORKGROUP; +import static org.argeo.api.cms.CmsContext.WORKGROUP; +import static org.argeo.cms.auth.UserAdminUtils.setProperty; +import static org.argeo.util.naming.LdapAttrs.businessCategory; +import static org.argeo.util.naming.LdapAttrs.description; 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; import javax.jcr.RepositoryException; import javax.jcr.Session; -import javax.naming.InvalidNameException; -import javax.naming.ldap.LdapName; -import javax.transaction.UserTransaction; -import org.argeo.cms.ArgeoNames; -import org.argeo.cms.CmsException; +import org.argeo.api.cms.CmsConstants; +import org.argeo.api.cms.CmsContext; +import org.argeo.cms.auth.UserAdminUtils; import org.argeo.cms.e4.users.providers.CommonNameLP; import org.argeo.cms.e4.users.providers.MailLP; import org.argeo.cms.e4.users.providers.RoleIconLP; import org.argeo.cms.e4.users.providers.UserFilter; +import org.argeo.cms.jcr.CmsJcrUtils; +import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.ui.eclipse.forms.AbstractFormPart; import org.argeo.cms.ui.eclipse.forms.IManagedForm; -import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; +import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; -import org.argeo.naming.LdapAttrs; -import org.argeo.node.NodeInstance; -import org.argeo.node.NodeUtils; +import org.argeo.osgi.transaction.WorkTransaction; +import org.argeo.util.naming.LdapAttrs; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; @@ -64,12 +49,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; @@ -93,7 +75,7 @@ import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; /** Display/edit main properties of a given group */ -public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { +public class GroupEditor extends AbstractRoleEditor { // final static String ID = "GroupEditor.mainPage"; @Inject @@ -103,9 +85,9 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { @Inject private Repository repository; @Inject - private NodeInstance nodeInstance; + private CmsContext nodeInstance; // private final UserAdminWrapper userAdminWrapper; - private Session session; + private Session groupsSession; // public GroupMainPage(FormEditor editor, UserAdminWrapper userAdminWrapper, // Repository repository, @@ -135,9 +117,9 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { @Override protected void createUi(Composite parent) { try { - session = repository.login(); + groupsSession = repository.login(CmsConstants.SRV_WORKSPACE); } catch (RepositoryException e) { - throw new CmsException("Cannot retrieve session", e); + throw new JcrException("Cannot retrieve session", e); } // ScrolledForm form = mf.getForm(); // Composite body = form.getBody(); @@ -150,22 +132,23 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { appendMembersPart(body, group); } - @Override + @PreDestroy public void dispose() { - JcrUtils.logoutQuietly(session); + JcrUtils.logoutQuietly(groupsSession); super.dispose(); } /** 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(CmsSwtUtils.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 @@ -212,7 +195,7 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { // dnTxt.setText(group.getName()); // cnTxt.setText(UserAdminUtils.getProperty(group, LdapAttrs.cn.name())); descTxt.setText(UserAdminUtils.getProperty(group, LdapAttrs.description.name())); - Node workgroupHome = NodeUtils.getGroupHome(session, cn); + Node workgroupHome = CmsJcrUtils.getGroupHome(groupsSession, cn); if (workgroupHome == null) markAsWorkgroupLk.setText("Mark as workgroup"); else @@ -231,23 +214,18 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { boolean confirmed = MessageDialog.openConfirm(parent.getShell(), "Mark as workgroup", "Are you sure you want to mark " + cn + " as being a workgroup? "); if (confirmed) { - Node workgroupHome = NodeUtils.getGroupHome(session, cn); + Node workgroupHome = CmsJcrUtils.getGroupHome(groupsSession, cn); if (workgroupHome != null) return; // already marked as workgroup, do nothing - else - try { - // improve transaction management - userAdminWrapper.beginTransactionIfNeeded(); - nodeInstance.createWorkgroup(new LdapName(group.getName())); - setProperty(group, businessCategory, WORKGROUP); - userAdminWrapper.commitOrNotifyTransactionStateChange(); - userAdminWrapper - .notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); - part.refresh(); - } catch (InvalidNameException e1) { - throw new CmsException("Cannot create Workgroup for " + group.toString(), e1); - } - + else { + // improve transaction management + userAdminWrapper.beginTransactionIfNeeded(); + nodeInstance.createWorkgroup(group.getName()); + setProperty(group, businessCategory, WORKGROUP); + userAdminWrapper.commitOrNotifyTransactionStateChange(); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); + part.refresh(); + } } } }); @@ -263,20 +241,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 columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); @@ -286,7 +255,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 +270,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(CmsSwtUtils.fillWidth()); + + toolBarManager.add(action); + toolBarManager.update(true); + } + // private LdifUsersTable createMemberPart(Composite parent, Group group) { + // + // // Define the displayed columns + // List columnDefs = new ArrayList(); + // 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 +349,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; @@ -486,14 +507,15 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, myGroup)); } else if (role.getType() == Role.USER) { // TODO check if the group is already member of this group - UserTransaction transaction = userAdminWrapper.beginTransactionIfNeeded(); + WorkTransaction transaction = userAdminWrapper.beginTransactionIfNeeded(); User user = (User) role; myGroup.addMember(user); if (UserAdminWrapper.COMMIT_ON_SAVE) try { transaction.commit(); } catch (Exception e) { - throw new CmsException("Cannot commit transaction " + "after user group membership update", e); + throw new IllegalStateException( + "Cannot commit transaction " + "after user group membership update", e); } userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, myGroup)); } @@ -525,7 +547,7 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { // lbl.setFont(EclipseUiUtils.getBoldFont(parent)); // Text text = toolkit.createText(parent, value, SWT.BORDER); // text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - // CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT); + // CmsUiUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT); // return text; // } // @@ -537,7 +559,7 @@ public class GroupEditor extends AbstractRoleEditor implements ArgeoNames { // Text text = toolkit.createText(parent, value, SWT.NONE); // text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); // text.setEditable(false); - // CmsUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT); + // CmsUiUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT); // return text; // }