graphql.execution.ExecutionContextBuilder Maven / Gradle / Ivy
package graphql.execution;
import graphql.GraphQLException;
import graphql.language.Definition;
import graphql.language.Document;
import graphql.language.FragmentDefinition;
import graphql.language.OperationDefinition;
import graphql.schema.GraphQLSchema;
import java.util.LinkedHashMap;
import java.util.Map;
public class ExecutionContextBuilder {
private ValuesResolver valuesResolver;
public ExecutionContextBuilder(ValuesResolver valuesResolver) {
this.valuesResolver = valuesResolver;
}
public ExecutionContext build(GraphQLSchema graphQLSchema, ExecutionStrategy executionStrategy, Object root, Document document, String operationName, Map args) {
Map fragmentsByName = new LinkedHashMap();
Map operationsByName = new LinkedHashMap();
for (Definition definition : document.getDefinitions()) {
if (definition instanceof OperationDefinition) {
OperationDefinition operationDefinition = (OperationDefinition) definition;
operationsByName.put(operationDefinition.getName(), operationDefinition);
}
if (definition instanceof FragmentDefinition) {
FragmentDefinition fragmentDefinition = (FragmentDefinition) definition;
fragmentsByName.put(fragmentDefinition.getName(), fragmentDefinition);
}
}
if (operationName == null && operationsByName.size() > 1) {
throw new GraphQLException("missing operation name");
}
OperationDefinition operation;
if (operationName == null) {
operation = operationsByName.values().iterator().next();
} else {
operation = operationsByName.get(operationName);
}
if (operation == null) {
throw new GraphQLException();
}
ExecutionContext executionContext = new ExecutionContext();
executionContext.setGraphQLSchema(graphQLSchema);
executionContext.setExecutionStrategy(executionStrategy);
executionContext.setOperationDefinition(operation);
executionContext.setRoot(root);
executionContext.setFragmentsByName(fragmentsByName);
Map variableValues = valuesResolver.getVariableValues(graphQLSchema, operation.getVariableDefinitions(), args);
executionContext.setVariables(variableValues);
return executionContext;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy