package org.peerbox.presenter.validation; import javafx.beans.property.StringProperty; import javafx.scene.control.PasswordField; import org.peerbox.presenter.validation.ValidationUtils.ValidationResult; public final class CombinedPinValidator implements IValidate { private TextFieldValidator validatePin; private TextFieldValidator validateConfirmPin; public CombinedPinValidator(PasswordField txtPin, StringProperty pinErrorProperty, PasswordField txtConfirmPin) { validatePin = new TextFieldValidator(txtPin, pinErrorProperty, true) { @Override public ValidationResult validate(String pin) { final String confirmPin = validateConfirmPin.getTextField().getText(); return validatePins(pin, confirmPin); } }; validateConfirmPin = new TextFieldValidator(txtConfirmPin) { @Override public ValidationResult validate(String confirmPin) { final String pin = validatePin.getTextField().getText(); return validatePins(pin, confirmPin); } }; } @Override public ValidationResult validate() { final String pin = validatePin.getTextField().getText(); final String confirmPin = validateConfirmPin.getTextField().getText(); return validatePins(pin, confirmPin); } private ValidationResult validatePins(final String pin, final String confirmPin) { ValidationResult res = ValidationUtils.validatePins(pin, confirmPin); if (res.isError()) { validatePin.decorateError(); validateConfirmPin.decorateError(); validatePin.setErrorMessage(res.getMessage()); } else { validatePin.undecorateError(); validateConfirmPin.undecorateError(); validatePin.clearErrorMessage(); } return res; } public void reset() { validatePin.undecorateError(); validateConfirmPin.undecorateError(); validatePin.clearErrorMessage(); validateConfirmPin.clearErrorMessage(); } }