package org.molgenis.data.validation.meta; import org.molgenis.data.AbstractRepositoryDecorator; import org.molgenis.data.Repository; import org.molgenis.data.meta.model.Tag; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; /** * Validates {@link Tag tags} before adding or updating the delegated repository */ public class TagRepositoryValidationDecorator extends AbstractRepositoryDecorator<Tag> { private final Repository<Tag> decoratedRepo; private final TagValidator tagValidator; public TagRepositoryValidationDecorator(Repository<Tag> decoratedRepo, TagValidator tagValidator) { this.decoratedRepo = requireNonNull(decoratedRepo); this.tagValidator = requireNonNull(tagValidator); } @Override protected Repository<Tag> delegate() { return decoratedRepo; } @Override public void update(Tag tag) { tagValidator.validate(tag); super.update(tag); } @Override public void add(Tag tag) { tagValidator.validate(tag); super.add(tag); } @Override public Integer add(Stream<Tag> tagStream) { return decoratedRepo.add(tagStream.filter(tag -> { tagValidator.validate(tag); return true; })); } @Override public void update(Stream<Tag> tagStream) { decoratedRepo.update(tagStream.filter(entityType -> { tagValidator.validate(entityType); return true; })); } }