*/
package org.argeo.cms.ui.workbench.internal.useradmin.parts;
+import static org.argeo.cms.util.UserAdminUtils.getProperty;
+import static org.argeo.naming.LdapAttrs.cn;
+import static org.argeo.naming.LdapAttrs.givenName;
+import static org.argeo.naming.LdapAttrs.mail;
+import static org.argeo.naming.LdapAttrs.sn;
+import static org.argeo.naming.LdapAttrs.uid;
+
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.argeo.cms.CmsException;
-import org.argeo.cms.auth.AuthConstants;
+import org.argeo.cms.ArgeoNames;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.workbench.CmsWorkbenchStyles;
import org.argeo.cms.ui.workbench.internal.useradmin.SecurityAdminImages;
import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper;
import org.argeo.cms.ui.workbench.internal.useradmin.parts.UserEditor.GroupChangeListener;
import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP;
import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP;
import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserFilter;
-import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP;
import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener;
-import org.argeo.cms.util.useradmin.UserAdminUtils;
+import org.argeo.cms.util.CmsUtils;
+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.node.ArgeoNames;
-import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.naming.LdapAttrs;
+import org.argeo.node.NodeConstants;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.forms.AbstractFormPart;
appendOverviewPart(body, user);
// Remove to ability to force the password for his own user. The user
// must then use the change pwd feature
- if (!UserAdminUtils.isCurrentUser(user))
- appendPasswordPart(body, user);
appendMemberOfPart(body, user);
}
private void appendOverviewPart(final Composite parent, final User user) {
FormToolkit tk = getManagedForm().getToolkit();
- Section section = addSection(tk, parent, "Main information");
- Composite body = (Composite) section.getClient();
+ Section section = tk.createSection(parent, SWT.NO_FOCUS);
+ GridData gd = EclipseUiUtils.fillWidth();
+ // gd.verticalAlignment = PRE_TITLE_INDENT;
+ section.setLayoutData(gd);
+ Composite body = tk.createComposite(section, SWT.WRAP);
+ body.setLayoutData(EclipseUiUtils.fillAll());
+ section.setClient(body);
+ // body.setLayout(new GridLayout(6, false));
body.setLayout(new GridLayout(2, false));
- final Text distinguishedName = createLT(tk, body, "User Name",
- UserAdminUtils.getProperty(user, LdifName.uid.name()));
- distinguishedName.setEnabled(false);
-
- final Text commonName = createLT(tk, body, "Common Name",
- UserAdminUtils.getProperty(user, LdifName.cn.name()));
- commonName.setEnabled(false);
-
- final Text firstName = createLT(tk, body, "First name",
- UserAdminUtils.getProperty(user, LdifName.givenName.name()));
+ Text commonName = createReadOnlyLT(tk, body, "Name", getProperty(user, cn));
+ Text distinguishedName = createReadOnlyLT(tk, body, "Login", getProperty(user, uid));
+ Text firstName = createLT(tk, body, "First name", getProperty(user, givenName));
+ Text lastName = createLT(tk, body, "Last name", getProperty(user, sn));
+ Text email = createLT(tk, body, "Email", getProperty(user, mail));
- final Text lastName = createLT(tk, body, "Last name",
- UserAdminUtils.getProperty(user, LdifName.sn.name()));
-
- final Text email = createLT(tk, body, "Email",
- UserAdminUtils.getProperty(user, LdifName.mail.name()));
+ Link resetPwdLk = new Link(body, SWT.NONE);
+ if (!UserAdminUtils.isCurrentUser(user)) {
+ resetPwdLk.setText("<a>Reset password</a>");
+ }
+ resetPwdLk.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
// create form part (controller)
AbstractFormPart part = new SectionPart((Section) body.getParent()) {
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
- listener = editor.new MainInfoListener(parent.getDisplay(),
- this);
+ listener = editor.new MainInfoListener(parent.getDisplay(), this);
userAdminWrapper.addListener(listener);
}
@SuppressWarnings("unchecked")
public void commit(boolean onSave) {
// TODO Sanity checks (mail validity...)
- user.getProperties().put(LdifName.givenName.name(),
- firstName.getText());
- user.getProperties()
- .put(LdifName.sn.name(), lastName.getText());
- user.getProperties().put(LdifName.cn.name(),
- commonName.getText());
- user.getProperties().put(LdifName.mail.name(), email.getText());
+ user.getProperties().put(LdapAttrs.givenName.name(), firstName.getText());
+ user.getProperties().put(LdapAttrs.sn.name(), lastName.getText());
+ user.getProperties().put(LdapAttrs.cn.name(), commonName.getText());
+ user.getProperties().put(LdapAttrs.mail.name(), email.getText());
super.commit(onSave);
}
@Override
public void refresh() {
- 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()));
+ distinguishedName.setText(UserAdminUtils.getProperty(user, LdapAttrs.uid.name()));
+ commonName.setText(UserAdminUtils.getProperty(user, LdapAttrs.cn.name()));
+ firstName.setText(UserAdminUtils.getProperty(user, LdapAttrs.givenName.name()));
+ lastName.setText(UserAdminUtils.getProperty(user, LdapAttrs.sn.name()));
+ email.setText(UserAdminUtils.getProperty(user, LdapAttrs.mail.name()));
refreshFormTitle(user);
super.refresh();
}
String cn = first.trim() + " " + last.trim() + " ";
cn = cn.trim();
commonName.setText(cn);
- getManagedForm().getForm().setText(cn);
+ // getManagedForm().getForm().setText(cn);
editor.updateEditorTitle(cn);
}
};
firstName.addModifyListener(defaultListener);
lastName.addModifyListener(defaultListener);
email.addModifyListener(defaultListener);
+
+ if (!UserAdminUtils.isCurrentUser(user))
+ resetPwdLk.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 5881800534589073787L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ new ChangePasswordDialog(tk, user, "Reset password").open();
+ }
+ });
+
getManagedForm().addPart(part);
}
- /** Creates the password section */
- private void appendPasswordPart(Composite parent, final User user) {
- FormToolkit tk = getManagedForm().getToolkit();
- Section section = addSection(tk, parent, "Password");
- Composite body = (Composite) section.getClient();
- body.setLayout(new GridLayout(2, false));
+ private class ChangePasswordDialog extends TrayDialog {
+ private static final long serialVersionUID = 2843538207460082349L;
- // add widgets (view)
- final Text password1 = createLP(tk, body, "New password", "");
- final Text password2 = createLP(tk, body, "Repeat password", "");
+ private User user;
+ private Text password1;
+ private Text password2;
+ private String title;
+ private FormToolkit tk;
- // create form part (controller)
- AbstractFormPart part = new SectionPart((Section) body.getParent()) {
- @SuppressWarnings("unchecked")
- public void commit(boolean onSave) {
- if (!password1.getText().equals("")
- || !password2.getText().equals("")) {
- if (password1.getText().equals(password2.getText())) {
- char[] newPassword = password1.getText().toCharArray();
- // userAdminWrapper.beginTransactionIfNeeded();
- user.getCredentials().put(null, newPassword);
- password1.setText("");
- password2.setText("");
- super.commit(onSave);
- } else {
- password1.setText("");
- password2.setText("");
- throw new CmsException("Passwords are not equals");
- }
- }
+ public ChangePasswordDialog(FormToolkit tk, User user, String title) {
+ super(Display.getDefault().getActiveShell());
+ this.tk = tk;
+ this.user = user;
+ this.title = title;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite dialogarea = (Composite) super.createDialogArea(parent);
+ dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ Composite body = new Composite(dialogarea, SWT.NO_FOCUS);
+ body.setLayoutData(EclipseUiUtils.fillAll());
+ GridLayout layout = new GridLayout(2, false);
+ body.setLayout(layout);
+
+ password1 = createLP(tk, body, "New password", "");
+ password2 = createLP(tk, body, "Repeat password", "");
+ parent.pack();
+ return body;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void okPressed() {
+ String msg = null;
+
+ if (password1.getText().equals(""))
+ msg = "Password cannot be empty";
+ else if (password1.getText().equals(password2.getText())) {
+ char[] newPassword = password1.getText().toCharArray();
+ // userAdminWrapper.beginTransactionIfNeeded();
+ userAdminWrapper.beginTransactionIfNeeded();
+ user.getCredentials().put(null, newPassword);
+ userAdminWrapper.commitOrNotifyTransactionStateChange();
+ super.okPressed();
+ } else {
+ msg = "Passwords are not equals";
}
- };
- ModifyListener defaultListener = editor.new FormPartML(part);
- password1.addModifyListener(defaultListener);
- password2.addModifyListener(defaultListener);
- getManagedForm().addPart(part);
+
+ if (EclipseUiUtils.notEmpty(msg))
+ MessageDialog.openError(getParentShell(), "Cannot reset pasword", msg);
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(title);
+ }
}
private LdifUsersTable appendMemberOfPart(final Composite parent, User user) {
Composite body = (Composite) section.getClient();
body.setLayout(EclipseUiUtils.noSpaceGridLayout());
- boolean isAdmin = UserAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN);
+ // boolean isAdmin = CurrentUser.isInRole(NodeConstants.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 DomainNameLP(), "Domain Name",
- 200));
+ columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Name", 150));
+ columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 100));
// Only show technical DN to administrators
- if (isAdmin)
- columnDefs.add(new ColumnDefinition(new UserNameLP(),
- "Distinguished Name", 120));
+ // if (isAdmin)
+ // columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name",
+ // 300));
// Create and configure the table
- final LdifUsersTable userViewerCmp = new MyUserTableViewer(body,
- SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user);
+ final LdifUsersTable userViewerCmp = new MyUserTableViewer(body, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user);
userViewerCmp.setColumnDefinitions(columnDefs);
- if (isAdmin)
- userViewerCmp.populateWithStaticFilters(false, false);
- else
- userViewerCmp.populate(true, false);
+ // if (isAdmin)
+ // userViewerCmp.populateWithStaticFilters(false, false);
+ // else
+ userViewerCmp.populate(true, false);
GridData gd = EclipseUiUtils.fillAll();
- gd.heightHint = 300;
+ gd.heightHint = 500;
userViewerCmp.setLayoutData(gd);
// Controllers
userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
int operations = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
- GroupDropListener dropL = new GroupDropListener(userAdminWrapper,
- userViewer, user);
+ GroupDropListener dropL = new GroupDropListener(userAdminWrapper, userViewer, user);
userViewer.addDropSupport(operations, tt, dropL);
SectionPart part = new SectionPart((Section) body.getParent()) {
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
- listener = editor.new GroupChangeListener(parent.getDisplay(),
- this);
+ listener = editor.new GroupChangeListener(parent.getDisplay(), this);
userAdminWrapper.addListener(listener);
}
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");
+ boolean showSysRole = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN);
+ showSystemRoleBtn.setSelection(showSysRole);
+ userFilter.setShowSystemRole(showSysRole);
showSystemRoleBtn.addSelectionListener(new SelectionAdapter() {
private static final long serialVersionUID = -7033424592697691676L;
@Override
public void widgetSelected(SelectionEvent e) {
- userFilter.setShowSystemRole(showSystemRoleBtn
- .getSelection());
+ userFilter.setShowSystemRole(showSystemRoleBtn.getSelection());
refresh();
}
});
}
}
- private void addRemoveAbitily(SectionPart sectionPart,
- TableViewer userViewer, User user) {
+ private void addRemoveAbitily(SectionPart sectionPart, TableViewer userViewer, User user) {
Section section = sectionPart.getSection();
ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
ToolBar toolbar = toolBarManager.createControl(section);
- final Cursor handCursor = new Cursor(section.getDisplay(),
- SWT.CURSOR_HAND);
+ final Cursor handCursor = new Cursor(section.getDisplay(), SWT.CURSOR_HAND);
toolbar.setCursor(handCursor);
toolbar.addDisposeListener(new DisposeListener() {
private static final long serialVersionUID = 3882131405820522925L;
}
});
- String tooltip = "Remove " + UserAdminUtils.getUsername(user)
- + " from the below selected groups";
- Action action = new RemoveMembershipAction(userViewer, user, tooltip,
- SecurityAdminImages.ICON_REMOVE_DESC);
+ String tooltip = "Remove " + UserAdminUtils.getUserLocalId(user.getName()) + " 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);
private final TableViewer userViewer;
private final User user;
- RemoveMembershipAction(TableViewer userViewer, User user, String name,
- ImageDescriptor img) {
+ RemoveMembershipAction(TableViewer userViewer, User user, String name, ImageDescriptor img) {
super(name, img);
this.userViewer = userViewer;
this.user = user;
}
userAdminWrapper.commitOrNotifyTransactionStateChange();
for (Group group : groups) {
- userAdminWrapper.notifyListeners(new UserAdminEvent(null,
- UserAdminEvent.ROLE_CHANGED, group));
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group));
}
}
}
private final UserAdminWrapper myUserAdminWrapper;
private final User myUser;
- public GroupDropListener(UserAdminWrapper userAdminWrapper,
- Viewer userViewer, User user) {
+ public GroupDropListener(UserAdminWrapper userAdminWrapper, Viewer userViewer, User user) {
super(userViewer);
this.myUserAdminWrapper = userAdminWrapper;
this.myUser = user;
}
@Override
- public boolean validateDrop(Object target, int operation,
- TransferData transferType) {
+ public boolean validateDrop(Object target, int operation, TransferData transferType) {
// Target is always OK in a list only view
// TODO check if not a string
boolean validDrop = true;
Group group = (Group) role;
group.addMember(myUser);
userAdminWrapper.commitOrNotifyTransactionStateChange();
- myUserAdminWrapper.notifyListeners(new UserAdminEvent(null,
- UserAdminEvent.ROLE_CHANGED, group));
+ myUserAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group));
}
super.drop(event);
}
// LOCAL HELPERS
private void refreshFormTitle(User group) {
- getManagedForm().getForm().setText(
- UserAdminUtils.getProperty(group, LdifName.cn.name()));
+ // getManagedForm().getForm().setText(UserAdminUtils.getProperty(group,
+ // LdapAttrs.cn.name()));
}
/** Appends a section with a title */
}
/** Creates label and multiline text. */
- Text createLMT(FormToolkit toolkit, Composite body, String label,
- String value) {
+ Text createLMT(FormToolkit toolkit, Composite body, String label, String value) {
Label lbl = toolkit.createLabel(body, label);
lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
Text text = toolkit.createText(body, value, SWT.BORDER | SWT.MULTI);
}
/** Creates label and password. */
- Text createLP(FormToolkit toolkit, Composite body, String label,
- String value) {
+ Text createLP(FormToolkit toolkit, Composite body, String label, String value) {
Label lbl = toolkit.createLabel(body, label);
- lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
Text text = toolkit.createText(body, value, SWT.BORDER | SWT.PASSWORD);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
return text;
}
/** Creates label and text. */
- Text createLT(FormToolkit toolkit, Composite body, String label,
- String value) {
- Label lbl = toolkit.createLabel(body, label);
- lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
- Text text = toolkit.createText(body, value, SWT.BORDER);
+ Text createLT(FormToolkit toolkit, Composite parent, String label, String value) {
+ Label lbl = toolkit.createLabel(parent, label);
+ lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
+ 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);
+ return text;
+ }
+
+ Text createReadOnlyLT(FormToolkit toolkit, Composite parent, String label, String value) {
+ Label lbl = toolkit.createLabel(parent, label);
+ lbl.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
+ lbl.setFont(EclipseUiUtils.getBoldFont(parent));
+ 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);
return text;
}
-}
\ No newline at end of file
+}