Skip to content

Commit 29f8b47

Browse files
committed
Use execution strategy provider for all servlets and expand to mutation/subscription strategies.
1 parent 1682469 commit 29f8b47

File tree

7 files changed

+91
-36
lines changed

7 files changed

+91
-36
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package graphql.servlet;
2+
3+
import graphql.execution.ExecutionStrategy;
4+
import graphql.execution.SimpleExecutionStrategy;
5+
6+
/**
7+
* @author Andrew Potter
8+
*/
9+
public class DefaultExecutionStrategyProvider implements ExecutionStrategyProvider {
10+
11+
private final ExecutionStrategy queryExecutionStrategy;
12+
private final ExecutionStrategy mutationExecutionStrategy;
13+
private final ExecutionStrategy subscriptionExecutionStrategy;
14+
15+
public DefaultExecutionStrategyProvider() {
16+
this(null);
17+
}
18+
19+
public DefaultExecutionStrategyProvider(ExecutionStrategy executionStrategy) {
20+
this(executionStrategy, null, null);
21+
}
22+
23+
public DefaultExecutionStrategyProvider(ExecutionStrategy queryExecutionStrategy, ExecutionStrategy mutationExecutionStrategy, ExecutionStrategy subscriptionExecutionStrategy) {
24+
this.queryExecutionStrategy = defaultIfNull(queryExecutionStrategy);
25+
this.mutationExecutionStrategy = defaultIfNull(mutationExecutionStrategy, this.queryExecutionStrategy);
26+
this.subscriptionExecutionStrategy = defaultIfNull(subscriptionExecutionStrategy, this.queryExecutionStrategy);
27+
}
28+
29+
private ExecutionStrategy defaultIfNull(ExecutionStrategy executionStrategy) {
30+
return defaultIfNull(executionStrategy, new SimpleExecutionStrategy());
31+
}
32+
33+
private ExecutionStrategy defaultIfNull(ExecutionStrategy executionStrategy, ExecutionStrategy defaultStrategy) {
34+
return executionStrategy != null ? executionStrategy : defaultStrategy;
35+
}
36+
37+
@Override
38+
public ExecutionStrategy getQueryExecutionStrategy() {
39+
return queryExecutionStrategy;
40+
}
41+
42+
@Override
43+
public ExecutionStrategy getMutationExecutionStrategy() {
44+
return mutationExecutionStrategy;
45+
}
46+
47+
@Override
48+
public ExecutionStrategy getSubscriptionExecutionStrategy() {
49+
return subscriptionExecutionStrategy;
50+
}
51+
}

src/main/java/graphql/servlet/EnhancedExecutionStrategyProvider.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,19 @@
2020

2121
@Component(property = "type=enhanced")
2222
public class EnhancedExecutionStrategyProvider implements ExecutionStrategyProvider {
23+
24+
@Override
25+
public ExecutionStrategy getQueryExecutionStrategy() {
26+
return new EnhancedExecutionStrategy();
27+
}
28+
29+
@Override
30+
public ExecutionStrategy getMutationExecutionStrategy() {
31+
return new EnhancedExecutionStrategy();
32+
}
33+
2334
@Override
24-
public ExecutionStrategy getExecutionStrategy() {
35+
public ExecutionStrategy getSubscriptionExecutionStrategy() {
2536
return new EnhancedExecutionStrategy();
2637
}
2738
}

src/main/java/graphql/servlet/ExecutionStrategyProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@
1717
import graphql.execution.ExecutionStrategy;
1818

1919
public interface ExecutionStrategyProvider {
20-
ExecutionStrategy getExecutionStrategy();
20+
ExecutionStrategy getQueryExecutionStrategy();
21+
ExecutionStrategy getMutationExecutionStrategy();
22+
ExecutionStrategy getSubscriptionExecutionStrategy();
2123
}

src/main/java/graphql/servlet/GraphQLSchemaProvider.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@ static GraphQLSchema copyReadOnly(GraphQLSchema schema) {
2525
}
2626

2727
/**
28-
* return a schema based on the request (auth, etc). Optional is empty when called from an mbean.
28+
* @param request the http request
29+
* @return a schema based on the request (auth, etc). Optional is empty when called from an mbean.
2930
*/
3031
GraphQLSchema getSchema(HttpServletRequest request);
3132

3233

3334
/**
34-
* return a schema for handling mbean calls.
35+
* @return a schema for handling mbean calls.
3536
*/
3637
GraphQLSchema getSchema();
3738

3839
/**
39-
* return a read-only schema based on the request (auth, etc). Should return the same schema as {@link #getSchema(HttpServletRequest)} for a given request.
40+
* @param request the http request
41+
* @return a read-only schema based on the request (auth, etc). Should return the same schema as {@link #getSchema(HttpServletRequest)} for a given request.
4042
*/
4143
GraphQLSchema getReadOnlySchema(HttpServletRequest request);
4244
}

src/main/java/graphql/servlet/GraphQLServlet.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ public abstract class GraphQLServlet extends HttpServlet implements Servlet, Gra
7575

7676
protected abstract GraphQLSchemaProvider getSchemaProvider();
7777
protected abstract GraphQLContext createContext(Optional<HttpServletRequest> request, Optional<HttpServletResponse> response);
78-
protected abstract ExecutionStrategy getQueryExecutionStrategy();
79-
protected abstract ExecutionStrategy getMutationExecutionStrategy();
78+
protected abstract ExecutionStrategyProvider getExecutionStrategyProvider();
8079
protected abstract Instrumentation getInstrumentation();
8180
protected abstract Map<String, Object> transformVariables(GraphQLSchema schema, String query, Map<String, Object> variables);
8281

@@ -253,9 +252,11 @@ private Optional<FileItem> getFileItem(Map<String, List<FileItem>> fileItems, St
253252
}
254253

