---
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

Reply via email to