From 466037cd227257844a4f856fdf81609b44539f7a Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 6 Apr 2023 18:19:46 +0300 Subject: [PATCH 1/2] DictionaryPresentRule add additional checks --- .../common/rules/DictionaryPresentRule.java | 51 +++++++++++-------- .../common/rules/FieldRequiredRule.java | 19 ++++--- 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java index 9cae88bc0..3e4cee495 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java @@ -15,6 +15,7 @@ import java.util.function.Function; /** * Проверка поля с кодом из словаря (таблицы *_dictionary) + * * @param Класс проверяемого объекта * @param Класс словаря */ @@ -24,58 +25,68 @@ public record DictionaryPresentRule(String fiel Class dictionaryClass, IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorWrongDictionaryValue, - boolean required) implements IValidationRule> { + boolean required, + Function[] additionalChecks) implements IValidationRule> { + /** - * @param fieldName Название поля - * @param getter Метод получения проверяемого значения - * @param dictionaryName Название словаря (см. IMDGDistributedNames) - * @param dictionaryClass Класс словаря (классы *Dictionary.class) - * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое + * @param fieldName Название поля + * @param getter Метод получения проверяемого значения + * @param dictionaryName Название словаря (см. IMDGDistributedNames) + * @param dictionaryClass Класс словаря (классы *Dictionary.class) + * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре - * @param required Флаг обязательности - * @param Класс проверяемого объекта - * @param Класс словаря + * @param required Флаг обязательности + * @param additionalChecks Дополнительные проверки, связанные с этим полем + * @param Класс проверяемого объекта + * @param Класс словаря */ + @SafeVarargs public static DictionaryPresentRule instance(String fieldName, Function getter, String dictionaryName, Class dictionaryClass, IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorWrongDictionaryValue, - boolean required) { + boolean required, + Function... additionalChecks) { return new DictionaryPresentRule<>(fieldName, getter, dictionaryName, dictionaryClass, errorEmptyRequiredValue, errorWrongDictionaryValue, - required); + required, + additionalChecks); } /** - * @param fieldName Название поля - * @param getter Метод получения проверяемого значения - * @param dictionaryName Название словаря (см. IMDGDistributedNames) - * @param dictionaryClass Класс словаря (классы *Dictionary.class) - * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое + * @param fieldName Название поля + * @param getter Метод получения проверяемого значения + * @param dictionaryName Название словаря (см. IMDGDistributedNames) + * @param dictionaryClass Класс словаря (классы *Dictionary.class) + * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре - * @param Класс проверяемого объекта - * @param Класс словаря + * @param additionalChecks Дополнительные проверки, связанные с этим полем + * @param Класс проверяемого объекта + * @param Класс словаря */ + @SafeVarargs public static DictionaryPresentRule instance(String fieldName, Function getter, String dictionaryName, Class dictionaryClass, IErrorEnumId errorEmptyRequiredValue, - IErrorEnumId errorWrongDictionaryValue) { + IErrorEnumId errorWrongDictionaryValue, + Function... additionalChecks) { return new DictionaryPresentRule<>(fieldName, getter, dictionaryName, dictionaryClass, errorEmptyRequiredValue, errorWrongDictionaryValue, - true); + true, + additionalChecks); } @Override 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 b9f5bb89c..eaa468190 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 @@ -11,9 +11,13 @@ import java.util.function.Function; /** * Проверка обязательности поля (not null) + * + * @param fieldName Название поля + * @param getter Метод получения значения * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое - * @param Класс проверяемого объекта - * @param Класс проверяемого значения + * @param additionalChecks Дополнительные проверки, связанные с этим полем + * @param Класс проверяемого объекта + * @param Класс проверяемого значения */ public record FieldRequiredRule( String fieldName, @@ -23,17 +27,18 @@ public record FieldRequiredRule( ) implements IValidationRule> { /** - * @param fieldName Название поля - * @param getter Метод получения значения + * @param fieldName Название поля + * @param getter Метод получения значения * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое - * @param Класс проверяемого объекта - * @param Класс проверяемого значения + * @param additionalChecks Дополнительные проверки, связанные с этим полем + * @param Класс проверяемого объекта + * @param Класс проверяемого значения */ @SafeVarargs public static FieldRequiredRule instance(String fieldName, Function getter, IErrorEnumId errorEmptyRequiredValue, - Function ... additionalChecks) { + Function... additionalChecks) { if (errorEmptyRequiredValue == null) throw new IllegalArgumentException("Empty errorEmptyRequiredValue"); return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, additionalChecks); } From 1d173afccb60922be791e89149ce9d5ad7c4207a Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 6 Apr 2023 18:24:58 +0300 Subject: [PATCH 2/2] DictionaryPresentRule add additional checks (fix) --- .../validation/common/rules/DictionaryPresentRule.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java index 3e4cee495..30c25318b 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/DictionaryPresentRule.java @@ -108,6 +108,11 @@ public record DictionaryPresentRule(String fiel if (dictionaryFromMap == null) { return of(errorWrongDictionaryValue, fieldName); } + for (Function additionalCheck : additionalChecks) { + IErrorEnumId validationError = additionalCheck.apply(dictionaryFromMap); + if (validationError != null) + return of(validationError, fieldName); + } return empty(); }