*/
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.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.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.naming.LdapAttrs;
-import org.argeo.node.ArgeoNames;
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, LdapAttrs.uid.name()));
- distinguishedName.setEnabled(false);
-
- final Text commonName = createLT(tk, body, "Common Name",
- UserAdminUtils.getProperty(user, LdapAttrs.cn.name()));
- commonName.setEnabled(false);
-
- final Text firstName = createLT(tk, body, "First name",
- UserAdminUtils.getProperty(user, LdapAttrs.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, LdapAttrs.sn.name()));
-
- final Text email = createLT(tk, body, "Email", UserAdminUtils.getProperty(user, LdapAttrs.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()) {
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 = CurrentUser.isInRole(NodeConstants.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);
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
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;
// LOCAL HELPERS
private void refreshFormTitle(User group) {
- getManagedForm().getForm().setText(UserAdminUtils.getProperty(group, LdapAttrs.cn.name()));
+ // getManagedForm().getForm().setText(UserAdminUtils.getProperty(group,
+ // LdapAttrs.cn.name()));
}
/** Appends a section with a title */
/** Creates label and password. */
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;
}
}