[ https://issues.apache.org/jira/browse/FLINK-3414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16062863#comment-16062863 ]
Dawid Wysakowicz commented on FLINK-3414: ----------------------------------------- Hi [~kkl0u], [~dian.fu] As there is ongoing work to introduce GroupPatterns( [FLINK-6927] ) and branching patterns ( [FLINK-4641] ) I would like to start a discussion about reworking our Pattern API as a better hierarchical API would help in the implementation. I feel there is couple of problems with current API: # there is lots of places where we throw {{MalformedPatternException}}, it would be better to restrict illegal patterns in API rather than throw exceptions in runtime # API does not corresponds well to hierarchy of groups and branches # it is hard to provide a good intuitive Scala dsl In my branch [cep-api-rebuilt| https://github.com/dawidwys/flink/tree/cep-api-rebuilt ] in {{flink-cep-scala}} in package {{org.apache.flink.cep.scala.pattern.proto}} I created a proposal for a new API written in Scala(better type support I think). For this API to work we would need to port {{NFACompiler.java}} into the new API, which I think should be done also in Scala, what would allow us to better leverage scala type support by pattern matching. As the current API is not annotated as Public, I feel there is no that much of a problem with breaking API compatibility. I would love to hear your opinions. > Add Scala API for CEP's pattern definition > ------------------------------------------ > > Key: FLINK-3414 > URL: https://issues.apache.org/jira/browse/FLINK-3414 > Project: Flink > Issue Type: Improvement > Components: CEP > Affects Versions: 1.0.0 > Reporter: Till Rohrmann > Assignee: Dawid Wysakowicz > Priority: Minor > > Currently, the CEP library only supports a Java API to specify complex event > patterns. In order to make it a bit less verbose for Scala users, it would be > nice to also add a Scala API for the CEP library. > A Scala API would also allow to pass Scala's anonymous functions as filter > conditions or as a select function, for example, or to use partial functions > to distinguish between different events. > Furthermore, the Scala API could be designed to feel a bit more like a DSL: > {code} > begin "start" where _.id >= 42 -> "middle_1" as classOf[Subclass] || > "middle_2" where _.name equals "foobar" -> "end" where x => x.id <= x.volume > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)