import java.util.List;
import org.argeo.ArgeoException;
+import org.argeo.cms.auth.AuthConstants;
+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.UserAdminUtils;
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;
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;
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");
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()) {
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
- listener = editor.new MainInfoListener(this);
+ listener = editor.new MainInfoListener(parent.getDisplay(),
+ this);
userAdminWrapper.addListener(listener);
}
super.dispose();
}
+ @SuppressWarnings("unchecked")
public void commit(boolean onSave) {
- // TODO Sanity checks
- editor.setProperty(UserAdminConstants.KEY_FIRSTNAME,
+ // TODO Sanity checks (mail validity...)
+ user.getProperties().put(LdifName.givenName.name(),
firstName.getText());
- editor.setProperty(UserAdminConstants.KEY_LASTNAME,
- lastName.getText());
- editor.setProperty(UserAdminConstants.KEY_CN,
+ user.getProperties()
+ .put(LdifName.sn.name(), lastName.getText());
+ user.getProperties().put(LdifName.cn.name(),
commonName.getText());
- // TODO check mail validity
- editor.setProperty(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();
}
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<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
150));
- columnDefs.add(new ColumnDefinition(new UserNameLP(),
- "Distinguished Name", 300));
+ columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name",
+ 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);
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
- listener = editor.new GroupChangeListener(this);
+ listener = editor.new GroupChangeListener(parent.getDisplay(),
+ this);
userAdminWrapper.addListener(listener);
}
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<User> listFilteredElements(String filter) {
List<User> users = (List<User>) editor.getFlatGroups(null);
+ List<User> filteredUsers = new ArrayList<User>();
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;
}
}
}
});
- Action action = new RemoveMembershipAction(userViewer, user,
- "Remove selected groups", SecurityAdminImages.ICON_REMOVE_DESC);
+ String tooltip = "Remove " + UserAdminUtils.getUsername(user)
+ + " 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);
// StringBuilder builder = new StringBuilder();
while (it.hasNext()) {
Group currGroup = it.next();
- // String groupName = UiAdminUtils.getUsername(currGroup);
+ // String groupName = UserAdminUtils.getUsername(currGroup);
// builder.append(groupName).append("; ");
groups.add(currGroup);
}
// 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 */