From 80033cfabcef26b413bf3f21ac8371bbe43ef882 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Tue, 22 Nov 2016 11:25:03 +0000 Subject: [PATCH] Add batch feature to reset multiple user mails, clean code. git-svn-id: https://svn.argeo.org/commons/trunk@9318 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/spring/common.xml | 14 +- .../META-INF/spring/jcr.xml | 10 - .../META-INF/spring/keyring.xml | 18 -- .../META-INF/spring/osgi.xml | 21 +- .../META-INF/spring/parts.xml | 37 ++-- .../META-INF/spring/views.xml | 17 -- org.argeo.cms.ui.workbench/plugin.xml | 102 ++++----- .../cms/ui/workbench/WorkbenchUiPlugin.java | 12 +- .../commands/OpenChangePasswordDialog.java | 41 ++-- .../internal/useradmin/UiAdminUtils.java | 8 + .../internal/useradmin/commands/NewUser.java | 10 +- .../parts/UserBatchUpdateWizard.java | 199 +++++++++++------- 12 files changed, 231 insertions(+), 258 deletions(-) delete mode 100644 org.argeo.cms.ui.workbench/META-INF/spring/jcr.xml delete mode 100644 org.argeo.cms.ui.workbench/META-INF/spring/keyring.xml delete mode 100644 org.argeo.cms.ui.workbench/META-INF/spring/views.xml diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/common.xml b/org.argeo.cms.ui.workbench/META-INF/spring/common.xml index ff4304d16..e88329254 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/common.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/common.xml @@ -15,13 +15,7 @@ - - - - - - - - - - \ No newline at end of file + + + + diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/jcr.xml b/org.argeo.cms.ui.workbench/META-INF/spring/jcr.xml deleted file mode 100644 index e074154ed..000000000 --- a/org.argeo.cms.ui.workbench/META-INF/spring/jcr.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/keyring.xml b/org.argeo.cms.ui.workbench/META-INF/spring/keyring.xml deleted file mode 100644 index 004e9b3e7..000000000 --- a/org.argeo.cms.ui.workbench/META-INF/spring/keyring.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml b/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml index 366a42e7d..b2b42fcf0 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml @@ -8,34 +8,25 @@ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" osgi:default-timeout="30000"> - + + + - - - - - - + + - - - - - - - - \ No newline at end of file + diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml b/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml index 131b180de..8fc1adb66 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml @@ -4,42 +4,41 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - - + - - - - - - + - - + - @@ -49,5 +48,13 @@ - - \ No newline at end of file + + + + + + + + diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/views.xml b/org.argeo.cms.ui.workbench/META-INF/spring/views.xml deleted file mode 100644 index 767464008..000000000 --- a/org.argeo.cms.ui.workbench/META-INF/spring/views.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - diff --git a/org.argeo.cms.ui.workbench/plugin.xml b/org.argeo.cms.ui.workbench/plugin.xml index 5c77ab7d8..691e893f3 100644 --- a/org.argeo.cms.ui.workbench/plugin.xml +++ b/org.argeo.cms.ui.workbench/plugin.xml @@ -61,46 +61,46 @@ - - - - - - - - - - - - + + + + + + + + + + + - - - + + + - @@ -201,15 +201,14 @@ name="begin, commit or rollback"> - - - + - - - + + @@ -399,16 +398,7 @@ tooltip="Create a new group"> - - + @@ -678,7 +668,6 @@ pattern="org.argeo.cms.ui.workbench/org.argeo.cms.ui.workbench.osgiPerspective" isEqualityPattern="true" activityId="org.argeo.cms.ui.workbench.adminActivity"> - - - \ No newline at end of file + diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/WorkbenchUiPlugin.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/WorkbenchUiPlugin.java index e6e43a0d3..02f8ac9ec 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/WorkbenchUiPlugin.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/WorkbenchUiPlugin.java @@ -37,12 +37,14 @@ import org.osgi.framework.ServiceRegistration; /** The activator class controls the plug-in life cycle */ public class WorkbenchUiPlugin extends AbstractUIPlugin implements ILogListener { - private final static Log log = LogFactory.getLog(WorkbenchUiPlugin.class); + // The plug-in ID + public final static String PLUGIN_ID = "org.argeo.cms.ui.workbench"; //$NON-NLS-1$ + private ResourceBundle messages; - private static BundleContext bundleContext; + public static InheritableThreadLocal display = new InheritableThreadLocal() { @Override @@ -51,9 +53,6 @@ public class WorkbenchUiPlugin extends AbstractUIPlugin implements ILogListener } }; - // The plug-in ID - // public final static String PLUGIN_ID = "org.argeo.security.ui"; //$NON-NLS-1$ - public final static String PLUGIN_ID = "org.argeo.cms.ui.workbench"; //$NON-NLS-1$ final static String CONTEXT_KEYRING = "KEYRING"; @@ -65,9 +64,7 @@ public class WorkbenchUiPlugin extends AbstractUIPlugin implements ILogListener public void start(BundleContext context) throws Exception { super.start(context); - bundleContext = context; - defaultCallbackHandler = new DefaultCallbackHandler(); defaultCallbackHandlerReg = context.registerService( CallbackHandler.class, defaultCallbackHandler, null); @@ -77,7 +74,6 @@ public class WorkbenchUiPlugin extends AbstractUIPlugin implements ILogListener Platform.addLogListener(this); if (log.isTraceEnabled()) log.trace("Eclipse logging now directed to standard logging"); - } public void stop(BundleContext context) throws Exception { diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java index 960c5fffb..cd4859874 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java @@ -55,17 +55,15 @@ import org.osgi.service.useradmin.UserAdmin; /** Open the change password dialog */ public class OpenChangePasswordDialog extends AbstractHandler { - private final static Log log = LogFactory - .getLog(OpenChangePasswordDialog.class); + private final static Log log = LogFactory.getLog(OpenChangePasswordDialog.class); private UserAdmin userAdmin; private UserTransaction userTransaction; public Object execute(ExecutionEvent event) throws ExecutionException { - ChangePasswordDialog dialog = new ChangePasswordDialog( - HandlerUtil.getActiveShell(event), userAdmin); + ChangePasswordDialog dialog = new ChangePasswordDialog(HandlerUtil.getActiveShell(event), userAdmin); if (dialog.open() == Dialog.OK) { - MessageDialog.openInformation(HandlerUtil.getActiveShell(event), - passwordChanged.lead(), passwordChanged.lead()); + MessageDialog.openInformation(HandlerUtil.getActiveShell(event), passwordChanged.lead(), + passwordChanged.lead()); } return null; } @@ -73,8 +71,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { @SuppressWarnings("unchecked") protected void changePassword(char[] oldPassword, char[] newPassword) { Subject subject = Subject.getSubject(AccessController.getContext()); - String name = subject.getPrincipals(X500Principal.class).iterator() - .next().toString(); + String name = subject.getPrincipals(X500Principal.class).iterator().next().toString(); LdapName dn; try { dn = new LdapName(name); @@ -103,14 +100,6 @@ public class OpenChangePasswordDialog extends AbstractHandler { } } - public void setUserAdmin(UserAdmin userDetailsManager) { - this.userAdmin = userDetailsManager; - } - - public void setUserTransaction(UserTransaction userTransaction) { - this.userTransaction = userTransaction; - } - class ChangePasswordDialog extends TitleAreaDialog { private static final long serialVersionUID = -6963970583882720962L; private Text oldPassword, newPassword1, newPassword2; @@ -125,12 +114,10 @@ public class OpenChangePasswordDialog extends AbstractHandler { protected Control createDialogArea(Composite parent) { Composite dialogarea = (Composite) super.createDialogArea(parent); - dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, - true)); + dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Composite composite = new Composite(dialogarea, SWT.NONE); composite.setLayout(new GridLayout(2, false)); - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, - false)); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); oldPassword = createLP(composite, currentPassword.lead()); newPassword1 = createLP(composite, newPassword.lead()); newPassword2 = createLP(composite, repeatNewPassword.lead()); @@ -145,8 +132,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { try { if (!newPassword1.getText().equals(newPassword2.getText())) throw new CmsException("New passwords are different"); - changePassword(oldPassword.getTextChars(), - newPassword1.getTextChars()); + changePassword(oldPassword.getTextChars(), newPassword1.getTextChars()); close(); } catch (Exception e) { ErrorFeedback.show("Cannot change password", e); @@ -156,8 +142,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { /** Creates label and password. */ protected Text createLP(Composite parent, String label) { new Label(parent, SWT.NONE).setText(label); - Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.PASSWORD - | SWT.BORDER); + Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.PASSWORD | SWT.BORDER); text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); return text; } @@ -167,4 +152,12 @@ public class OpenChangePasswordDialog extends AbstractHandler { shell.setText(changePassword.lead()); } } + + public void setUserAdmin(UserAdmin userAdmin) { + this.userAdmin = userAdmin; + } + + public void setUserTransaction(UserTransaction userTransaction) { + this.userTransaction = userTransaction; + } } diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java index 1e29276c1..8f5588b76 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java @@ -29,4 +29,12 @@ public class UiAdminUtils { throw new CmsException("Unable to begin transaction", e); } } + + /** + * Email addresses must match this regexp pattern ({@value #EMAIL_PATTERN}. + * Thanks to this tip. + */ + public final static String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; } diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java index e6072f178..c342342dc 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java @@ -25,6 +25,7 @@ import javax.naming.ldap.Rdn; import org.argeo.cms.CmsException; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; +import org.argeo.cms.ui.workbench.internal.useradmin.UiAdminUtils; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.EclipseUiUtils; @@ -54,13 +55,6 @@ import org.osgi.service.useradmin.UserAdminEvent; /** Open a wizard that enables creation of a new user. */ public class NewUser extends AbstractHandler { - /** - * Email addresses must match this regexp pattern ({@value #EMAIL_PATTERN}. - * Thanks to this tip. - */ - public final static String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; // private final static Log log = LogFactory.getLog(NewUser.class); public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".newUser"; @@ -236,7 +230,7 @@ public class NewUser extends AbstractHandler { .getRole(getDn(name)); if (role != null) return "User " + name + " already exists"; - if (!primaryMailTxt.getText().matches(EMAIL_PATTERN)) + if (!primaryMailTxt.getText().matches(UiAdminUtils.EMAIL_PATTERN)) return "Not a valid email address"; if (lastNameTxt.getText().trim().equals("")) return "Specify a last name"; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java index 4fade3804..7e3540f76 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java @@ -12,6 +12,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.ui.workbench.internal.useradmin.UiAdminUtils; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.providers.CommonNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP; @@ -45,12 +46,12 @@ import org.eclipse.swt.widgets.Text; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; +import org.osgi.service.useradmin.UserAdminEvent; /** Wizard to update users */ public class UserBatchUpdateWizard extends Wizard { - private final static Log log = LogFactory - .getLog(UserBatchUpdateWizard.class); + private final static Log log = LogFactory.getLog(UserBatchUpdateWizard.class); private UserAdminWrapper userAdminWrapper; // pages @@ -60,12 +61,14 @@ public class UserBatchUpdateWizard extends Wizard { // Various implemented commands keys private final static String CMD_UPDATE_PASSWORD = "resetPassword"; + private final static String CMD_UPDATE_EMAIL = "resetEmail"; private final static String CMD_GROUP_MEMBERSHIP = "groupMembership"; private final Map commands = new HashMap() { private static final long serialVersionUID = 1L; { put("Reset password(s)", CMD_UPDATE_PASSWORD); + put("Reset email(s)", CMD_UPDATE_EMAIL); // TODO implement role / group management // put("Add/Remove from group", CMD_GROUP_MEMBERSHIP); } @@ -92,14 +95,11 @@ public class UserBatchUpdateWizard extends Wizard { UserTransaction ut = userAdminWrapper.getUserTransaction(); try { if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION - && !MessageDialog.openConfirm(getShell(), - "Existing Transaction", - "A user transaction is already existing, " - + "are you sure you want to proceed ?")) + && !MessageDialog.openConfirm(getShell(), "Existing Transaction", + "A user transaction is already existing, " + "are you sure you want to proceed ?")) return false; } catch (SystemException e) { - throw new CmsException("Cannot get user transaction state " - + "before user batch update", e); + throw new CmsException("Cannot get user transaction state " + "before user batch update", e); } // We cannot use jobs, user modifications are still meant to be done in @@ -111,10 +111,14 @@ public class UserBatchUpdateWizard extends Wizard { if (CMD_UPDATE_PASSWORD.equals(chooseCommandPage.getCommand())) { char[] newValue = chooseCommandPage.getPwdValue(); if (newValue == null) - throw new CmsException( - "Password cannot be null or an empty string"); - ResetPassword job = new ResetPassword(userAdminWrapper, - userListPage.getSelectedUsers(), newValue); + throw new CmsException("Password cannot be null or an empty string"); + ResetPassword job = new ResetPassword(userAdminWrapper, userListPage.getSelectedUsers(), newValue); + job.doUpdate(); + } else if (CMD_UPDATE_EMAIL.equals(chooseCommandPage.getCommand())) { + String newValue = chooseCommandPage.getEmailValue(); + if (newValue == null) + throw new CmsException("Password cannot be null or an empty string"); + ResetEmail job = new ResetEmail(userAdminWrapper, userListPage.getSelectedUsers(), newValue); job.doUpdate(); } return true; @@ -131,8 +135,7 @@ public class UserBatchUpdateWizard extends Wizard { private UserAdminWrapper userAdminWrapper; private List usersToUpdate; - public ResetPassword(UserAdminWrapper userAdminWrapper, - List usersToUpdate, char[] newPwd) { + public ResetPassword(UserAdminWrapper userAdminWrapper, List usersToUpdate, char[] newPwd) { this.newPwd = newPwd; this.usersToUpdate = usersToUpdate; this.userAdminWrapper = userAdminWrapper; @@ -148,17 +151,53 @@ public class UserBatchUpdateWizard extends Wizard { } userAdminWrapper.commitOrNotifyTransactionStateChange(); } catch (Exception e) { - throw new CmsException("Cannot perform batch update on users", - e); + throw new CmsException("Cannot perform batch update on users", e); } finally { UserTransaction ut = userAdminWrapper.getUserTransaction(); try { if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION) ut.rollback(); - } catch (IllegalStateException | SecurityException - | SystemException e) { - log.error("Unable to rollback session in 'finally', " - + "the system might be in a dirty state"); + } catch (IllegalStateException | SecurityException | SystemException e) { + log.error("Unable to rollback session in 'finally', " + "the system might be in a dirty state"); + e.printStackTrace(); + } + } + } + } + + private class ResetEmail { + private String newEmail; + private UserAdminWrapper userAdminWrapper; + private List usersToUpdate; + + public ResetEmail(UserAdminWrapper userAdminWrapper, List usersToUpdate, String newEmail) { + this.newEmail = newEmail; + this.usersToUpdate = usersToUpdate; + this.userAdminWrapper = userAdminWrapper; + } + + @SuppressWarnings("unchecked") + protected void doUpdate() { + userAdminWrapper.beginTransactionIfNeeded(); + try { + for (User user : usersToUpdate) { + // the char array is emptied after being used. + user.getProperties().put(LdapAttrs.mail.name(), newEmail); + } + + userAdminWrapper.commitOrNotifyTransactionStateChange(); + if (!usersToUpdate.isEmpty()) + userAdminWrapper.notifyListeners( + new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, usersToUpdate.get(0))); + } catch (Exception e) { + throw new CmsException("Cannot perform batch update on users", e); + } finally { + UserTransaction ut = userAdminWrapper.getUserTransaction(); + try { + if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION) + ut.rollback(); + } catch (IllegalStateException | SecurityException | SystemException e) { + log.error("Unable to rollback session in finally block, the system might be in a dirty state"); e.printStackTrace(); } } @@ -240,7 +279,9 @@ public class UserBatchUpdateWizard extends Wizard { // } // PAGES - /** Displays a combo box that enables user to choose which action to perform */ + /** + * Displays a combo box that enables user to choose which action to perform + */ private class ChooseCommandWizardPage extends WizardPage { private static final long serialVersionUID = -8069434295293996633L; private Combo chooseCommandCmb; @@ -276,6 +317,8 @@ public class UserBatchUpdateWizard extends Wizard { public void widgetSelected(SelectionEvent e) { if (getCommand().equals(CMD_UPDATE_PASSWORD)) populatePasswordCmp(bottomPart); + else if (getCommand().equals(CMD_UPDATE_EMAIL)) + populateEmailCmp(bottomPart); else if (getCommand().equals(CMD_GROUP_MEMBERSHIP)) populateGroupCmp(bottomPart); else @@ -314,13 +357,33 @@ public class UserBatchUpdateWizard extends Wizard { pwd2Txt = EclipseUiUtils.createGridLP(body, "Repeat password", ml); } + private void populateEmailCmp(Composite parent) { + EclipseUiUtils.clear(parent); + Composite body = new Composite(parent, SWT.NO_FOCUS); + + ModifyListener ml = new ModifyListener() { + private static final long serialVersionUID = 2147704227294268317L; + + @Override + public void modifyText(ModifyEvent event) { + checkPageComplete(); + } + }; + + body.setLayout(new GridLayout(2, false)); + body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + valueTxt = EclipseUiUtils.createGridLT(body, "New e-mail", ml); + } + private void checkPageComplete() { String errorMsg = null; if (chooseCommandCmb.getSelectionIndex() < 0) errorMsg = "Please select an action"; - else if (CMD_UPDATE_PASSWORD.equals(getCommand())) { - if (EclipseUiUtils.isEmpty(pwdTxt.getText()) - || pwdTxt.getText().length() < 4) + else if (CMD_UPDATE_EMAIL.equals(getCommand())) { + if (!valueTxt.getText().matches(UiAdminUtils.EMAIL_PATTERN)) + errorMsg = "Not a valid e-mail address"; + } else if (CMD_UPDATE_PASSWORD.equals(getCommand())) { + if (EclipseUiUtils.isEmpty(pwdTxt.getText()) || pwdTxt.getText().length() < 4) errorMsg = "Please enter a password that is at least 4 character long"; else if (!pwdTxt.getText().equals(pwd2Txt.getText())) errorMsg = "Passwords are different"; @@ -329,8 +392,7 @@ public class UserBatchUpdateWizard extends Wizard { setMessage(errorMsg, WizardPage.ERROR); setPageComplete(false); } else { - setMessage("Page complete, you can proceed to user choice", - WizardPage.INFORMATION); + setMessage("Page complete, you can proceed to user choice", WizardPage.INFORMATION); setPageComplete(true); } @@ -340,20 +402,17 @@ public class UserBatchUpdateWizard extends Wizard { private void populateGroupCmp(Composite parent) { EclipseUiUtils.clear(parent); trueChk = new Button(parent, SWT.CHECK); - trueChk.setText("Add to group. (It will remove user(s) from the " - + "corresponding group if unchecked)"); + trueChk.setText("Add to group. (It will remove user(s) from the " + "corresponding group if unchecked)"); trueChk.setSelection(true); trueChk.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); } protected String getCommand() { - return commands.get(chooseCommandCmb.getItem(chooseCommandCmb - .getSelectionIndex())); + return commands.get(chooseCommandCmb.getItem(chooseCommandCmb.getSelectionIndex())); } protected String getCommandLbl() { - return chooseCommandCmb.getItem(chooseCommandCmb - .getSelectionIndex()); + return chooseCommandCmb.getItem(chooseCommandCmb.getSelectionIndex()); } @SuppressWarnings("unused") @@ -386,14 +445,24 @@ public class UserBatchUpdateWizard extends Wizard { else return pwdTxt.getText().toCharArray(); } + + protected String getEmailValue() { + // We do not directly reset the password text fields: There is no + // need to over secure this process: setting a pwd to multi users + // at the same time is anyhow a bad practice and should be used only + // in test environment or for temporary access + if (valueTxt == null || valueTxt.isDisposed()) + return null; + else + return valueTxt.getText(); + } } /** * Displays a list of users with a check box to be able to choose some of * them */ - private class ChooseUsersWizardPage extends WizardPage implements - IPageChangedListener { + private class ChooseUsersWizardPage extends WizardPage implements IPageChangedListener { private static final long serialVersionUID = 7651807402211214274L; private ChooseUserTableViewer userTableCmp; @@ -409,19 +478,15 @@ public class UserBatchUpdateWizard extends Wizard { // Define the displayed columns List columnDefs = new ArrayList(); - columnDefs.add(new ColumnDefinition(new CommonNameLP(), - "Common Name", 150)); + columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150)); - columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", - 200)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200)); // Only show technical DN to admin if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN)) - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 300)); + columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); - userTableCmp = new ChooseUserTableViewer(pageCmp, SWT.MULTI - | SWT.H_SCROLL | SWT.V_SCROLL); + userTableCmp = new ChooseUserTableViewer(pageCmp, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); userTableCmp.setLayoutData(EclipseUiUtils.fillAll()); userTableCmp.setColumnDefinitions(columnDefs); userTableCmp.populate(true, true); @@ -440,8 +505,7 @@ public class UserBatchUpdateWizard extends Wizard { @Override public void pageChanged(PageChangedEvent event) { if (event.getSelectedPage() == this) { - String msg = "Chosen batch action: " - + chooseCommandPage.getCommandLbl(); + String msg = "Chosen batch action: " + chooseCommandPage.getCommandLbl(); ((WizardPage) event.getSelectedPage()).setMessage(msg); } } @@ -452,10 +516,8 @@ public class UserBatchUpdateWizard extends Wizard { private class ChooseUserTableViewer extends LdifUsersTable { private static final long serialVersionUID = 5080437561015853124L; - private final String[] knownProps = { LdapAttrs.uid.name(), - LdapAttrs.DN, LdapAttrs.cn.name(), - LdapAttrs.givenName.name(), LdapAttrs.sn.name(), - LdapAttrs.mail.name() }; + private final String[] knownProps = { LdapAttrs.uid.name(), LdapAttrs.DN, LdapAttrs.cn.name(), + LdapAttrs.givenName.name(), LdapAttrs.sn.name(), LdapAttrs.mail.name() }; public ChooseUserTableViewer(Composite parent, int style) { super(parent, style); @@ -478,24 +540,16 @@ public class UserBatchUpdateWizard extends Wizard { tmpBuilder.append("*)"); } if (tmpBuilder.length() > 1) { - builder.append("(&(") - .append(LdapAttrs.objectClass.name()) - .append("=") - .append(LdapObjs.inetOrgPerson.name()) - .append(")(|"); + builder.append("(&(").append(LdapAttrs.objectClass.name()).append("=") + .append(LdapObjs.inetOrgPerson.name()).append(")(|"); builder.append(tmpBuilder.toString()); builder.append("))"); } else - builder.append("(") - .append(LdapAttrs.objectClass.name()) - .append("=") - .append(LdapObjs.inetOrgPerson.name()) - .append(")"); - roles = userAdminWrapper.getUserAdmin().getRoles( - builder.toString()); + builder.append("(").append(LdapAttrs.objectClass.name()).append("=") + .append(LdapObjs.inetOrgPerson.name()).append(")"); + roles = userAdminWrapper.getUserAdmin().getRoles(builder.toString()); } catch (InvalidSyntaxException e) { - throw new CmsException("Unable to get roles with filter: " - + filter, e); + throw new CmsException("Unable to get roles with filter: " + filter, e); } List users = new ArrayList(); for (Role role : roles) @@ -509,8 +563,7 @@ public class UserBatchUpdateWizard extends Wizard { } /** Summary of input data before launching the process */ - private class ValidateAndLaunchWizardPage extends WizardPage implements - IPageChangedListener { + private class ValidateAndLaunchWizardPage extends WizardPage implements IPageChangedListener { private static final long serialVersionUID = 7098918351451743853L; private ChosenUsersTableViewer userTableCmp; @@ -525,17 +578,13 @@ public class UserBatchUpdateWizard extends Wizard { pageCmp.setLayout(EclipseUiUtils.noSpaceGridLayout()); List columnDefs = new ArrayList(); - columnDefs.add(new ColumnDefinition(new CommonNameLP(), - "Common Name", 150)); + columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150)); - columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", - 200)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200)); // Only show technical DN to admin if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN)) - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 300)); - userTableCmp = new ChosenUsersTableViewer(pageCmp, SWT.MULTI - | SWT.H_SCROLL | SWT.V_SCROLL); + columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); + userTableCmp = new ChosenUsersTableViewer(pageCmp, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); userTableCmp.setLayoutData(EclipseUiUtils.fillAll()); userTableCmp.setColumnDefinitions(columnDefs); userTableCmp.populate(false, false); @@ -553,11 +602,9 @@ public class UserBatchUpdateWizard extends Wizard { if (event.getSelectedPage() == this) { @SuppressWarnings({ "unchecked", "rawtypes" }) Object[] values = ((ArrayList) userListPage.getSelectedUsers()) - .toArray(new Object[userListPage.getSelectedUsers() - .size()]); + .toArray(new Object[userListPage.getSelectedUsers().size()]); userTableCmp.getTableViewer().setInput(values); - String msg = "Following batch action: [" - + chooseCommandPage.getCommandLbl() + String msg = "Following batch action: [" + chooseCommandPage.getCommandLbl() + "] will be perfomed on the users listed below.\n"; // + "Are you sure you want to proceed?"; setMessage(msg); -- 2.30.2