FieldRequiredRule, add additional checks

This commit is contained in:
akulikov 2023-04-07 20:58:58 +03:00
parent ce9ea6b1b2
commit 6707e361d9

View file

@ -15,7 +15,8 @@ import java.util.function.Function;
* @param fieldName Название поля
* @param getter Метод получения значения
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param additionalChecks Дополнительные проверки, связанные с этим полем
* @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true
* @param required Флаг обязательности поля
* @param <R> Класс проверяемого объекта
* @param <V> Класс проверяемого значения
*/
@ -23,9 +24,29 @@ public record FieldRequiredRule<R, V>(
String fieldName,
Function<R, V> getter,
IErrorEnumId errorEmptyRequiredValue,
boolean required,
Function<V, IErrorEnumId>[] additionalChecks
) implements IValidationRule<ImdgValidationContext<R>> {
/**
* @param fieldName Название поля
* @param getter Метод получения значения
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое
* @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true
* @param required Флаг обязательности поля
* @param <R> Класс проверяемого объекта
* @param <V> Класс проверяемого значения
*/
@SafeVarargs
public static <R, V> FieldRequiredRule<R, V> instance(String fieldName,
Function<R, V> getter,
IErrorEnumId errorEmptyRequiredValue,
boolean required,
Function<V, IErrorEnumId>... 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<R, V>(
IErrorEnumId errorEmptyRequiredValue,
Function<V, IErrorEnumId>... 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<EnumMessage> validate(ImdgValidationContext<R> context) {
R validatedObject = context.getValidatedObject();
V value = getter.apply(validatedObject);
if (value == null) return of(errorEmptyRequiredValue, fieldName);
for (Function<V, IErrorEnumId> 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<V, IErrorEnumId> additionalCheck : additionalChecks) {
IErrorEnumId validationError = additionalCheck.apply(value);
if (validationError != null)
return of(validationError, fieldName);
}
}
return empty();
}