package tc.oc.pgm.filters.matcher.match; import java.util.Optional; import tc.oc.pgm.filters.matcher.TypedFilter; import tc.oc.pgm.filters.query.IMatchQuery; import tc.oc.pgm.flag.FlagDefinition; import tc.oc.pgm.flag.Post; import tc.oc.pgm.flag.state.State; public class FlagStateFilter extends TypedFilter.Impl<IMatchQuery> { private final @Inspect(brief=true) FlagDefinition flag; private final @Inspect(brief=true) Optional<Post> post; private final @Inspect Class<? extends State> state; public FlagStateFilter(FlagDefinition flag, Optional<Post> post, Class<? extends State> state) { this.flag = flag; this.post = post; this.state = state; } @Override public String inspectType() { return "FlagState"; } @Override public String toString() { return inspect(); } @Override public boolean isDynamic() { return true; } @Override public boolean matches(IMatchQuery query) { final State current = query.feature(flag).state(); return state.isInstance(current) && post.map(current::isAtPost).orElse(true); } }