private void registerBasicValidators() { Validator<String> noWhitespaceName = Validator.createRegexValidator("Name cannot contain whitespace", "\\S*+", Severity.ERROR); Validator<String> emptyName = Validator.createEmptyValidator("Name required"); Validator<String> uniqueName = (c, val) -> { long sameNameDescriptors = backingDescriptorList.getOrElse(FXCollections.emptyObservableList()) .stream() .map(PropertyDescriptorSpec::getName) .filter(getName()::equals) .count(); return new ValidationResult().addErrorIf(c, "The name must be unique", sameNameDescriptors > 1); }; validationSupport.registerValidator(nameField, Validator.combine(noWhitespaceName, emptyName, uniqueName)); Validator<String> noWhitespaceDescription = Validator.createRegexValidator("Message cannot be whitespace", "(\\s*+\\S.*)?", Severity.ERROR); Validator<String> emptyDescription = Validator.createEmptyValidator("Message required"); validationSupport.registerValidator(descriptionField, Validator.combine(noWhitespaceDescription, emptyDescription)); }
/** * Factory method to create validation result out of one message * @param target validation target * @param text message text * @param severity message severity * @param condition condition on which message will be added to validation result * @return New instance of validation result */ public static final ValidationResult fromMessageIf( Control target, String text, Severity severity, boolean condition ) { return new ValidationResult().addMessageIf(target, text, severity, condition); }
/** * Factory method to create validation result out of one error * @param target validation target * @param text message text * @param condition condition on which message will be added to validation result * @return New instance of validation result */ public static final ValidationResult fromErrorIf( Control target, String text, boolean condition ) { return new ValidationResult().addErrorIf(target, text, condition); }
/** * Factory method to create validation result out of several messages * @param messages * @return New instance of validation result */ public static final ValidationResult fromMessages( ValidationMessage... messages ) { return new ValidationResult().addAll(messages); }
/** * Factory method to create validation result out of collection of messages * @param messages * @return New instance of validation result */ public static final ValidationResult fromMessages( Collection<? extends ValidationMessage> messages ) { return new ValidationResult().addAll(messages); }
/** * Factory method to create validation result out of collection of validation results * @param results results * @return New instance of validation result, combining all into one */ public static final ValidationResult fromResults( Collection<ValidationResult> results ) { return new ValidationResult().combineAll(results); }
/** * Factory method to create validation result out of one warning * @param target validation target * @param text message text * @param condition condition on which message will be added to validation result * @return New instance of validation result */ public static final ValidationResult fromWarningIf( Control target, String text, boolean condition ) { return new ValidationResult().addWarningIf(target, text, condition); }
/** * Factory method to create validation result out of several validation results * @param results results * @return New instance of validation result, combining all into one */ public static final ValidationResult fromResults( ValidationResult... results ) { return new ValidationResult().combineAll(results); }
/** * Combines the given validators into a single Validator instance. * @param validators the validators to combine * @return a Validator instance */ @SafeVarargs static <T> Validator<T> combine(Validator<T>... validators) { return (control, value) -> Stream.of(validators) .map(validator -> validator.apply(control, value)) .collect(Collectors.reducing(new ValidationResult(), ValidationResult::combine)); }