--- Luca Burgazzoli
On Wed, Sep 7, 2016 at 8:00 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > On Wed, Sep 7, 2016 at 4:44 PM, Luca Burgazzoli <lburgazz...@gmail.com> wrote: >> Would it make sense to add also a ProcessClause (later on) to have >> something similar for process ? >> >> process() >> .exchange(e -> ...) // not needed but for consistency >> process() >> .message(m -> ...) >> process() >> .body(b -> ... ) // should return the body >> > > Yeah this allows to do inlined processors quickly. And sometimes you > just want to do a bit of code at that spot in the route. > > And even to do a system out println, and can't you do something like this now? > > .body(System.out::println) > Yep you''ll be able to do so > > >> >> --- >> Luca Burgazzoli >> >> >> On Wed, Sep 7, 2016 at 4:02 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: >>> On Wed, Sep 7, 2016 at 3:47 PM, Luca Burgazzoli <lburgazz...@gmail.com> >>> wrote: >>>> @Clauss >>>> >>>> - I've removed intermediate funtional interfaces like ExchangeFunction >>>> - added simple message(...) >>>> >>>> Result here: >>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-7831/examples/camel-example-dsl-java8/src/main/java/org/apache/camel/example/dsl/java8/MyRoute.java >>>> >>> >>> Yay looks much nicer and simpler. >>> >>>> @Vitalii >>>> It may be nice to support existing expressions, like: >>>> >>>> transform().body( >>>> String.class, >>>> String::indexOf, >>>> header("toFindHeader", String.class) >>>> ) >>>> >>>> Maybe this deserve an additional JIRA >>>> >>> >>> Yeah lets avoid making the first version too complex and to many bells >>> and whistles. >>> It just becomes too confusing with functional lambdas extreme here, >>> and then regular DSL with EIPs not as functional. >>> >>> >>> >>> >>>> >>>> --- >>>> Luca Burgazzoli >>>> >>>> >>>> On Wed, Sep 7, 2016 at 2:45 PM, Vitalii Tymchyshyn <v...@tym.im> wrote: >>>>> Sure, I really appreciate the effort, especially since I am now also >>>>> working on making Camel more J8-friendly (in the reactive programming >>>>> part). >>>>> Please don't forget ".mandatoryBody", it's extremely useful. It produces >>>>> much nicer exception instead of just NPE if your body is of wrong type or >>>>> null. I'd even vote for making .body(Class, Function) calling >>>>> mandatoryBody >>>>> on exchange, since .getBody(class) gives much confusion in error cases >>>>> when >>>>> body of a wrong type, but I am not sure if it would be consistent with >>>>> existing code. >>>>> Also talking about BiFunctions, consider passing not only map, but also >>>>> exact header or property as again it makes it very easy to use tons of >>>>> 2-parameter preexisting methods, may be even something like this can be >>>>> done: >>>>> transform().body(BiFunction).withHeader("headerName") >>>>> transform().body(BiFunction).withProperty("propertyName") >>>>> >>>>> that would make something like the next possible: >>>>> transform().body(String::indexOf).withHeader("toFindHeader") >>>>> >>>>> BTW: It would be great to have async versions, like .asyncBody(Class, >>>>> Function<Object, CompletableStage>) >>>>> >>>>> Best regards, Vitalii Tymchyshyn >>>>> >>>>> Ср, 7 вер. 2016 о 08:22 Luca Burgazzoli <lburgazz...@gmail.com> пише: >>>>> >>>>>> Vitalii, it was the first iteration just to have some feedbacks ;) >>>>>> >>>>>> I've added something more now as experiment so your suggestions should >>>>>> have been covered now. >>>>>> By extending ExpressionClause built-in body/inMessage/etc, we could >>>>>> have something like: >>>>>> >>>>>> from("timer:simple?period=503") >>>>>> .id("simple-route") >>>>>> .transform() >>>>>> .exchange(this::dateToTime) >>>>>> .choice() >>>>>> .when() >>>>>> .body(Integer.class, b -> (b & 1) == 0) >>>>>> .log("Received even number") >>>>>> .when() >>>>>> .body(Integer.class, (b, h) -> h.containsKey("skip") ? >>>>>> false : (b & 1) == 0) >>>>>> .log("Received odd number") >>>>>> .when() >>>>>> .body(b -> b instanceof Number) >>>>>> .log("Received a number number") >>>>>> .when() >>>>>> .inMessage(m -> m.getBody() == null) >>>>>> .log("Received null body") >>>>>> .when() >>>>>> .body(Integer.class, b -> (b & 1) == 0) >>>>>> .log("Received odd number") >>>>>> .endChoice(); >>>>>> >>>>>> >>>>>> >>>>>> --- >>>>>> Luca Burgazzoli >>>>>> >>>>>> >>>>>> On Wed, Sep 7, 2016 at 2:16 PM, Vitalii Tymchyshyn <v...@tym.im> wrote: >>>>>> > Hi. >>>>>> > >>>>>> > Why BodyFunction is a BiFunction? It would be great to have some method >>>>>> to >>>>>> > pass any Functional interface (any function) that would receive body as >>>>>> > parameter and result would be stored as an answer. This would allow to >>>>>> use >>>>>> > tons of existing functional method. >>>>>> > E.g. something like this would be possible: >>>>>> > .transform(function(String.class, String::toUpperCase)) >>>>>> > Another thing is that often body type is not needed, e.g. >>>>>> > .transform(onBody(String::toUpperCase)) looks more readable. >>>>>> > i'd also rename other "function" calls with something that gives more >>>>>> > information like "onExchange", "onMessage" (or even simply body(), >>>>>> > exchange(), message()). This would also make casting unnesessary. >>>>>> > >>>>>> > Best regards, Vitalii Tymchyshyn >>>>>> > >>>>>> > Вт, 6 вер. 2016 о 11:38 Luca Burgazzoli <lburgazz...@gmail.com> пише: >>>>>> > >>>>>> >> Hello everyone, >>>>>> >> I've started working on CAMEL-7831 to create a Java8 example to use >>>>>> >> Expressions and I've ended up with a simple example - see [1]. >>>>>> >> Of course it is only for demonstrative purpose. >>>>>> >> >>>>>> >> Java8 lambda support to Expressions has been added to >>>>>> >> - ExpressionClause to avoid adding overload method for every method >>>>>> >> accepting an Expressions definition >>>>>> >> - ExpressionBuilder so you can use something like transform(function(e >>>>>> -> >>>>>> >> ...)) >>>>>> >> >>>>>> >> There are some additional functional interfaces to select the argument >>>>>> >> of the lambda >>>>>> >> - ExchangeFunction >>>>>> >> - MessageFunction >>>>>> >> - BodyFunction >>>>>> >> >>>>>> >> >>>>>> >> Any feedback would be really appreciated. >>>>>> >> >>>>>> >> Regards, >>>>>> >> Luca >>>>>> >> >>>>>> >> >>>>>> >> [1] >>>>>> >> >>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-7831/examples/camel-example-dsl-java8/src/main/java/org/apache/camel/example/dsl/java8/MyRoute.java >>>>>> >> >>>>>> >> >>>>>> >> --- >>>>>> >> Luca Burgazzoli >>>>>> >> >>>>>> >>> >>> >>> >>> -- >>> Claus Ibsen >>> ----------------- >>> http://davsclaus.com @davsclaus >>> Camel in Action 2: https://www.manning.com/ibsen2 > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2