package name.abuchen.portfolio.ui.dialogs; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.util.BindingHelper.Model; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.validation.MultiValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; public class PasswordDialog extends AbstractDialog { public static class PasswordModel extends Model { private String password; private String repeat; public String getPassword() { return password; } public void setPassword(String password) { firePropertyChange("password", this.password, this.password = password); //$NON-NLS-1$ } public String getRepeat() { return repeat; } public void setRepeat(String repeat) { firePropertyChange("repeat", this.repeat, this.repeat = repeat); //$NON-NLS-1$ } @Override public void applyChanges() {} } public PasswordDialog(Shell parentShell) { super(parentShell, Messages.TitlePasswordDialog, new PasswordModel()); } @Override protected void createFormElements(Composite editArea) { final IObservableValue password = bindings().bindStringInput(editArea, Messages.LabelPassword, "password", SWT.PASSWORD); //$NON-NLS-1$ final IObservableValue repeat = bindings().bindStringInput(editArea, Messages.LabelPasswordRepeat, "repeat", SWT.PASSWORD); //$NON-NLS-1$ // multi validator (passwords must be identical) MultiValidator validator = new MultiValidator() { @Override protected IStatus validate() { String pwd = (String) password.getValue(); String rpt = (String) repeat.getValue(); if (pwd.length() < 6) return ValidationStatus.error(Messages.MsgPasswordMinCharacters); return pwd.equals(rpt) ? ValidationStatus.ok() : ValidationStatus .error(Messages.MsgPasswordNotIdentical); } }; bindings().getBindingContext().addValidationStatusProvider(validator); } public String getPassword() { return ((PasswordModel) getModel()).getPassword(); } }