X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fparts%2FUserMainPage.java;h=db6eb538fe059635393edfa3781e20bb4055c917;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=154be42f3a01568035c045fe5f997abceff1ca74;hpb=8fea21d044841079b2f490c00da5d0902d50c3eb;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java index 154be42f3..db6eb538f 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java @@ -19,20 +19,22 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.argeo.ArgeoException; +import org.argeo.cms.CmsException; +import org.argeo.cms.auth.AuthConstants; +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.ColumnDefinition; -import org.argeo.security.ui.admin.internal.UiAdminUtils; -import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.argeo.security.ui.admin.internal.UserAdminWrapper; -import org.argeo.security.ui.admin.internal.UserTableViewer; import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener; import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener; import org.argeo.security.ui.admin.internal.providers.CommonNameLP; import org.argeo.security.ui.admin.internal.providers.DomainNameLP; import org.argeo.security.ui.admin.internal.providers.RoleIconLP; +import org.argeo.security.ui.admin.internal.providers.UserFilter; import org.argeo.security.ui.admin.internal.providers.UserNameLP; import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener; import org.eclipse.jface.action.Action; @@ -53,9 +55,12 @@ 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; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; @@ -94,18 +99,19 @@ public class UserMainPage extends FormPage implements ArgeoNames { ScrolledForm form = mf.getForm(); Composite body = form.getBody(); GridLayout mainLayout = new GridLayout(); + // mainLayout.marginRight = 10; body.setLayout(mainLayout); User user = editor.getDisplayedUser(); appendOverviewPart(body, user); // Remove to ability to force the password for his own user. The user // must then use the change pwd feature - if (!UiAdminUtils.isCurrentUser(user)) + if (!UserAdminUtils.isCurrentUser(user)) appendPasswordPart(body, user); appendMemberOfPart(body, user); } /** Creates the general section */ - private void appendOverviewPart(Composite parent, final User user) { + private void appendOverviewPart(final Composite parent, final User user) { FormToolkit tk = getManagedForm().getToolkit(); Section section = addSection(tk, parent, "Main information"); @@ -113,22 +119,21 @@ public class UserMainPage extends FormPage implements ArgeoNames { body.setLayout(new GridLayout(2, false)); final Text distinguishedName = createLT(tk, body, "User Name", - UiAdminUtils.getProperty(user, UserAdminConstants.KEY_UID)); + UserAdminUtils.getProperty(user, LdifName.uid.name())); distinguishedName.setEnabled(false); final Text commonName = createLT(tk, body, "Common Name", - UiAdminUtils.getProperty(user, UserAdminConstants.KEY_CN)); + UserAdminUtils.getProperty(user, LdifName.cn.name())); commonName.setEnabled(false); final Text firstName = createLT(tk, body, "First name", - UiAdminUtils - .getProperty(user, UserAdminConstants.KEY_FIRSTNAME)); + UserAdminUtils.getProperty(user, LdifName.givenName.name())); final Text lastName = createLT(tk, body, "Last name", - UiAdminUtils.getProperty(user, UserAdminConstants.KEY_LASTNAME)); + UserAdminUtils.getProperty(user, LdifName.sn.name())); final Text email = createLT(tk, body, "Email", - UiAdminUtils.getProperty(user, UserAdminConstants.KEY_MAIL)); + UserAdminUtils.getProperty(user, LdifName.mail.name())); // create form part (controller) AbstractFormPart part = new SectionPart((Section) body.getParent()) { @@ -137,7 +142,8 @@ public class UserMainPage 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); } @@ -150,32 +156,28 @@ public class UserMainPage extends FormPage implements ArgeoNames { @SuppressWarnings("unchecked") public void commit(boolean onSave) { // TODO Sanity checks (mail validity...) - user.getProperties().put(UserAdminConstants.KEY_FIRSTNAME, + user.getProperties().put(LdifName.givenName.name(), firstName.getText()); - user.getProperties().put(UserAdminConstants.KEY_LASTNAME, - lastName.getText()); - user.getProperties().put(UserAdminConstants.KEY_CN, + user.getProperties() + .put(LdifName.sn.name(), lastName.getText()); + user.getProperties().put(LdifName.cn.name(), commonName.getText()); - user.getProperties().put(UserAdminConstants.KEY_MAIL, - email.getText()); - // Enable common name ? - // editor.setProperty(UserAdminConstants.KEY_CN, - // email.getText()); + user.getProperties().put(LdifName.mail.name(), email.getText()); super.commit(onSave); } @Override public void refresh() { - distinguishedName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_UID)); - commonName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_CN)); - firstName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_FIRSTNAME)); - lastName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_LASTNAME)); - email.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_MAIL)); + distinguishedName.setText(UserAdminUtils.getProperty(user, + LdifName.uid.name())); + commonName.setText(UserAdminUtils.getProperty(user, + LdifName.cn.name())); + firstName.setText(UserAdminUtils.getProperty(user, + LdifName.givenName.name())); + lastName.setText(UserAdminUtils.getProperty(user, + LdifName.sn.name())); + email.setText(UserAdminUtils.getProperty(user, + LdifName.mail.name())); refreshFormTitle(user); super.refresh(); } @@ -226,7 +228,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { || !password2.getText().equals("")) { if (password1.getText().equals(password2.getText())) { char[] newPassword = password1.getText().toCharArray(); - userAdminWrapper.beginTransactionIfNeeded(); + // userAdminWrapper.beginTransactionIfNeeded(); user.getCredentials().put(null, newPassword); password1.setText(""); password2.setText(""); @@ -234,7 +236,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } else { password1.setText(""); password2.setText(""); - throw new ArgeoException("Passwords are not equals"); + throw new CmsException("Passwords are not equals"); } } } @@ -245,29 +247,35 @@ public class UserMainPage extends FormPage implements ArgeoNames { getManagedForm().addPart(part); } - private UserTableViewer appendMemberOfPart(Composite parent, User user) { + private LdifUsersTable appendMemberOfPart(final Composite parent, User user) { FormToolkit tk = getManagedForm().getToolkit(); Section section = addSection(tk, parent, "Roles"); Composite body = (Composite) section.getClient(); body.setLayout(EclipseUiUtils.noSpaceGridLayout()); + boolean isAdmin = UserAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN); + // Displayed columns List columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name", - 120)); - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 300)); + 200)); + // Only show technical DN to administrators + if (isAdmin) + columnDefs.add(new ColumnDefinition(new UserNameLP(), + "Distinguished Name", 120)); // Create and configure the table - final UserTableViewer userViewerCmp = new MyUserTableViewer(body, - SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, - userAdminWrapper.getUserAdmin(), user); + final LdifUsersTable userViewerCmp = new MyUserTableViewer(body, + SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user); userViewerCmp.setColumnDefinitions(columnDefs); - userViewerCmp.populate(true, false); + if (isAdmin) + userViewerCmp.populateWithStaticFilters(false, false); + else + userViewerCmp.populate(true, false); GridData gd = EclipseUiUtils.fillAll(); gd.heightHint = 300; userViewerCmp.setLayoutData(gd); @@ -288,7 +296,8 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new GroupChangeListener(this); + listener = editor.new GroupChangeListener(parent.getDisplay(), + this); userAdminWrapper.addListener(listener); } @@ -313,23 +322,48 @@ public class UserMainPage extends FormPage implements ArgeoNames { return userViewerCmp; } - private class MyUserTableViewer extends UserTableViewer { - private static final long serialVersionUID = 8467999509931900367L; + private class MyUserTableViewer extends LdifUsersTable { + private static final long serialVersionUID = 2653790051461237329L; + + private Button showSystemRoleBtn; private final User user; + private final UserFilter userFilter; - public MyUserTableViewer(Composite parent, int style, - UserAdmin userAdmin, User user) { - super(parent, style, userAdmin, true); + public MyUserTableViewer(Composite parent, int style, User user) { + super(parent, style, true); this.user = user; + userFilter = new UserFilter(); + userFilter.setShowSystemRole(false); + } + + protected void populateStaticFilters(Composite staticFilterCmp) { + staticFilterCmp.setLayout(new GridLayout()); + showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK); + showSystemRoleBtn.setText("Show system roles"); + showSystemRoleBtn.addSelectionListener(new SelectionAdapter() { + private static final long serialVersionUID = -7033424592697691676L; + + @Override + public void widgetSelected(SelectionEvent e) { + userFilter.setShowSystemRole(showSystemRoleBtn + .getSelection()); + refresh(); + } + }); } @Override protected List listFilteredElements(String filter) { List users = (List) editor.getFlatGroups(null); + List filteredUsers = new ArrayList(); if (users.contains(user)) users.remove(user); - return users; + userFilter.setSearchText(filter); + for (User user : users) + if (userFilter.select(null, null, user)) + filteredUsers.add(user); + return filteredUsers; } } @@ -351,7 +385,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } }); - String tooltip = "Remove " + UiAdminUtils.getUsername(user) + String tooltip = "Remove " + UserAdminUtils.getUsername(user) + " from the below selected groups"; Action action = new RemoveMembershipAction(userViewer, user, tooltip, SecurityAdminImages.ICON_REMOVE_DESC); @@ -382,25 +416,17 @@ public class UserMainPage extends FormPage implements ArgeoNames { @SuppressWarnings("unchecked") Iterator it = ((IStructuredSelection) selection).iterator(); List groups = new ArrayList(); - // StringBuilder builder = new StringBuilder(); while (it.hasNext()) { Group currGroup = it.next(); - // String groupName = UiAdminUtils.getUsername(currGroup); - // builder.append(groupName).append("; "); groups.add(currGroup); } - // if (!MessageDialog.openQuestion( - // HandlerUtil.getActiveShell(event), - // "Re", - // "Are you sure that you want to delete these users?\n" - // + builder.substring(0, builder.length() - 2))) - // return null; - userAdminWrapper.beginTransactionIfNeeded(); for (Group group : groups) { group.removeMember(user); - // sectionPart.refresh(); + } + userAdminWrapper.commitOrNotifyTransactionStateChange(); + for (Group group : groups) { userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); } @@ -441,9 +467,11 @@ public class UserMainPage extends FormPage implements ArgeoNames { // TODO this check should be done before. if (role.getType() == Role.GROUP) { // TODO check if the user is already member of this group + myUserAdminWrapper.beginTransactionIfNeeded(); Group group = (Group) role; group.addMember(myUser); + userAdminWrapper.commitOrNotifyTransactionStateChange(); myUserAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); } @@ -460,7 +488,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { // LOCAL HELPERS private void refreshFormTitle(User group) { getManagedForm().getForm().setText( - UiAdminUtils.getProperty(group, UserAdminConstants.KEY_CN)); + UserAdminUtils.getProperty(group, LdifName.cn.name())); } /** Appends a section with a title */