Skip to content

fix: support new graphql context #410

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ subprojects {

jacocoTestReport {
reports {
xml.enabled = true
html.enabled = false
csv.enabled = false
xml.required = true
html.required = false
csv.required = false
}
}

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version=12.0.1-SNAPSHOT
version=13.0.0-SNAPSHOT
group=com.graphql-java-kickstart
PROJECT_NAME=graphql-java-servlet
PROJECT_DESC=GraphQL Java Kickstart
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public enum ContextSetting {
public GraphQLBatchedInvocationInput getBatch(
List<GraphQLRequest> requests,
GraphQLSchema schema,
Supplier<GraphQLContext> contextSupplier,
Supplier<GraphQLKickstartContext> contextSupplier,
Object root) {
switch (this) {
case PER_QUERY_WITH_INSTRUMENTATION:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,48 @@
package graphql.kickstart.execution.context;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.security.auth.Subject;
import org.dataloader.DataLoaderRegistry;

/**
* An object for the DefaultGraphQLContextBuilder to return. Can be extended to include more
* context.
*/
public class DefaultGraphQLContext implements GraphQLContext {

private final Subject subject;
public class DefaultGraphQLContext implements GraphQLKickstartContext {

private final DataLoaderRegistry dataLoaderRegistry;
private final Map<Object, Object> map;

public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry, Subject subject) {
public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry, Map<Object, Object> map) {
this.dataLoaderRegistry =
Objects.requireNonNull(dataLoaderRegistry, "dataLoaderRegistry is required");
this.subject = subject;
this.map = Objects.requireNonNull(map, "map is required");
}

public DefaultGraphQLContext(Map<Object, Object> map) {
this(new DataLoaderRegistry(), map);
}

public DefaultGraphQLContext(DataLoaderRegistry dataLoaderRegistry) {
this(dataLoaderRegistry, new HashMap<>());
}

public DefaultGraphQLContext() {
this(new DataLoaderRegistry(), null);
this(new DataLoaderRegistry());
}

@Override
public Optional<Subject> getSubject() {
return Optional.ofNullable(subject);
public void put(Object key, Object value) {
map.put(key, value);
}

@Override
public DataLoaderRegistry getDataLoaderRegistry() {
return dataLoaderRegistry;
}

@Override
public Map<Object, Object> getMapOfContext() {
return map;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
public class DefaultGraphQLContextBuilder implements GraphQLContextBuilder {

@Override
public GraphQLContext build() {
public GraphQLKickstartContext build() {
return new DefaultGraphQLContext();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
public interface GraphQLContextBuilder {

/** @return the graphql context */
GraphQLContext build();
GraphQLKickstartContext build();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package graphql.kickstart.execution.context;

import java.util.Map;
import lombok.NonNull;
import org.dataloader.DataLoaderRegistry;

/** Represents the context required by the servlet to execute a GraphQL request. */
public interface GraphQLKickstartContext {

static GraphQLKickstartContext of(Map<Object, Object> map) {
return new DefaultGraphQLContext(map);
}

static GraphQLKickstartContext of(DataLoaderRegistry dataLoaderRegistry) {
return new DefaultGraphQLContext(dataLoaderRegistry);
}

static GraphQLKickstartContext of(
DataLoaderRegistry dataLoaderRegistry, Map<Object, Object> map) {
return new DefaultGraphQLContext(dataLoaderRegistry, map);
}

/** @return the Dataloader registry to use for the execution. Must not return <code>null</code> */
@NonNull
DataLoaderRegistry getDataLoaderRegistry();

Map<Object, Object> getMapOfContext();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,9 @@
import graphql.ExecutionInput;
import graphql.execution.ExecutionId;
import graphql.kickstart.execution.GraphQLRequest;
import graphql.kickstart.execution.context.GraphQLContext;
import graphql.kickstart.execution.context.GraphQLKickstartContext;
import graphql.schema.GraphQLSchema;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import javax.security.auth.Subject;

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

private final ExecutionInput executionInput;

private final Subject subject;

public GraphQLSingleInvocationInput(
GraphQLRequest request, GraphQLSchema schema, GraphQLContext context, Object root) {
GraphQLRequest request, GraphQLSchema schema, GraphQLKickstartContext context, Object root) {
this.schema = schema;
this.executionInput = createExecutionInput(request, context, root);
subject = context.getSubject().orElse(null);
}

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

/** @return a subject to execute the query as. */
public Optional<Subject> getSubject() {
return Optional.ofNullable(subject);
}

private ExecutionInput createExecutionInput(
GraphQLRequest graphQLRequest, GraphQLContext context, Object root) {
GraphQLRequest graphQLRequest, GraphQLKickstartContext context, Object root) {
return ExecutionInput.newExecutionInput()
.query(graphQLRequest.getQuery())
.operationName(graphQLRequest.getOperationName())
.context(context)
.graphQLContext(Collections.singletonMap(context.getClass(), context))
.graphQLContext(context.getMapOfContext())
.root(root)
.variables(graphQLRequest.getVariables())
.extensions(graphQLRequest.getExtensions())
Expand All @@ -61,5 +50,4 @@ public ExecutionInput getExecutionInput() {
public List<String> getQueries() {
return singletonList(executionInput.getQuery());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import graphql.kickstart.execution.GraphQLRequest;
import graphql.kickstart.execution.context.ContextSetting;
import graphql.kickstart.execution.context.GraphQLContext;
import graphql.kickstart.execution.context.GraphQLKickstartContext;
import graphql.schema.GraphQLSchema;
import java.util.List;
import java.util.function.Supplier;
Expand All @@ -21,7 +21,7 @@ public class PerQueryBatchedInvocationInput implements GraphQLBatchedInvocationI
public PerQueryBatchedInvocationInput(
List<GraphQLRequest> requests,
GraphQLSchema schema,
Supplier<GraphQLContext> contextSupplier,
Supplier<GraphQLKickstartContext> contextSupplier,
Object root,
ContextSetting contextSetting) {
invocationInputs =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import graphql.kickstart.execution.GraphQLRequest;
import graphql.kickstart.execution.context.ContextSetting;
import graphql.kickstart.execution.context.GraphQLContext;
import graphql.kickstart.execution.context.GraphQLKickstartContext;
import graphql.schema.GraphQLSchema;
import java.util.List;
import java.util.function.Supplier;
Expand All @@ -20,10 +20,10 @@ public class PerRequestBatchedInvocationInput implements GraphQLBatchedInvocatio
public PerRequestBatchedInvocationInput(
List<GraphQLRequest> requests,
GraphQLSchema schema,
Supplier<GraphQLContext> contextSupplier,
Supplier<GraphQLKickstartContext> contextSupplier,
Object root,
ContextSetting contextSetting) {
GraphQLContext context = contextSupplier.get();
GraphQLKickstartContext context = contextSupplier.get();
invocationInputs =
requests.stream()
.map(request -> new GraphQLSingleInvocationInput(request, schema, context, root))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

String body = request.getReader().lines().collect(joining());
String body = request.getReader().lines().collect(joining(" "));
if (isSingleQuery(body)) {
GraphQLRequest graphqlRequest = graphQLObjectMapper.readGraphQLRequest(body);
return invocationInputFactory.create(graphqlRequest, request, response);
Expand Down
Loading