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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.