package eu.eudat.model.persist.descriptionproperties; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.commons.types.descriptiontemplate.FieldSetEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; 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; public class PropertyDefinitionFieldSetPersist { public final static String _items = "items"; private List items; public List getItems() { return items; } public void setItems(List items) { this.items = items; } @Component(PersistValidator.ValidatorName) public static class PersistValidator extends BaseValidator { public static final String ValidatorName = "Description.PropertyDefinitionFieldSetPersistValidator"; private final ValidatorFactory validatorFactory; private final MessageSource messageSource; private FieldSetEntity fieldSetEntity; private DescriptionStatus status; protected PersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory, MessageSource messageSource, MessageSource messageSource1) { super(conventionService, errors); this.validatorFactory = validatorFactory; this.messageSource = messageSource1; } @Override protected Class modelClass() { return PropertyDefinitionFieldSetPersist.class; } @Override protected List specifications(PropertyDefinitionFieldSetPersist item) { Integer min = fieldSetEntity != null && fieldSetEntity.getMultiplicity() != null ? fieldSetEntity.getMultiplicity().getMin() : null; Integer max = fieldSetEntity != null && fieldSetEntity.getMultiplicity() != null ? fieldSetEntity.getMultiplicity().getMax() : null; return Arrays.asList( this.navSpec() .iff(() -> !this.isNull(item.getItems())) .on(PropertyDefinitionFieldSetPersist._items) .over(item.getItems()) .using((itm) -> this.validatorFactory.validator(PropertyDefinitionFieldSetItemPersist.PersistValidator.class).withFieldSetEntity(this.fieldSetEntity).setStatus(this.status)), this.spec() .iff(() -> DescriptionStatus.Finalized.equals(this.status) && min != null) .must(() -> !this.isNull(item.getItems()) && min >= item.getItems().size()) .failOn(PropertyDefinitionFieldSetPersist._items).failWith(messageSource.getMessage("Validation.LargerThenEqual", new Object[]{PropertyDefinitionFieldSetPersist._items, min}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> DescriptionStatus.Finalized.equals(this.status) && max != null) .must(() -> !this.isNull(item.getItems()) && max <= item.getItems().size()) .failOn(PropertyDefinitionFieldSetPersist._items).failWith(messageSource.getMessage("Validation.LessThenEqual", new Object[]{PropertyDefinitionFieldSetPersist._items, max}, LocaleContextHolder.getLocale())) ); } public PersistValidator withFieldSetEntity(FieldSetEntity fieldSetEntity) { this.fieldSetEntity = fieldSetEntity; return this; } public PropertyDefinitionFieldSetPersist.PersistValidator setStatus(DescriptionStatus status) { this.status = status; return this; } } }