1+ package com .github .spriet2000 .vertx .handlers .core .http ;
2+
3+ import io .vertx .core .http .HttpServerRequest ;
4+
5+ import java .util .ArrayList ;
6+ import java .util .Collections ;
7+ import java .util .List ;
8+ import java .util .function .BiConsumer ;
9+ import java .util .function .BiFunction ;
10+ import java .util .stream .Collectors ;
11+
12+ public class ServerRequestHandlers <A > {
13+
14+ private List <BiFunction <BiConsumer <HttpServerRequest , Throwable >, BiConsumer <HttpServerRequest , A >, BiConsumer <HttpServerRequest , A >>> handlers = new ArrayList <>();
15+
16+ public ServerRequestHandlers () {
17+ }
18+
19+ @ SafeVarargs
20+ public ServerRequestHandlers (BiFunction <BiConsumer <HttpServerRequest , Throwable >, BiConsumer <HttpServerRequest , A >, BiConsumer <HttpServerRequest , A >>... handlers ) {
21+ Collections .addAll (this .handlers , handlers );
22+ }
23+
24+ @ SafeVarargs
25+ public ServerRequestHandlers (ServerRequestHandlers <A >... handlers ) {
26+ for (ServerRequestHandlers <A > handler : handlers ) {
27+ this .handlers .addAll (handler .handlers .stream ().collect (Collectors .toList ()));
28+ }
29+ }
30+
31+ @ SafeVarargs
32+ public static <A > ServerRequestHandlers <A > build (ServerRequestHandlers <A >... handlers ) {
33+ return new ServerRequestHandlers <>(handlers );
34+ }
35+
36+ @ SafeVarargs
37+ public static <A > ServerRequestHandlers <A > build (BiFunction <BiConsumer <HttpServerRequest , Throwable >, BiConsumer <HttpServerRequest , A >, BiConsumer <HttpServerRequest , A >>... handlers ) {
38+ return new ServerRequestHandlers <>(handlers );
39+ }
40+
41+ public BiConsumer <HttpServerRequest , A > apply (BiConsumer <HttpServerRequest , Throwable > exceptionHandler , BiConsumer <HttpServerRequest , A > successHandler ) {
42+ BiConsumer <HttpServerRequest , A > last = successHandler ;
43+ for (int i = handlers .size () - 1 ; i >= 0 ; i --) {
44+ final BiConsumer <HttpServerRequest , A > previous = last ;
45+ last = handlers .get (i ).apply (
46+ exceptionHandler ,
47+ previous );
48+ }
49+ return last ;
50+ }
51+
52+ @ SafeVarargs
53+ public final ServerRequestHandlers <A > andThen (BiConsumer <HttpServerRequest , A >... consumers ) {
54+ for (BiConsumer <HttpServerRequest , A > consumer : consumers ) {
55+ handlers .add ((f , n ) -> consumer );
56+ }
57+ return this ;
58+ }
59+
60+ @ SafeVarargs
61+ public final ServerRequestHandlers <A > andThen (BiFunction <BiConsumer <HttpServerRequest , Throwable >, BiConsumer <HttpServerRequest , A >, BiConsumer <HttpServerRequest , A >>... handlers ) {
62+ Collections .addAll (this .handlers , handlers );
63+ return this ;
64+ }
65+
66+ @ SafeVarargs
67+ public final ServerRequestHandlers <A > andThen (ServerRequestHandlers <A >... handlers ) {
68+ for (ServerRequestHandlers <A > handler : handlers ) {
69+ this .handlers .addAll (handler .handlers .stream ().collect (Collectors .toList ()));
70+ }
71+ return this ;
72+ }
73+ }
0 commit comments