package org.molgenis.data.validation.meta; import org.molgenis.data.AbstractRepositoryDecorator; import org.molgenis.data.Repository; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.validation.meta.AttributeValidator.ValidationMode; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; public class AttributeRepositoryValidationDecorator extends AbstractRepositoryDecorator<Attribute> { private final Repository<Attribute> decoratedRepo; private final AttributeValidator attributeValidator; public AttributeRepositoryValidationDecorator(Repository<Attribute> decoratedRepo, AttributeValidator attributeValidator) { this.decoratedRepo = requireNonNull(decoratedRepo); this.attributeValidator = requireNonNull(attributeValidator); } @Override protected Repository<Attribute> delegate() { return decoratedRepo; } @Override public void update(Attribute attr) { attributeValidator.validate(attr, ValidationMode.UPDATE); decoratedRepo.update(attr); } @Override public void update(Stream<Attribute> attrs) { decoratedRepo.update(attrs.filter(attr -> { attributeValidator.validate(attr, ValidationMode.UPDATE); return true; })); } @Override public void add(Attribute attr) { attributeValidator.validate(attr, ValidationMode.ADD); decoratedRepo.add(attr); } @Override public Integer add(Stream<Attribute> attrs) { return decoratedRepo.add(attrs.filter(attr -> { attributeValidator.validate(attr, ValidationMode.ADD); return true; })); } }