Merge remote-tracking branch 'origin/CLS_258_259' into CLS_258_259

This commit is contained in:
psemenkov 2023-04-06 18:35:23 +03:00
commit cd2c49b9d9
2 changed files with 48 additions and 27 deletions

View file

@ -15,6 +15,7 @@ import java.util.function.Function;
/** /**
* Проверка поля с кодом из словаря (таблицы *_dictionary) * Проверка поля с кодом из словаря (таблицы *_dictionary)
*
* @param <R> Класс проверяемого объекта * @param <R> Класс проверяемого объекта
* @param <D> Класс словаря * @param <D> Класс словаря
*/ */
@ -24,58 +25,68 @@ public record DictionaryPresentRule<R, D extends AbstractDictionary>(String fiel
Class<D> dictionaryClass, Class<D> dictionaryClass,
IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorEmptyRequiredValue,
IErrorEnumId errorWrongDictionaryValue, IErrorEnumId errorWrongDictionaryValue,
boolean required) implements IValidationRule<ImdgValidationContext<R>> { boolean required,
Function<D, IErrorEnumId>[] additionalChecks) implements IValidationRule<ImdgValidationContext<R>> {
/** /**
* @param fieldName Название поля * @param fieldName Название поля
* @param getter Метод получения проверяемого значения * @param getter Метод получения проверяемого значения
* @param dictionaryName Название словаря (см. IMDGDistributedNames) * @param dictionaryName Название словаря (см. IMDGDistributedNames)
* @param dictionaryClass Класс словаря (классы *Dictionary.class) * @param dictionaryClass Класс словаря (классы *Dictionary.class)
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре * @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре
* @param required Флаг обязательности * @param required Флаг обязательности
* @param <R> Класс проверяемого объекта * @param additionalChecks Дополнительные проверки, связанные с этим полем
* @param <D> Класс словаря * @param <R> Класс проверяемого объекта
* @param <D> Класс словаря
*/ */
@SafeVarargs
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName, public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
Function<R, String> getter, Function<R, String> getter,
String dictionaryName, String dictionaryName,
Class<D> dictionaryClass, Class<D> dictionaryClass,
IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorEmptyRequiredValue,
IErrorEnumId errorWrongDictionaryValue, IErrorEnumId errorWrongDictionaryValue,
boolean required) { boolean required,
Function<D, IErrorEnumId>... additionalChecks) {
return new DictionaryPresentRule<>(fieldName, return new DictionaryPresentRule<>(fieldName,
getter, getter,
dictionaryName, dictionaryName,
dictionaryClass, dictionaryClass,
errorEmptyRequiredValue, errorEmptyRequiredValue,
errorWrongDictionaryValue, errorWrongDictionaryValue,
required); required,
additionalChecks);
} }
/** /**
* @param fieldName Название поля * @param fieldName Название поля
* @param getter Метод получения проверяемого значения * @param getter Метод получения проверяемого значения
* @param dictionaryName Название словаря (см. IMDGDistributedNames) * @param dictionaryName Название словаря (см. IMDGDistributedNames)
* @param dictionaryClass Класс словаря (классы *Dictionary.class) * @param dictionaryClass Класс словаря (классы *Dictionary.class)
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре * @param errorWrongDictionaryValue Ошибка, которая будет возвращена, если поле не найдено в словаре
* @param <R> Класс проверяемого объекта * @param additionalChecks Дополнительные проверки, связанные с этим полем
* @param <D> Класс словаря * @param <R> Класс проверяемого объекта
* @param <D> Класс словаря
*/ */
@SafeVarargs
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName, public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
Function<R, String> getter, Function<R, String> getter,
String dictionaryName, String dictionaryName,
Class<D> dictionaryClass, Class<D> dictionaryClass,
IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorEmptyRequiredValue,
IErrorEnumId errorWrongDictionaryValue) { IErrorEnumId errorWrongDictionaryValue,
Function<D, IErrorEnumId>... additionalChecks) {
return new DictionaryPresentRule<>(fieldName, return new DictionaryPresentRule<>(fieldName,
getter, getter,
dictionaryName, dictionaryName,
dictionaryClass, dictionaryClass,
errorEmptyRequiredValue, errorEmptyRequiredValue,
errorWrongDictionaryValue, errorWrongDictionaryValue,
true); true,
additionalChecks);
} }
@Override @Override
@ -97,6 +108,11 @@ public record DictionaryPresentRule<R, D extends AbstractDictionary>(String fiel
if (dictionaryFromMap == null) { if (dictionaryFromMap == null) {
return of(errorWrongDictionaryValue, fieldName); return of(errorWrongDictionaryValue, fieldName);
} }
for (Function<D, IErrorEnumId> additionalCheck : additionalChecks) {
IErrorEnumId validationError = additionalCheck.apply(dictionaryFromMap);
if (validationError != null)
return of(validationError, fieldName);
}
return empty(); return empty();
} }

View file

@ -11,9 +11,13 @@ import java.util.function.Function;
/** /**
* Проверка обязательности поля (not null) * Проверка обязательности поля (not null)
*
* @param fieldName Название поля
* @param getter Метод получения значения
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param <R> Класс проверяемого объекта * @param additionalChecks Дополнительные проверки, связанные с этим полем
* @param <V> Класс проверяемого значения * @param <R> Класс проверяемого объекта
* @param <V> Класс проверяемого значения
*/ */
public record FieldRequiredRule<R, V>( public record FieldRequiredRule<R, V>(
String fieldName, String fieldName,
@ -23,17 +27,18 @@ public record FieldRequiredRule<R, V>(
) implements IValidationRule<ImdgValidationContext<R>> { ) implements IValidationRule<ImdgValidationContext<R>> {
/** /**
* @param fieldName Название поля * @param fieldName Название поля
* @param getter Метод получения значения * @param getter Метод получения значения
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param <R> Класс проверяемого объекта * @param additionalChecks Дополнительные проверки, связанные с этим полем
* @param <V> Класс проверяемого значения * @param <R> Класс проверяемого объекта
* @param <V> Класс проверяемого значения
*/ */
@SafeVarargs @SafeVarargs
public static <R, V> FieldRequiredRule<R, V> instance(String fieldName, public static <R, V> FieldRequiredRule<R, V> instance(String fieldName,
Function<R, V> getter, Function<R, V> getter,
IErrorEnumId errorEmptyRequiredValue, IErrorEnumId errorEmptyRequiredValue,
Function<V, IErrorEnumId> ... additionalChecks) { Function<V, IErrorEnumId>... additionalChecks) {
if (errorEmptyRequiredValue == null) throw new IllegalArgumentException("Empty errorEmptyRequiredValue"); if (errorEmptyRequiredValue == null) throw new IllegalArgumentException("Empty errorEmptyRequiredValue");
return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, additionalChecks); return new FieldRequiredRule<>(fieldName, getter, errorEmptyRequiredValue, additionalChecks);
} }