package tc.oc.pgm.compose; import java.util.stream.Stream; import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.query.ITransientQuery; public class Maybe<T> extends CompositionImpl<T> { @Inspect private final Filter filter; @Inspect private final Composition<T> element; public Maybe(Filter filter, Composition<T> element) { this.filter = filter; this.element = element; } @Override public boolean isConstant() { return false; } @Override public Stream<T> dependencies() { return element.dependencies(); } @Override public Stream<T> elements(ITransientQuery query) { return filter.query(query).isAllowed() ? element.elements(query) : Stream.empty(); } }