package tc.oc.pgm.filters.operator; import java.util.Arrays; import java.util.stream.Collectors; import java.util.stream.Stream; import tc.oc.commons.core.IterableUtils; import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.matcher.StaticFilter; import tc.oc.pgm.filters.query.IQuery; public class AnyFilter extends AggregateFilter { public AnyFilter(Iterable<? extends Filter> filters) { super(filters); } public AnyFilter(Filter... filters) { this(Arrays.asList(filters)); } @Override public QueryResponse query(IQuery query) { // returns true if any of the filters match QueryResponse response = QueryResponse.ABSTAIN; for(Filter filter : this.filters) { QueryResponse filterResponse = filter.query(query); if(filterResponse == QueryResponse.ALLOW) { return filterResponse; } else if (filterResponse == QueryResponse.DENY) { response = filterResponse; } } return response; } public static Filter of(Filter... filters) { return of(Arrays.asList(filters)); } public static Filter of(Iterable<? extends Filter> filters) { return IterableUtils.unify(filters, StaticFilter.DENY, AnyFilter::new); } public static Filter of(Stream<? extends Filter> filters) { return of(filters.collect(Collectors.toList())); } }