255254
private GraphQL newGraphQL(GraphQLSchema schema) {
255+
ExecutionStrategyProvider executionStrategyProvider = getExecutionStrategyProvider();
256256
return GraphQL.newGraphQL(schema)
257-
.queryExecutionStrategy(getQueryExecutionStrategy())
258-
.mutationExecutionStrategy(getMutationExecutionStrategy())
257+
.queryExecutionStrategy(executionStrategyProvider.getQueryExecutionStrategy())
258+
.mutationExecutionStrategy(executionStrategyProvider.getMutationExecutionStrategy())
259+
.subscriptionExecutionStrategy(executionStrategyProvider.getSubscriptionExecutionStrategy())
259260
.instrumentation(getInstrumentation())
260261
.build();
261262
}

src/main/java/graphql/servlet/OsgiGraphQLServlet.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void unsetExecutionStrategyProvider(ExecutionStrategyProvider provider) {
138138
public void setInstrumentationProvider(InstrumentationProvider provider) {
139139
instrumentationProvider = provider;
140140
}
141-
public void unsetInstrumentationProvider(ExecutionStrategyProvider provider) {
141+
public void unsetInstrumentationProvider(InstrumentationProvider provider) {
142142
instrumentationProvider = new NoOpInstrumentationProvider();
143143
}
144144

@@ -152,13 +152,8 @@ protected GraphQLContext createContext(Optional<HttpServletRequest> req, Optiona
152152
}
153153

154154
@Override
155-
protected ExecutionStrategy getQueryExecutionStrategy() {
156-
return executionStrategyProvider.getExecutionStrategy();
157-
}
158-
159-
@Override
160-
protected ExecutionStrategy getMutationExecutionStrategy() {
161-
return getQueryExecutionStrategy();
155+
protected ExecutionStrategyProvider getExecutionStrategyProvider() {
156+
return executionStrategyProvider;
162157
}
163158

164159
@Override

src/main/java/graphql/servlet/SimpleGraphQLServlet.java

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,26 @@
3232
public class SimpleGraphQLServlet extends GraphQLServlet {
3333

3434
public SimpleGraphQLServlet(GraphQLSchema schema) {
35-
this(schema, new SimpleExecutionStrategy());
35+
this(schema, new DefaultExecutionStrategyProvider());
3636
}
3737

38-
public SimpleGraphQLServlet(GraphQLSchema schema, ExecutionStrategy queryExecutionStrategy) {
39-
this(schema, queryExecutionStrategy, queryExecutionStrategy);
38+
public SimpleGraphQLServlet(GraphQLSchema schema, ExecutionStrategy executionStrategy) {
39+
this(schema, new DefaultExecutionStrategyProvider(executionStrategy));
4040
}
4141

42-
public SimpleGraphQLServlet(GraphQLSchema schema, ExecutionStrategy queryExecutionStrategy, ExecutionStrategy mutationExecutionStrategy) {
43-
this(schema, queryExecutionStrategy, mutationExecutionStrategy, null, null);
42+
public SimpleGraphQLServlet(GraphQLSchema schema, ExecutionStrategyProvider executionStrategyProvider) {
43+
this(schema, executionStrategyProvider, null, null);
4444
}
4545

46-
public SimpleGraphQLServlet(final GraphQLSchema schema, ExecutionStrategy queryExecutionStrategy, ExecutionStrategy mutationExecutionStrategy, List<GraphQLServletListener> listeners, Instrumentation instrumentation) {
47-
this(new DefaultGraphQLSchemaProvider(schema), queryExecutionStrategy, mutationExecutionStrategy, listeners, instrumentation);
46+
public SimpleGraphQLServlet(final GraphQLSchema schema, ExecutionStrategyProvider executionStrategyProvider, List<GraphQLServletListener> listeners, Instrumentation instrumentation) {
47+
this(new DefaultGraphQLSchemaProvider(schema), executionStrategyProvider, listeners, instrumentation);
4848
}
4949

50-
public SimpleGraphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrategy queryExecutionStrategy, ExecutionStrategy mutationExecutionStrategy, List<GraphQLServletListener> listeners, Instrumentation instrumentation) {
50+
public SimpleGraphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrategyProvider executionStrategyProvider, List<GraphQLServletListener> listeners, Instrumentation instrumentation) {
5151
super(listeners, null);
5252

5353
this.schemaProvider = schemaProvider;
54-
this.queryExecutionStrategy = queryExecutionStrategy;
55-
this.mutationExecutionStrategy = mutationExecutionStrategy;
54+
this.executionStrategyProvider = executionStrategyProvider;
5655

5756
if (instrumentation == null) {
5857
this.instrumentation = NoOpInstrumentation.INSTANCE;
@@ -62,8 +61,7 @@ public SimpleGraphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrat
6261
}
6362

6463
private final GraphQLSchemaProvider schemaProvider;
65-
private final ExecutionStrategy queryExecutionStrategy;
66-
private final ExecutionStrategy mutationExecutionStrategy;
64+
private final ExecutionStrategyProvider executionStrategyProvider;
6765
private final Instrumentation instrumentation;
6866

6967
@Override
@@ -77,13 +75,8 @@ protected GraphQLContext createContext(Optional<HttpServletRequest> request, Opt
7775
}
7876

7977
@Override
80-
protected ExecutionStrategy getQueryExecutionStrategy() {
81-
return queryExecutionStrategy;
82-
}
83-
84-
@Override
85-
protected ExecutionStrategy getMutationExecutionStrategy() {
86-
return mutationExecutionStrategy;
78+
protected ExecutionStrategyProvider getExecutionStrategyProvider() {
79+
return executionStrategyProvider;
8780
}
8881

8982
@Override

0 commit comments

Comments
 (0)