package org.molgenis.data.validation; import org.molgenis.data.AbstractRepositoryDecorator; import org.molgenis.data.Entity; import org.molgenis.data.Query; import org.molgenis.data.Repository; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; /** * Query validation decorator that validates {@link Query queries} based on the repository * {@link org.molgenis.data.meta.model.EntityType}. * * @param <E> entity type * @see <a href="https://github.com/molgenis/molgenis/issues/5248">https://github.com/molgenis/molgenis/issues/5248</a> */ public class QueryValidationRepositoryDecorator<E extends Entity> extends AbstractRepositoryDecorator<E> { private final Repository<E> decoratedRepo; private final QueryValidator queryValidator; public QueryValidationRepositoryDecorator(Repository<E> decoratedRepo, QueryValidator queryValidator) { this.decoratedRepo = requireNonNull(decoratedRepo); this.queryValidator = requireNonNull(queryValidator); } @Override protected Repository<E> delegate() { return decoratedRepo; } @Override public long count(Query<E> q) { queryValidator.validate(q, getEntityType()); return super.count(q); } @Override public Stream<E> findAll(Query<E> q) { queryValidator.validate(q, getEntityType()); return super.findAll(q); } @Override public E findOne(Query<E> q) { queryValidator.validate(q, getEntityType()); return super.findOne(q); } }