package org.molgenis.data.validation.meta; import org.molgenis.data.AbstractRepositoryDecorator; import org.molgenis.data.Repository; import org.molgenis.data.meta.model.EntityType; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; /** * Validates entity meta before adding or updating the delegated repository */ public class EntityTypeRepositoryValidationDecorator extends AbstractRepositoryDecorator<EntityType> { private final Repository<EntityType> decoratedRepo; private final EntityTypeValidator entityTypeValidator; public EntityTypeRepositoryValidationDecorator(Repository<EntityType> decoratedRepo, EntityTypeValidator entityTypeValidator) { this.decoratedRepo = requireNonNull(decoratedRepo); this.entityTypeValidator = requireNonNull(entityTypeValidator); } @Override public Repository<EntityType> delegate() { return decoratedRepo; } @Override public void update(EntityType entityType) { entityTypeValidator.validate(entityType); decoratedRepo.update(entityType); } @Override public void update(Stream<EntityType> entities) { decoratedRepo.update(entities.filter(entityType -> { entityTypeValidator.validate(entityType); return true; })); } @Override public void add(EntityType entityType) { entityTypeValidator.validate(entityType); decoratedRepo.add(entityType); } @Override public Integer add(Stream<EntityType> entities) { return decoratedRepo.add(entities.filter(entityType -> { entityTypeValidator.validate(entityType); return true; })); } }