Lance, I've been translating your autoRefresh method into Java. 

Kill. Me. Now.

You wrote this:

val auto = Sink(
      Flow[(RefreshToken, Promise[AccessToken])],
      Merge[(RefreshToken, Promise[AccessToken])](2), 
      request, 
      Unzip[RefreshToken, Promise[AccessToken]],
      Zip[Future[RefreshResponse], Promise[AccessToken]],
      Broadcast[(RefreshResponse, Promise[AccessToken])](3)
    )((mat, _, _, _, _, _) => mat) {
      implicit b => (initial, merge, request, unzip, zip, bcast) =>
            ...
    }

>
>
 ... which translates into Java 7 like this:

Sink<Pair<RefreshToken, F.Promise<OAuth2Info>>, BoxedUnit> auto = 
>     Sink.factory().create6(
>         Flow.<Pair<RefreshToken, F.Promise<OAuth2Info>>>create(),
>         Merge.<Pair<RefreshToken, F.Promise<OAuth2Info>>>create(2),
>         request,
>         Unzip.<RefreshToken, F.Promise<OAuth2Info>>create(),
>         Zip.<Future<RefreshResponse>, F.Promise<OAuth2Info>>create(),
>         Broadcast.<Pair<RefreshResponse, F.Promise<OAuth2Info>>>create(3),
>         new Function6<BoxedUnit, BoxedUnit, BoxedUnit, BoxedUnit, 
> BoxedUnit, BoxedUnit, BoxedUnit>() {
>             @Override
>             public BoxedUnit apply(BoxedUnit m1, BoxedUnit m2, BoxedUnit 
> m3, BoxedUnit m4, BoxedUnit m5, BoxedUnit m6) {
>                 return m1;
>             }
>         },
>         new Function7<FlowGraph.Builder<BoxedUnit>,
>             FlowShape<Pair<RefreshToken, F.Promise<OAuth2Info>>, Pair<
> RefreshToken, F.Promise<OAuth2Info>>>,
>             UniformFanInShape<Pair<RefreshToken, F.Promise<OAuth2Info>>, 
> Pair<RefreshToken, F.Promise<OAuth2Info>>>,
>             FlowShape<RefreshToken, F.Promise<RefreshResponse>>,
>             FanOutShape2<Pair<RefreshToken, F.Promise<OAuth2Info>>, 
> RefreshToken, F.Promise<OAuth2Info>>,
>             FanInShape2<Future<RefreshResponse>, F.Promise<OAuth2Info>, 
> Pair<Future<RefreshResponse>, F.Promise<OAuth2Info>>>,
>             UniformFanOutShape<Pair<RefreshResponse, F.Promise<OAuth2Info
> >>, Pair<RefreshResponse, F.Promise<OAuth2Info>>>,
>             Inlet<Pair<RefreshToken, F.Promise<OAuth2Info>>>>() {
>                 @Override
>                 public Inlet<Pair<RefreshToken, F.Promise<OAuth2Info>>> 
> apply(
>                     FlowGraph.Builder<BoxedUnit> builder,
>                     FlowShape<Pair<RefreshToken, F.Promise<OAuth2Info>>, 
> Pair<RefreshToken, F.Promise<OAuth2Info>>> initial,
>                     UniformFanInShape<Pair<RefreshToken, F.Promise<
> OAuth2Info>>, Pair<RefreshToken, F.Promise<OAuth2Info>>> merge,
>                     FlowShape<RefreshToken, F.Promise<RefreshResponse>> 
> request,
>                     FanOutShape2<Pair<RefreshToken, F.Promise<OAuth2Info
> >>, RefreshToken, F.Promise<OAuth2Info>> unzip,
>                     FanInShape2<Future<RefreshResponse>, F.Promise<
> OAuth2Info>, Pair<Future<RefreshResponse>, F.Promise<OAuth2Info>>> zip,
>                     UniformFanOutShape<Pair<RefreshResponse, F.Promise<
> OAuth2Info>>, Pair<RefreshResponse, F.Promise<OAuth2Info>>> broadcast) {  
>     ...
> }
>
>

Without type inferencing, the whole thing is hideous. No reflection at all 
on your solution, which is elegant.
I'm going to sleep on it, but I figure I might have to implement the Agent 
creation in a way that does not involve streams. Nevertheless, your idea of 
using an Agent around a Future is still in my plans.

>

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to