forked from graphql-java-kickstart/graphql-java-servlet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGraphQLQueryInvoker.java
100 lines (84 loc) · 3.63 KB
/
GraphQLQueryInvoker.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package graphql.kickstart.execution;
import graphql.execution.instrumentation.ChainedInstrumentation;
import graphql.execution.instrumentation.Instrumentation;
import graphql.execution.instrumentation.SimplePerformantInstrumentation;
import graphql.execution.preparsed.NoOpPreparsedDocumentProvider;
import graphql.execution.preparsed.PreparsedDocumentProvider;
import graphql.kickstart.execution.config.DefaultExecutionStrategyProvider;
import graphql.kickstart.execution.config.ExecutionStrategyProvider;
import graphql.kickstart.execution.config.GraphQLBuilder;
import java.util.List;
import java.util.function.Supplier;
/**
* @author Andrew Potter
*/
public class GraphQLQueryInvoker {
private final Supplier<ExecutionStrategyProvider> getExecutionStrategyProvider;
private final Supplier<Instrumentation> getInstrumentation;
private final Supplier<PreparsedDocumentProvider> getPreparsedDocumentProvider;
protected GraphQLQueryInvoker(
Supplier<ExecutionStrategyProvider> getExecutionStrategyProvider,
Supplier<Instrumentation> getInstrumentation,
Supplier<PreparsedDocumentProvider> getPreparsedDocumentProvider) {
this.getExecutionStrategyProvider = getExecutionStrategyProvider;
this.getInstrumentation = getInstrumentation;
this.getPreparsedDocumentProvider = getPreparsedDocumentProvider;
}
public static Builder newBuilder() {
return new Builder();
}
public GraphQLInvoker toGraphQLInvoker() {
GraphQLBuilder graphQLBuilder =
new GraphQLBuilder()
.executionStrategyProvider(getExecutionStrategyProvider)
.instrumentation(getInstrumentation)
.preparsedDocumentProvider(getPreparsedDocumentProvider);
return new GraphQLInvoker(graphQLBuilder, new BatchedDataLoaderGraphQLBuilder());
}
public static class Builder {
private Supplier<ExecutionStrategyProvider> getExecutionStrategyProvider =
DefaultExecutionStrategyProvider::new;
private Supplier<Instrumentation> getInstrumentation =
() -> SimplePerformantInstrumentation.INSTANCE;
private Supplier<PreparsedDocumentProvider> getPreparsedDocumentProvider =
() -> NoOpPreparsedDocumentProvider.INSTANCE;
public Builder withExecutionStrategyProvider(ExecutionStrategyProvider provider) {
return withExecutionStrategyProvider(() -> provider);
}
public Builder withExecutionStrategyProvider(Supplier<ExecutionStrategyProvider> supplier) {
this.getExecutionStrategyProvider = supplier;
return this;
}
public Builder withInstrumentation(Instrumentation instrumentation) {
return withInstrumentation(() -> instrumentation);
}
public Builder withInstrumentation(Supplier<Instrumentation> supplier) {
this.getInstrumentation = supplier;
return this;
}
public Builder with(List<Instrumentation> instrumentations) {
if (instrumentations.isEmpty()) {
return this;
}
if (instrumentations.size() == 1) {
withInstrumentation(instrumentations.get(0));
} else {
withInstrumentation(new ChainedInstrumentation(instrumentations));
}
return this;
}
public Builder withPreparsedDocumentProvider(PreparsedDocumentProvider provider) {
return withPreparsedDocumentProvider(() -> provider);
}
public Builder withPreparsedDocumentProvider(Supplier<PreparsedDocumentProvider> supplier) {
this.getPreparsedDocumentProvider = supplier;
return this;
}
public GraphQLQueryInvoker build() {
return new GraphQLQueryInvoker(
getExecutionStrategyProvider,
getInstrumentation,
getPreparsedDocumentProvider);
}
}
}