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)




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