diff --git a/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/IsLongValueRule.java b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/IsLongValueRule.java new file mode 100644 index 000000000..a5dcdd328 --- /dev/null +++ b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/IsLongValueRule.java @@ -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 Класс проверяемого объекта + */ +public record IsLongValueRule( + String fieldName, + Function getter, + IErrorEnumId errorEmptyRequiredField, + IErrorEnumId errorWrongFieldValue, + boolean required +) implements IValidationRule> { + + /** + * @param fieldName Название поля класса, используется для передачи ошибки + * @param getter Метод получения проверяемого поля + * @param errorEmptyRequiredField Ошибка, которая будет возвращена, если поле пустое + * @param errorWrongFieldValue Ошибка, которая будет возвращена, если поле нельзя преобразовать в Long + * @param required Флаг обязательности поля + * @param Класс проверяемого объекта + */ + public static IsLongValueRule instance(String fieldName, + Function 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 Класс проверяемого объекта + */ + public static IsLongValueRule instance(String fieldName, + Function getter, + IErrorEnumId errorEmptyRequiredField, + IErrorEnumId errorWrongFieldValue) { + return new IsLongValueRule<>(fieldName, getter, errorEmptyRequiredField, errorWrongFieldValue, true); + } + + @Override + public Optional validate(ImdgValidationContext 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(); + } +}