package eu.eudat.model.persist.dmpblueprintdefinition; import eu.eudat.commons.enums.DmpBlueprintFieldCategory; import eu.eudat.commons.validation.BaseValidator; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Scope; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; import java.util.UUID; public class SectionPersist { private UUID id = null; public static final String _id = "id"; private String description; private String label = null; public static final String _label = "label"; private Integer ordinal = null; public static final String _ordinal = "ordinal"; private Boolean hasTemplates = null; public static final String _hasTemplates = "hasTemplates"; private List fields = null; public static final String _fields = "fields"; private List descriptionTemplates = null; public static final String _descriptionTemplates = "descriptionTemplates"; public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Integer getOrdinal() { return ordinal; } public void setOrdinal(Integer ordinal) { this.ordinal = ordinal; } public Boolean getHasTemplates() { return hasTemplates; } public void setHasTemplates(Boolean hasTemplates) { this.hasTemplates = hasTemplates; } public List getFields() { return fields; } public void setFields(List fields) { this.fields = fields; } public List getDescriptionTemplates() { return descriptionTemplates; } public void setDescriptionTemplates(List descriptionTemplates) { this.descriptionTemplates = descriptionTemplates; } @Component(SectionPersistValidator.ValidatorName) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public static class SectionPersistValidator extends BaseValidator { public static final String ValidatorName = "DmpBlueprint.SectionPersistValidator"; private final MessageSource messageSource; private final ValidatorFactory validatorFactory; protected SectionPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource, ValidatorFactory validatorFactory) { super(conventionService, errors); this.messageSource = messageSource; this.validatorFactory = validatorFactory; } @Override protected Class modelClass() { return SectionPersist.class; } @Override protected List specifications(SectionPersist item) { return Arrays.asList( this.spec() .must(() -> this.isValidGuid(item.getId())) .failOn(SectionPersist._id).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._id}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isEmpty(item.getLabel())) .failOn(SectionPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._label}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isNull(item.getOrdinal())) .failOn(SectionPersist._ordinal).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._ordinal}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isNull(item.getHasTemplates())) .failOn(SectionPersist._hasTemplates).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._hasTemplates}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isListNullOrEmpty(item.getFields())) .failOn(SectionPersist._fields).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._fields}, LocaleContextHolder.getLocale())), this.navSpec() .iff(() -> !this.isListNullOrEmpty(item.getFields())) .on(SectionPersist._fields) .over(item.getFields()) .using((itm) -> ((FieldPersist) itm).getCategory() == DmpBlueprintFieldCategory.Extra ? this.validatorFactory.validator(ExtraFieldPersist.ExtraFieldPersistValidator.class) : this.validatorFactory.validator(SystemFieldPersist.SystemFieldPersistValidator.class)), this.navSpec() .iff(() -> !this.isListNullOrEmpty(item.getDescriptionTemplates())) .on(SectionPersist._descriptionTemplates) .over(item.getDescriptionTemplates()) .using((itm) -> this.validatorFactory.validator(DescriptionTemplatePersist.DescriptionTemplatePersistValidator.class)) ); } } }