package graphql.execution;
import graphql.Assert;
import graphql.language.FragmentDefinition;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import java.util.LinkedHashMap;
import java.util.Map;
public class FieldCollectorParameters {
private final GraphQLSchema graphQLSchema;
private final Map<String, FragmentDefinition> fragmentsByName;
private final Map<String, Object> variables;
private final GraphQLObjectType objectType;
public GraphQLSchema getGraphQLSchema() {
return graphQLSchema;
}
public Map<String, FragmentDefinition> getFragmentsByName() {
return fragmentsByName;
}
public Map<String, Object> getVariables() {
return variables;
}
public GraphQLObjectType getObjectType() {
return objectType;
}
private FieldCollectorParameters(GraphQLSchema graphQLSchema, Map<String, Object> variables, Map<String, FragmentDefinition> fragmentsByName, GraphQLObjectType objectType) {
this.fragmentsByName = fragmentsByName;
this.graphQLSchema = graphQLSchema;
this.variables = variables;
this.objectType = objectType;
}
public static Builder newParameters(GraphQLSchema graphQLSchema, GraphQLObjectType objectType) {
Assert.assertNotNull(graphQLSchema, "You must provide a schema");
Assert.assertNotNull(objectType, "You must provide an object type");
return new Builder().schema(graphQLSchema).objectType(objectType);
}
public static class Builder {
private GraphQLSchema graphQLSchema;
private Map<String, FragmentDefinition> fragmentsByName = new LinkedHashMap<>();
private Map<String, Object> variables = new LinkedHashMap<>();
private GraphQLObjectType objectType;
public Builder schema(GraphQLSchema graphQLSchema) {
this.graphQLSchema = graphQLSchema;
return this;
}
public Builder objectType(GraphQLObjectType objectType) {
this.objectType = objectType;
return this;
}
public Builder fragments(Map<String, FragmentDefinition> fragmentsByName) {
this.fragmentsByName.putAll(fragmentsByName);
return this;
}
public Builder variables(Map<String, Object> variables) {
this.variables.putAll(variables);
return this;
}
public FieldCollectorParameters build() {
return new FieldCollectorParameters(graphQLSchema, variables, fragmentsByName, objectType);
}
}
}