EnumPresentRule validator (commit for test)
This commit is contained in:
parent
0b1cc5639e
commit
58d0e9655d
3 changed files with 132 additions and 0 deletions
|
|
@ -0,0 +1,63 @@
|
|||
package ru.spcex.clearing.scheduler.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
import ru.clearing.classes.statics.data.account.AccountBalance;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.platform.dictionary.TaskDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerNewRequest;
|
||||
import ru.spcex.clearing.scheduler.validation.rules.EnumPresentRule;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
@Configuration
|
||||
public class ValidationConfig {
|
||||
private final Map<String, Imdg<? extends SpcexObjectBase>> imdgs;
|
||||
|
||||
public ValidationConfig(ImdgProvider imdgProvider) {
|
||||
this.imdgs = new HashMap<>();
|
||||
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdgs.put(s, imdgProvider.getImdg(s, aClass));
|
||||
addImdg.accept(IMDGDistributedNames.Map_Account, Account.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* чтобы во всех валидаторах был один экземпляр Imdg
|
||||
*/
|
||||
private Imdg<?> getImdg(String key) {
|
||||
return imdgs.get(key);
|
||||
}
|
||||
|
||||
@Bean("plannerNewRequestValidator")
|
||||
public Function<PlannerNewRequest, IValidator> plannerNewRequestValidator() {
|
||||
return plannerNewRequest -> {
|
||||
ImdgValidationContext<PlannerNewRequest> context = new ImdgValidationContext<>();
|
||||
context.setValidatedObject(plannerNewRequest);
|
||||
Consumer<String> addImdg = (s) -> context.addImdg(s, getImdg(s));
|
||||
addImdg.accept(IMDGDistributedNames.Map_TaskDictionary);
|
||||
addImdg.accept(IMDGDistributedNames.Map_TaskStatusDictionary);
|
||||
return new ValidatorImpl<>(context,
|
||||
EnumPresentRule.instance("task",
|
||||
PlannerNewRequest::getTask,
|
||||
IMDGDistributedNames.Map_TaskDictionary,
|
||||
TaskDictionary.class)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package ru.spcex.clearing.scheduler.error;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IEnumId;
|
||||
|
||||
public enum Errors implements IEnumId {
|
||||
WrongFieldValue(10003L)
|
||||
|
||||
;
|
||||
|
||||
private final Long id;
|
||||
|
||||
Errors(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package ru.spcex.clearing.scheduler.validation.rules;
|
||||
|
||||
import ru.spcex.clearing.scheduler.error.Errors;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class EnumPresentRule<T, D extends SpcexObjectBase> implements IValidationRule<ImdgValidationContext<T>> {
|
||||
protected final Function<T, String> getEnumCode;
|
||||
protected final String dictionaryName;
|
||||
protected final String fieldName;
|
||||
protected final Class<D> enumClass;
|
||||
|
||||
public EnumPresentRule(String fieldName, Function<T, String> getEnumCode, String dictionaryName, Class<D> enumClass) {
|
||||
this.fieldName = fieldName;
|
||||
this.getEnumCode = getEnumCode;
|
||||
this.dictionaryName = dictionaryName;
|
||||
this.enumClass = enumClass;
|
||||
}
|
||||
|
||||
public static <T1, D1 extends SpcexObjectBase> EnumPresentRule<T1, D1> instance(String fieldName,
|
||||
Function<T1, String> getEnumCode,
|
||||
String dictionaryName,
|
||||
Class<D1> enumClass) {
|
||||
return new EnumPresentRule<>(fieldName, getEnumCode, dictionaryName, enumClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<T> context) {
|
||||
T validatedObject = context.getValidatedObject();
|
||||
String enumCode = getEnumCode.apply(validatedObject);
|
||||
Imdg<D> dictImdg = context.obtainMap(
|
||||
dictionaryName,
|
||||
enumClass
|
||||
);
|
||||
D taskFromMap = dictImdg.getSingleObjectByFieldValues(Map.of("code", enumCode));
|
||||
if (taskFromMap == null) {
|
||||
return of(Errors.WrongFieldValue, fieldName);
|
||||
}
|
||||
return empty();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue