128 lines
4.8 KiB
Java
128 lines
4.8 KiB
Java
package eu.eudat.model.persist.descriptionproperties;
|
|
|
|
import eu.eudat.commons.enums.DescriptionStatus;
|
|
import eu.eudat.commons.types.descriptiontemplate.FieldEntity;
|
|
import eu.eudat.commons.types.descriptiontemplate.FieldSetEntity;
|
|
import eu.eudat.commons.types.descriptiontemplate.RuleEntity;
|
|
import eu.eudat.commons.validation.BaseValidator;
|
|
import eu.eudat.convention.ConventionService;
|
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
|
import eu.eudat.model.persist.DescriptionPersist;
|
|
import gr.cite.tools.validation.ValidatorFactory;
|
|
import gr.cite.tools.validation.specification.Specification;
|
|
import org.springframework.context.MessageSource;
|
|
import org.springframework.context.i18n.LocaleContextHolder;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class PropertyDefinitionFieldSetItemPersist {
|
|
|
|
public final static String _fields = "fields";
|
|
private Map<String, FieldPersist> fields;
|
|
|
|
public final static String _comment = "comment";
|
|
private String comment;
|
|
|
|
public final static String _ordinal = "ordinal";
|
|
private Integer ordinal = null;
|
|
|
|
public Map<String, FieldPersist> getFields() {
|
|
return fields;
|
|
}
|
|
|
|
public void setFields(Map<String, FieldPersist> fields) {
|
|
this.fields = fields;
|
|
}
|
|
|
|
public String getComment() {
|
|
return comment;
|
|
}
|
|
|
|
public void setComment(String comment) {
|
|
this.comment = comment;
|
|
}
|
|
|
|
public Integer getOrdinal() {
|
|
return ordinal;
|
|
}
|
|
|
|
public void setOrdinal(Integer ordinal) {
|
|
this.ordinal = ordinal;
|
|
}
|
|
|
|
@Component(PersistValidator.ValidatorName)
|
|
public static class PersistValidator extends BaseValidator<PropertyDefinitionFieldSetItemPersist> {
|
|
|
|
public static final String ValidatorName = "Description.PropertyDefinitionFieldSetItemPersistValidator";
|
|
private final ValidatorFactory validatorFactory;
|
|
|
|
private final MessageSource messageSource;
|
|
private FieldSetEntity fieldSetEntity;
|
|
private List<List<RuleEntity>> rules;
|
|
private DescriptionStatus status;
|
|
protected PersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory, MessageSource messageSource) {
|
|
super(conventionService, errors);
|
|
this.validatorFactory = validatorFactory;
|
|
this.messageSource = messageSource;
|
|
}
|
|
|
|
@Override
|
|
protected Class<PropertyDefinitionFieldSetItemPersist> modelClass() {
|
|
return PropertyDefinitionFieldSetItemPersist.class;
|
|
}
|
|
|
|
@Override
|
|
protected List<Specification> specifications(PropertyDefinitionFieldSetItemPersist item) {
|
|
return Arrays.asList(
|
|
this.spec()
|
|
.must(() -> !this.isNull(item.getOrdinal()))
|
|
.failOn(PropertyDefinitionFieldSetItemPersist._ordinal).failWith(messageSource.getMessage("Validation_Required", new Object[]{PropertyDefinitionFieldSetItemPersist._ordinal}, LocaleContextHolder.getLocale())),
|
|
this.mapSpec()
|
|
.iff(() -> !this.isNull(item.getFields()))
|
|
.on(PropertyDefinitionFieldSetItemPersist._fields)
|
|
.over(item.getFields())
|
|
.mapKey((k) -> ((String)k))
|
|
.using((itm) ->
|
|
{
|
|
FieldEntity fieldEntity = fieldSetEntity != null ? fieldSetEntity.getFieldById((String)itm.getKey()).stream().findFirst().orElse(null) : null;
|
|
return this.validatorFactory.validator(FieldPersist.PersistValidator.class).withFieldEntity(fieldEntity).withRules(rules).ifFieldSetIsRuleTarget(this.checkIfFieldSetIsRuleTarget()).setStatus(this.status);
|
|
})
|
|
|
|
);
|
|
}
|
|
|
|
public PersistValidator withFieldSetEntity(FieldSetEntity fieldSetEntity) {
|
|
this.fieldSetEntity = fieldSetEntity;
|
|
return this;
|
|
}
|
|
|
|
public PersistValidator withRules(List<List<RuleEntity>> rules) {
|
|
this.rules = rules;
|
|
return this;
|
|
}
|
|
|
|
public PersistValidator setStatus(DescriptionStatus status) {
|
|
this.status = status;
|
|
return this;
|
|
}
|
|
|
|
private Boolean checkIfFieldSetIsRuleTarget(){
|
|
if (this.isListNullOrEmpty(rules)) return false;
|
|
for (List<RuleEntity> rulesBySection: rules) {
|
|
if (!this.isListNullOrEmpty(rulesBySection)){
|
|
for (RuleEntity rule :rulesBySection) {
|
|
if (rule.getTarget().equals(this.fieldSetEntity.getId())) return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|