From 6707e361d93ef8e812915db1bee356dc09c0eee5 Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 7 Apr 2023 20:58:58 +0300 Subject: [PATCH] FieldRequiredRule, add additional checks --- .../common/rules/FieldRequiredRule.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java index eaa468190..ca46f4519 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java @@ -15,7 +15,8 @@ import java.util.function.Function; * @param fieldName Название поля * @param getter Метод получения значения * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое - * @param additionalChecks Дополнительные проверки, связанные с этим полем + * @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true + * @param required Флаг обязательности поля * @param Класс проверяемого объекта * @param Класс проверяемого значения */ @@ -23,9 +24,29 @@ public record FieldRequiredRule( String fieldName, Function getter, IErrorEnumId errorEmptyRequiredValue, + boolean required, Function[] additionalChecks ) implements IValidationRule> { + /** + * @param fieldName Название поля + * @param getter Метод получения значения + * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое + * @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true + * @param required Флаг обязательности поля + * @param Класс проверяемого объекта + * @param Класс проверяемого значения + */ + @SafeVarargs + public static FieldRequiredRule instance(String fieldName, + Function getter, + IErrorEnumId errorEmptyRequiredValue, + boolean required, + Function... additionalChecks) { + if (errorEmptyRequiredValue == null) throw new IllegalArgumentException("Empty errorEmptyRequiredValue"); + return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, required, additionalChecks); + } + /** * @param fieldName Название поля * @param getter Метод получения значения @@ -40,18 +61,20 @@ public record FieldRequiredRule( IErrorEnumId errorEmptyRequiredValue, Function... additionalChecks) { if (errorEmptyRequiredValue == null) throw new IllegalArgumentException("Empty errorEmptyRequiredValue"); - return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, additionalChecks); + return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, true, additionalChecks); } @Override public Optional validate(ImdgValidationContext context) { R validatedObject = context.getValidatedObject(); V value = getter.apply(validatedObject); - if (value == null) return of(errorEmptyRequiredValue, fieldName); - for (Function additionalCheck : additionalChecks) { - IErrorEnumId validationError = additionalCheck.apply(value); - if (validationError != null) - return of(validationError, fieldName); + if (required) { + if (value == null) return of(errorEmptyRequiredValue, fieldName); + for (Function additionalCheck : additionalChecks) { + IErrorEnumId validationError = additionalCheck.apply(value); + if (validationError != null) + return of(validationError, fieldName); + } } return empty(); }