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;
}
/** 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);
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
- listener = editor.new MainInfoListener(this);
+ listener = editor.new MainInfoListener(parent.getDisplay(),
+ this);
userAdminWrapper.addListener(listener);
}
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();
}
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);
public LdifUsersTable createMemberPart(Composite parent, Group group) {
parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+
// Define the displayed columns
List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
}
// Local viewers
-
private class MyUserTableViewer extends LdifUsersTable {
private static final long serialVersionUID = 8467999509931900367L;
@SuppressWarnings("unchecked")
Iterator<User> it = ((IStructuredSelection) selection).iterator();
List<User> users = new ArrayList<User>();
- // StringBuilder builder = new StringBuilder();
while (it.hasNext()) {
User currUser = it.next();
- // String groupName = UiAdminUtils.getUsername(currGroup);
- // builder.append(groupName).append("; ");
users.add(currUser);
}
for (User user : users) {
group.removeMember(user);
}
+ userAdminWrapper.commitOrNotifyTransactionStateChange();
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_CHANGED, group));
}
@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);
}
refreshFormTitle(group);
getSection().setText(
"Members of group "
- + UiAdminUtils.getProperty(group,
+ + UserAdminUtils.getProperty(group,
LdifName.cn.name()));
userViewer.refresh();
super.refresh();
@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
+ ", 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));
}
// 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) {