package tc.oc.pgm.filters.operator; import java.util.stream.Stream; import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.FilterTypeException; import tc.oc.pgm.filters.query.IQuery; import static com.google.common.base.Preconditions.checkNotNull; /** * A filter that forwards queries to a single child filter, and transforms the response in some way. * * @see MultiFilterFunction which operates on multiple child filters * @see TransformedFilter which transforms the query, rather than the response */ public abstract class SingleFilterFunction extends Filter.Impl { protected final @Inspect Filter filter; public SingleFilterFunction(Filter filter) { this.filter = checkNotNull(filter, "filter may not be null"); } @Override public Stream<? extends Filter> dependencies() { return Stream.of(filter); } @Override public boolean respondsTo(Class<? extends IQuery> queryType) { return filter.respondsTo(queryType); } @Override public void assertRespondsTo(Class<? extends IQuery> queryType) throws FilterTypeException { filter.assertRespondsTo(queryType); } @Override public boolean isDynamic() { return true; } @Override public String toString() { return inspect(); } }