Skip to content

Commit d606e11

Browse files
authored
Merge pull request #410 from graphql-java-kickstart/feature/context-refactor
fix: support new graphql context
2 parents cea4114 + 03c2fc0 commit d606e11

22 files changed

+183
-168
lines changed

build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ subprojects {
9292

9393
jacocoTestReport {
9494
reports {
95-
xml.enabled = true
96-
html.enabled = false
97-
csv.enabled = false
95+
xml.required = true
96+
html.required = false
97+
csv.required = false
9898
}
9999
}
100100

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=12.0.1-SNAPSHOT
1+
version=13.0.0-SNAPSHOT
22
group=com.graphql-java-kickstart
33
PROJECT_NAME=graphql-java-servlet
44
PROJECT_DESC=GraphQL Java Kickstart

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLInvokerSubjectProxy.java

-32
This file was deleted.

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/context/ContextSetting.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public enum ContextSetting {
4747
public GraphQLBatchedInvocationInput getBatch(
4848
List<GraphQLRequest> requests,
4949
GraphQLSchema schema,
50-
Supplier<GraphQLContext> contextSupplier,
50+
Supplier<GraphQLKickstartContext> contextSupplier,
5151
Object root) {
5252
switch (this) {
5353
case PER_QUERY_WITH_INSTRUMENTATION:
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,48 @@
11
package graphql.kickstart.execution.context;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
35
import java.util.Objects;
4-
import java.util.Optional;
5-
import javax.security.auth.Subject;
66
import org.dataloader.DataLoaderRegistry;
77

88
/**
99
* An object for the DefaultGraphQLContextBuilder to return. Can be extended to include more
1010
* context.
1111
*/
12-
public class DefaultGraphQLContext implements GraphQLContext {
13-
14-
private final Subject subject;
12+
public class DefaultGraphQLContext implements GraphQLKickstartContext {
1513

1614
private final DataLoaderRegistry dataLoaderRegistry;
15+
private final Map<Object, Object> map;
1716

18-
public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry, Subject subject) {
17+
public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry, Map<Object, Object> map) {
1918
this.dataLoaderRegistry =
2019
Objects.requireNonNull(dataLoaderRegistry, "dataLoaderRegistry is required");
21-
this.subject = subject;
20+
this.map = Objects.requireNonNull(map, "map is required");
21+
}
22+
23+
public DefaultGraphQLContext(Map<Object, Object> map) {
24+
this(new DataLoaderRegistry(), map);
25+
}
26+
27+
public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry) {
28+
this(dataLoaderRegistry, new HashMap<>());
2229
}
2330

2431
public DefaultGraphQLContext() {
25-
this(new DataLoaderRegistry(), null);
32+
this(new DataLoaderRegistry());
2633
}
2734

28-
@Override
29-
public Optional<Subject> getSubject() {
30-
return Optional.ofNullable(subject);
35+
public void put(Object key, Object value) {
36+
map.put(key, value);
3137
}
3238

3339
@Override
3440
public DataLoaderRegistry getDataLoaderRegistry() {
3541
return dataLoaderRegistry;
3642
}
43+
44+
@Override
45+
public Map<Object, Object> getMapOfContext() {
46+
return map;
47+
}
3748
}

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/context/DefaultGraphQLContextBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
public class DefaultGraphQLContextBuilder implements GraphQLContextBuilder {
55

66
@Override
7-
public GraphQLContext build() {
7+
public GraphQLKickstartContext build() {
88
return new DefaultGraphQLContext();
99
}
1010
}

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/context/GraphQLContext.java

-17
This file was deleted.

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/context/GraphQLContextBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
public interface GraphQLContextBuilder {
44

55
/** @return the graphql context */
6-
GraphQLContext build();
6+
GraphQLKickstartContext build();
77
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package graphql.kickstart.execution.context;
2+
3+
import java.util.Map;
4+
import lombok.NonNull;
5+
import org.dataloader.DataLoaderRegistry;
6+
7+
/** Represents the context required by the servlet to execute a GraphQL request. */
8+
public interface GraphQLKickstartContext {
9+
10+
static GraphQLKickstartContext of(Map<Object, Object> map) {
11+
return new DefaultGraphQLContext(map);
12+
}
13+
14+
static GraphQLKickstartContext of(DataLoaderRegistry dataLoaderRegistry) {
15+
return new DefaultGraphQLContext(dataLoaderRegistry);
16+
}
17+
18+
static GraphQLKickstartContext of(
19+
DataLoaderRegistry dataLoaderRegistry, Map<Object, Object> map) {
20+
return new DefaultGraphQLContext(dataLoaderRegistry, map);
21+
}
22+
23+
/** @return the Dataloader registry to use for the execution. Must not return <code>null</code> */
24+
@NonNull
25+
DataLoaderRegistry getDataLoaderRegistry();
26+
27+
Map<Object, Object> getMapOfContext();
28+
}

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/input/GraphQLSingleInvocationInput.java

+4-16
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55
import graphql.ExecutionInput;
66
import graphql.execution.ExecutionId;
77
import graphql.kickstart.execution.GraphQLRequest;
8-
import graphql.kickstart.execution.context.GraphQLContext;
8+
import graphql.kickstart.execution.context.GraphQLKickstartContext;
99
import graphql.schema.GraphQLSchema;
10-
import java.util.Collections;
1110
import java.util.List;
12-
import java.util.Optional;
13-
import javax.security.auth.Subject;
1411

1512
/** Represents a single GraphQL execution. */
1613
public class GraphQLSingleInvocationInput implements GraphQLInvocationInput {
@@ -19,32 +16,24 @@ public class GraphQLSingleInvocationInput implements GraphQLInvocationInput {
1916

2017
private final ExecutionInput executionInput;
2118

22-
private final Subject subject;
23-
2419
public GraphQLSingleInvocationInput(
25-
GraphQLRequest request, GraphQLSchema schema, GraphQLContext context, Object root) {
20+
GraphQLRequest request, GraphQLSchema schema, GraphQLKickstartContext context, Object root) {
2621
this.schema = schema;
2722
this.executionInput = createExecutionInput(request, context, root);
28-
subject = context.getSubject().orElse(null);
2923
}
3024

3125
/** @return the schema to use to execute this query. */
3226
public GraphQLSchema getSchema() {
3327
return schema;
3428
}
3529

36-
/** @return a subject to execute the query as. */
37-
public Optional<Subject> getSubject() {
38-
return Optional.ofNullable(subject);
39-
}
40-
4130
private ExecutionInput createExecutionInput(
42-
GraphQLRequest graphQLRequest, GraphQLContext context, Object root) {
31+
GraphQLRequest graphQLRequest, GraphQLKickstartContext context, Object root) {
4332
return ExecutionInput.newExecutionInput()
4433
.query(graphQLRequest.getQuery())
4534
.operationName(graphQLRequest.getOperationName())
4635
.context(context)
47-
.graphQLContext(Collections.singletonMap(context.getClass(), context))
36+
.graphQLContext(context.getMapOfContext())
4837
.root(root)
4938
.variables(graphQLRequest.getVariables())
5039
.extensions(graphQLRequest.getExtensions())
@@ -61,5 +50,4 @@ public ExecutionInput getExecutionInput() {
6150
public List<String> getQueries() {
6251
return singletonList(executionInput.getQuery());
6352
}
64-
6553
}

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/input/PerQueryBatchedInvocationInput.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import graphql.kickstart.execution.GraphQLRequest;
66
import graphql.kickstart.execution.context.ContextSetting;
7-
import graphql.kickstart.execution.context.GraphQLContext;
7+
import graphql.kickstart.execution.context.GraphQLKickstartContext;
88
import graphql.schema.GraphQLSchema;
99
import java.util.List;
1010
import java.util.function.Supplier;
@@ -21,7 +21,7 @@ public class PerQueryBatchedInvocationInput implements GraphQLBatchedInvocationI
2121
public PerQueryBatchedInvocationInput(
2222
List<GraphQLRequest> requests,
2323
GraphQLSchema schema,
24-
Supplier<GraphQLContext> contextSupplier,
24+
Supplier<GraphQLKickstartContext> contextSupplier,
2525
Object root,
2626
ContextSetting contextSetting) {
2727
invocationInputs =

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/input/PerRequestBatchedInvocationInput.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import graphql.kickstart.execution.GraphQLRequest;
66
import graphql.kickstart.execution.context.ContextSetting;
7-
import graphql.kickstart.execution.context.GraphQLContext;
7+
import graphql.kickstart.execution.context.GraphQLKickstartContext;
88
import graphql.schema.GraphQLSchema;
99
import java.util.List;
1010
import java.util.function.Supplier;
@@ -20,10 +20,10 @@ public class PerRequestBatchedInvocationInput implements GraphQLBatchedInvocatio
2020
public PerRequestBatchedInvocationInput(
2121
List<GraphQLRequest> requests,
2222
GraphQLSchema schema,
23-
Supplier<GraphQLContext> contextSupplier,
23+
Supplier<GraphQLKickstartContext> contextSupplier,
2424
Object root,
2525
ContextSetting contextSetting) {
26-
GraphQLContext context = contextSupplier.get();
26+
GraphQLKickstartContext context = contextSupplier.get();
2727
invocationInputs =
2828
requests.stream()
2929
.map(request -> new GraphQLSingleInvocationInput(request, schema, context, root))

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
1111
import java.io.IOException;
1212
import java.util.List;
13+
import java.util.stream.Collectors;
1314
import javax.servlet.http.HttpServletRequest;
1415
import javax.servlet.http.HttpServletResponse;
1516

@@ -27,12 +28,12 @@ class GraphQLPostInvocationInputParser extends AbstractGraphQLInvocationInputPar
2728
public GraphQLInvocationInput getGraphQLInvocationInput(
2829
HttpServletRequest request, HttpServletResponse response) throws IOException {
2930
if (APPLICATION_GRAPHQL.equals(request.getContentType())) {
30-
String query = request.getReader().lines().collect(joining());
31+
String query = request.getReader().lines().collect(joining(" "));
3132
GraphQLRequest graphqlRequest = GraphQLRequest.createQueryOnlyRequest(query);
3233
return invocationInputFactory.create(graphqlRequest, request, response);
3334
}
3435

35-
String body = request.getReader().lines().collect(joining());
36+
String body = request.getReader().lines().collect(joining(" "));
3637
if (isSingleQuery(body)) {
3738
GraphQLRequest graphqlRequest = graphQLObjectMapper.readGraphQLRequest(body);
3839
return invocationInputFactory.create(graphqlRequest, request, response);

0 commit comments

Comments
 (0)