|
5 | 5 | */ |
6 | 6 | package io.jooby.internal; |
7 | 7 |
|
8 | | -import static io.jooby.ReactiveSupport.concurrent; |
9 | 8 | import static io.jooby.internal.handler.DefaultHandler.DEFAULT; |
10 | 9 | import static io.jooby.internal.handler.DetachHandler.DETACH; |
11 | | -import static io.jooby.internal.handler.SendDirect.DIRECT; |
12 | 10 | import static io.jooby.internal.handler.WorkerHandler.WORKER; |
13 | 11 |
|
14 | | -import java.lang.reflect.Type; |
15 | | -import java.util.Set; |
16 | | -import java.util.concurrent.CompletionStage; |
17 | 12 | import java.util.concurrent.Executor; |
18 | | -import java.util.concurrent.Flow; |
19 | 13 |
|
20 | | -import io.jooby.Context; |
21 | 14 | import io.jooby.ExecutionMode; |
22 | | -import io.jooby.Reified; |
23 | | -import io.jooby.ResultHandler; |
24 | 15 | import io.jooby.Route; |
25 | 16 | import io.jooby.Route.Handler; |
26 | 17 | import io.jooby.internal.handler.DispatchHandler; |
|
29 | 20 | public class Pipeline { |
30 | 21 |
|
31 | 22 | public static Handler build( |
32 | | - Route route, |
33 | | - ExecutionMode mode, |
34 | | - Executor executor, |
35 | | - ContextInitializer initializer, |
36 | | - Set<ResultHandler> responseHandler) { |
| 23 | + Route route, ExecutionMode mode, Executor executor, ContextInitializer initializer) { |
37 | 24 | // Set default wrapper and blocking mode |
38 | 25 | if (!route.isNonBlockingSet()) { |
39 | 26 | route.setNonBlocking(isDefaultNonblocking(executor, mode)); |
40 | 27 | } |
41 | 28 | Route.Filter wrapper = route.isNonBlocking() ? DETACH : DEFAULT; |
42 | 29 |
|
43 | | - /** Return type is set by annotation processor, or manually per lambda route: */ |
44 | | - Type returnType = route.getReturnType(); |
45 | | - if (returnType != null) { |
46 | | - Class<?> type = Reified.rawType(returnType); |
47 | | - /** Context: */ |
48 | | - if (Context.class.isAssignableFrom(type)) { |
49 | | - if (route.isNonBlocking()) { |
50 | | - wrapper = DETACH; |
51 | | - } else { |
52 | | - wrapper = DIRECT; |
53 | | - } |
54 | | - } else if (CompletionStage.class.isAssignableFrom(type) |
55 | | - || Flow.Publisher.class.isAssignableFrom(type)) { |
56 | | - /** Completable future: */ |
57 | | - Route.Filter concurrent = concurrent(); |
58 | | - // Notify there is a route: |
59 | | - concurrent.setRoute(route); |
60 | | - wrapper = DETACH.then(concurrent); |
61 | | - } else { |
62 | | - /** Custom responses: */ |
63 | | - for (ResultHandler factory : responseHandler) { |
64 | | - if (factory.matches(returnType)) { |
65 | | - Route.Filter custom = factory.create(); |
66 | | - // Notify there is a route: |
67 | | - custom.setRoute(route); |
68 | | - if (factory.isReactive()) { |
69 | | - // Mark route as reactive |
70 | | - wrapper = DETACH.then(custom); |
71 | | - } else { |
72 | | - wrapper = custom; |
73 | | - } |
74 | | - break; |
75 | | - } |
76 | | - } |
77 | | - } |
78 | | - } |
79 | 30 | // Non-Blocking? Split pipeline Head+Handler let reactive call After pipeline |
80 | 31 | Handler pipeline; |
81 | 32 | if (route.isNonBlocking()) { |
|
0 commit comments