IsLongValueRule

This commit is contained in:
akulikov 2023-04-06 10:13:59 +03:00
parent eb4e730bdf
commit 0c4d747dde

View file

@ -0,0 +1,66 @@
package ru.spcex.clearing.validation.common.rules;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.Optional;
import java.util.function.Function;
/**
* Проверка поля типа String на возможность преобразования в Long
*
* @param <R> Класс проверяемого объекта
*/
public record IsLongValueRule<R>(
String fieldName,
Function<R, String> getter,
IErrorEnumId errorEmptyRequiredField,
IErrorEnumId errorWrongFieldValue,
boolean required
) implements IValidationRule<ImdgValidationContext<R>> {
/**
* @param fieldName Название поля класса, используется для передачи ошибки
* @param getter Метод получения проверяемого поля
* @param errorEmptyRequiredField Ошибка, которая будет возвращена, если поле пустое
* @param errorWrongFieldValue Ошибка, которая будет возвращена, если поле нельзя преобразовать в Long
* @param required Флаг обязательности поля
* @param <R> Класс проверяемого объекта
*/
public static <R> IsLongValueRule<R> instance(String fieldName,
Function<R, String> getter,
IErrorEnumId errorEmptyRequiredField,
IErrorEnumId errorWrongFieldValue,
boolean required) {
return new IsLongValueRule<>(fieldName, getter, errorEmptyRequiredField, errorWrongFieldValue, required);
}
/**
* @param fieldName Название поля класса, используется для передачи ошибки
* @param getter Метод получения проверяемого поля
* @param errorEmptyRequiredField Ошибка, которая будет возвращена, если поле пустое
* @param errorWrongFieldValue Ошибка, которая будет возвращена, если поле нельзя преобразовать в Long
* @param <R> Класс проверяемого объекта
*/
public static <R> IsLongValueRule<R> instance(String fieldName,
Function<R, String> getter,
IErrorEnumId errorEmptyRequiredField,
IErrorEnumId errorWrongFieldValue) {
return new IsLongValueRule<>(fieldName, getter, errorEmptyRequiredField, errorWrongFieldValue, true);
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
R validatedObject = context.getValidatedObject();
String longValueStr = getter.apply(validatedObject);
if (longValueStr == null) return required ? of(errorEmptyRequiredField, fieldName) : Optional.empty();
try {
Long longValue = Long.valueOf(longValueStr);
} catch (NumberFormatException e) {
return of(errorWrongFieldValue, fieldName);
}
return Optional.empty();
}
}