10
10
import java .util .List ;
11
11
import java .util .Objects ;
12
12
import java .util .Optional ;
13
+ import java .util .function .Function ;
13
14
14
15
public class NewSessionPipeline {
15
16
16
17
private final List <SessionFactory > factories ;
17
18
private final SessionFactory fallback ;
19
+ private final List <Function <ImmutableCapabilities , ImmutableCapabilities >> mutators ;
18
20
19
- private NewSessionPipeline (List <SessionFactory > factories , SessionFactory fallback ) {
21
+ private NewSessionPipeline (
22
+ List <SessionFactory > factories ,
23
+ SessionFactory fallback ,
24
+ List <Function <ImmutableCapabilities , ImmutableCapabilities >> mutators ) {
20
25
this .factories = factories ;
21
26
this .fallback = fallback ;
27
+ this .mutators = mutators ;
22
28
}
23
29
24
30
public static Builder builder () {
@@ -27,6 +33,12 @@ public static Builder builder() {
27
33
28
34
public ActiveSession createNewSession (NewSessionPayload payload ) throws IOException {
29
35
return payload .stream ()
36
+ .map (caps -> {
37
+ for (Function <ImmutableCapabilities , ImmutableCapabilities > mutator : mutators ) {
38
+ caps = mutator .apply (caps );
39
+ }
40
+ return caps ;
41
+ })
30
42
.map (caps -> factories .stream ()
31
43
.map (factory -> factory .apply (payload .getDownstreamDialects (), caps ))
32
44
.filter (Optional ::isPresent )
@@ -45,26 +57,30 @@ public ActiveSession createNewSession(NewSessionPayload payload) throws IOExcept
45
57
public static class Builder {
46
58
private List <SessionFactory > factories = new LinkedList <>();
47
59
private SessionFactory fallback = (dialects , caps ) -> Optional .empty ();
60
+ private List <Function <ImmutableCapabilities , ImmutableCapabilities >> mutators = new LinkedList <>();
48
61
49
62
private Builder () {
50
63
// Private class
51
64
}
52
65
53
66
public Builder add (SessionFactory factory ) {
54
67
factories .add (Objects .requireNonNull (factory , "Factory must not be null" ));
55
- // for (SessionFactory fac : more) {
56
- // factories.add(Objects.requireNonNull(fac, "Factory must not be null"));
57
- // }
58
68
return this ;
59
69
}
60
70
61
71
public Builder fallback (SessionFactory factory ) {
62
- fallback = factory ;
72
+ fallback = Objects .requireNonNull (factory , "Fallback must not be null" );
73
+ return this ;
74
+ }
75
+
76
+ public Builder addCapabilitiesMutator (
77
+ Function <ImmutableCapabilities , ImmutableCapabilities > mutator ) {
78
+ mutators .add (Objects .requireNonNull (mutator , "Mutator must not be null" ));
63
79
return this ;
64
80
}
65
81
66
82
public NewSessionPipeline create () {
67
- return new NewSessionPipeline (ImmutableList .copyOf (factories ), fallback );
83
+ return new NewSessionPipeline (ImmutableList .copyOf (factories ), fallback , mutators );
68
84
}
69
85
}
70
86
}
0 commit comments