Flink CEP library allows one to define event pattern to match where the match condition can be determined programmatically via the where method. Flink 1.3 will introduce so-called iterative conditions, which allow the predicate to look up events already matched by the pattern and thus be conditional on them.
1.3 also introduces to the API quantifer methods which allow one to declaratively specific how many times a condition must be matched before there is a state change.
Alas, there are use cases where the quantifier must be determined dynamically based on the events matched by the pattern so far. Therefore, I propose the adding of a new Pattern: until.
Like the new iterative variant of where, until would take a predicate function and a context that provides access to events already matched. But whereas where determines if an event is accepted by the pattern, until determines whether is pattern should move on to the next state.
In our particular use case, we have a pattern where an event is matched a number of times, but depending on the event type, the number (threshold) for the pattern to match is different. We could decompose the pattern into multiple similar patterns, but that could be inefficient if we have many such patterns. If the functionality of until were available, we could make do with a single pattern.