X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fparts%2FGroupMainPage.java;h=fe56679db3e6c2b70982e8ad406f49393c98b444;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=1e6cd4f10564f0cb61fc1bba72b5fcf39967cc9c;hpb=935a76bdd458e4fb8502783946cb910324388da8;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java index 1e6cd4f10..fe56679db 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java @@ -19,13 +19,16 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import javax.transaction.UserTransaction; + +import org.argeo.cms.CmsException; +import org.argeo.cms.util.useradmin.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; import org.argeo.jcr.ArgeoNames; import org.argeo.osgi.useradmin.LdifName; import org.argeo.security.ui.admin.SecurityAdminImages; -import org.argeo.security.ui.admin.internal.UiAdminUtils; import org.argeo.security.ui.admin.internal.UserAdminWrapper; import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener; import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener; @@ -101,18 +104,17 @@ public class GroupMainPage extends FormPage implements ArgeoNames { } /** Creates the general section */ - protected void appendOverviewPart(Composite parent, final Group group) { + protected void appendOverviewPart(final Composite parent, final Group group) { FormToolkit tk = getManagedForm().getToolkit(); Composite body = addSection(tk, parent, "Main information"); GridLayout layout = new GridLayout(2, false); body.setLayout(layout); - final Text dnTxt = createLT(body, "DN", - UiAdminUtils.getProperty(group, LdifName.dn.name())); + final Text dnTxt = createLT(body, "DN", group.getName()); dnTxt.setEnabled(false); final Text cnTxt = createLT(body, "Common Name", - UiAdminUtils.getProperty(group, LdifName.cn.name())); + UserAdminUtils.getProperty(group, LdifName.cn.name())); cnTxt.setEnabled(false); Label descLbl = new Label(body, SWT.LEAD); @@ -132,7 +134,8 @@ public class GroupMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new MainInfoListener(this); + listener = editor.new MainInfoListener(parent.getDisplay(), + this); userAdminWrapper.addListener(listener); } @@ -156,9 +159,9 @@ public class GroupMainPage extends FormPage implements ArgeoNames { public void refresh() { refreshFormTitle(group); dnTxt.setText(group.getName()); - cnTxt.setText(UiAdminUtils.getProperty(group, + cnTxt.setText(UserAdminUtils.getProperty(group, LdifName.cn.name())); - descTxt.setText(UiAdminUtils.getProperty(group, + descTxt.setText(UserAdminUtils.getProperty(group, LdifName.description.name())); super.refresh(); } @@ -176,14 +179,12 @@ public class GroupMainPage extends FormPage implements ArgeoNames { Section section = tk.createSection(parent, Section.TITLE_BAR); section.setLayoutData(EclipseUiUtils.fillAll()); - // Composite body = tk.createComposite(section, SWT.NONE); Composite body = new Composite(section, SWT.NO_FOCUS); section.setClient(body); body.setLayoutData(EclipseUiUtils.fillAll()); LdifUsersTable userTableViewerCmp = createMemberPart(body, group); - // create form part (controller) SectionPart part = new GroupMembersPart(section, userTableViewerCmp, group); getManagedForm().addPart(part); @@ -192,6 +193,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { public LdifUsersTable createMemberPart(Composite parent, Group group) { parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); + // Define the displayed columns List columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); @@ -222,7 +224,6 @@ public class GroupMainPage extends FormPage implements ArgeoNames { } // Local viewers - private class MyUserTableViewer extends LdifUsersTable { private static final long serialVersionUID = 8467999509931900367L; @@ -297,11 +298,8 @@ public class GroupMainPage extends FormPage implements ArgeoNames { @SuppressWarnings("unchecked") Iterator it = ((IStructuredSelection) selection).iterator(); List users = new ArrayList(); - // StringBuilder builder = new StringBuilder(); while (it.hasNext()) { User currUser = it.next(); - // String groupName = UiAdminUtils.getUsername(currGroup); - // builder.append(groupName).append("; "); users.add(currUser); } @@ -309,6 +307,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { for (User user : users) { group.removeMember(user); } + userAdminWrapper.commitOrNotifyTransactionStateChange(); userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); } @@ -331,7 +330,8 @@ public class GroupMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new GroupChangeListener(GroupMembersPart.this); + listener = editor.new GroupChangeListener(userViewer.getDisplay(), + GroupMembersPart.this); userAdminWrapper.addListener(listener); } @@ -346,7 +346,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { refreshFormTitle(group); getSection().setText( "Members of group " - + UiAdminUtils.getProperty(group, + + UserAdminUtils.getProperty(group, LdifName.cn.name())); userViewer.refresh(); super.refresh(); @@ -383,21 +383,13 @@ public class GroupMainPage extends FormPage implements ArgeoNames { @Override public void drop(DropTargetEvent event) { - // TODO Is there an opportunity to perform ceck before? + // TODO Is there an opportunity to perform the check before? String newUserName = (String) event.data; UserAdmin myUserAdmin = userAdminWrapper.getUserAdmin(); Role role = myUserAdmin.getRole(newUserName); - if (role.getType() == Role.USER) { - // TODO check if the group is already member of this group - userAdminWrapper.beginTransactionIfNeeded(); - User user = (User) role; - myGroup.addMember(user); - userAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_CHANGED, myGroup)); - } else if (role.getType() == Role.GROUP) { + if (role.getType() == Role.GROUP) { Group newGroup = (Group) role; - Shell shell = getViewer().getControl().getShell(); // Sanity checks if (myGroup == newGroup) { // Equality @@ -424,10 +416,24 @@ public class GroupMainPage extends FormPage implements ArgeoNames { + ", this membership already exists"); return; } - userAdminWrapper.beginTransactionIfNeeded(); - // TODO implement the dirty state myGroup.addMember(newGroup); + userAdminWrapper.commitOrNotifyTransactionStateChange(); + 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(); + 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); + } userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, myGroup)); } @@ -444,7 +450,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { // LOCAL HELPERS private void refreshFormTitle(Group group) { getManagedForm().getForm().setText( - UiAdminUtils.getProperty(group, LdifName.cn.name())); + UserAdminUtils.getProperty(group, LdifName.cn.name())); } private Composite addSection(FormToolkit tk, Composite parent, String title) {