From f334a31b101be4afe4eb4df5b9e036b390b85e23 Mon Sep 17 00:00:00 2001 From: akulikov Date: Tue, 4 Apr 2023 11:29:09 +0300 Subject: [PATCH] EndDtAfterStartDtRule --- .../common/rules/EndDtAfterStartDtRule.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/EndDtAfterStartDtRule.java diff --git a/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/EndDtAfterStartDtRule.java b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/EndDtAfterStartDtRule.java new file mode 100644 index 000000000..23095ca69 --- /dev/null +++ b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/EndDtAfterStartDtRule.java @@ -0,0 +1,86 @@ +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.IEnumId; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.time.LocalDate; +import java.util.Optional; +import java.util.function.Function; + +/** + * Проверка EndDt < StartDt + * @param Класс проверяемого объекта + */ +public record EndDtAfterStartDtRule( + String endDtFieldName, + String startDtFieldName, + Function getterEndDt, + Function getterStartDt, + IEnumId errorEmptyRequiredValue, + IEnumId errorEndDtAfterStartDt, + boolean required +) implements IValidationRule> { + + /** + * @param endDtFieldName Название поля класса, содержащий EndDt + * @param startDtFieldName Название поля класса, содержащий StartDt + * @param getterEndDt Метод получения проверяемой EndDt + * @param getterStartDt Метод получения проверяемой StartDt + * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если одна из дат пустая + * @param errorEndDtAfterStartDt Ошибка, которая будет возвращена, если EndDt > StartDt + * @param required Флаг обязательности поля + * @param Класс проверяемого объекта + */ + public static EndDtAfterStartDtRule instance(String endDtFieldName, + String startDtFieldName, + Function getterEndDt, + Function getterStartDt, + IEnumId errorEmptyRequiredValue, + IEnumId errorEndDtAfterStartDt, + boolean required) { + return new EndDtAfterStartDtRule<>(endDtFieldName, + startDtFieldName, + getterEndDt, + getterStartDt, + errorEmptyRequiredValue, + errorEndDtAfterStartDt, + required); + } + + /** + * @param endDtFieldName Название поля класса, содержащий EndDt + * @param startDtFieldName Название поля класса, содержащий StartDt + * @param getterEndDt Метод получения проверяемой EndDt + * @param getterStartDt Метод получения проверяемой StartDt + * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если одна из дат пустая + * @param errorEndDtAfterStartDt Ошибка, которая будет возвращена, если EndDt > StartDt + * @param Класс проверяемого объекта + */ + public static EndDtAfterStartDtRule instance(String endDtFieldName, + String startDtFieldName, + Function getterEndDt, + Function getterStartDt, + IEnumId errorEmptyRequiredValue, + IEnumId errorEndDtAfterStartDt) { + return new EndDtAfterStartDtRule<>(endDtFieldName, + startDtFieldName, + getterEndDt, + getterStartDt, + errorEmptyRequiredValue, + errorEndDtAfterStartDt, + true); + } + + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + LocalDate endDt = getterEndDt.apply(validatedObject); + LocalDate startDt = getterStartDt.apply(validatedObject); + if (endDt == null) return required ? of(errorEmptyRequiredValue, endDtFieldName) : Optional.empty(); + if (startDt == null) return required ? of(errorEmptyRequiredValue, startDtFieldName) : Optional.empty(); + if (endDt.isAfter(startDt)) return of(errorEndDtAfterStartDt); + return Optional.empty(); + } +}