private boolean getDirectiveResult(Map<String, Object> variables, List<Directive> directives, String directiveName, boolean defaultValue) { Directive directive = getDirectiveByName(directives, directiveName); if (directive != null) { Map<String, Object> argumentValues = valuesResolver.getArgumentValues(SkipDirective.getArguments(), directive.getArguments(), variables); return (Boolean) argumentValues.get("if"); } return defaultValue; }
private Object coerceValueForInputObjectType(GraphqlFieldVisibility fieldVisibility, VariableDefinition variableDefinition, GraphQLInputObjectType inputObjectType, Map<String, Object> input) { Map<String, Object> result = new LinkedHashMap<>(); List<GraphQLInputObjectField> fields = fieldVisibility.getFieldDefinitions(inputObjectType); List<String> fieldNames = fields.stream().map(GraphQLInputObjectField::getName).collect(Collectors.toList()); for (String inputFieldName : input.keySet()) { if (!fieldNames.contains(inputFieldName)) { throw new InputMapDefinesTooManyFieldsException(inputObjectType, inputFieldName); } } for (GraphQLInputObjectField inputField : fields) { if (input.containsKey(inputField.getName()) || alwaysHasValue(inputField)) { Object value = coerceValue(fieldVisibility, variableDefinition, inputField.getName(), inputField.getType(), input.get(inputField.getName())); result.put(inputField.getName(), value == null ? inputField.getDefaultValue() : value); } } return result; }
private Map<String, Object> getArgumentValuesImpl(GraphQLCodeRegistry codeRegistry, List<GraphQLArgument> argumentTypes, List<Argument> arguments, Map<String, Object> variables) { if (argumentTypes.isEmpty()) { return Collections.emptyMap(); } Map<String, Object> result = new LinkedHashMap<>(); Map<String, Argument> argumentMap = argumentMap(arguments); for (GraphQLArgument fieldArgument : argumentTypes) { String argName = fieldArgument.getName(); Argument argument = argumentMap.get(argName); Object value; if (argument != null) { value = coerceValueAst(codeRegistry.getFieldVisibility(), fieldArgument.getType(), argument.getValue(), variables); } else { value = fieldArgument.getDefaultValue(); } // only put an arg into the result IF they specified a variable at all or // the default value ended up being something non null if (argumentMap.containsKey(argName) || value != null) { result.put(argName, value); } } return result; }
private Object getVariableValue(GraphqlFieldVisibility fieldVisibility, VariableDefinition variableDefinition, GraphQLType variableType, Object value) { if (value == null && variableDefinition.getDefaultValue() != null) { return coerceValueAst(fieldVisibility, variableType, variableDefinition.getDefaultValue(), null); } return coerceValue(fieldVisibility, variableDefinition, variableDefinition.getName(), variableType, value); }
private Object coerceValueAst(GraphqlFieldVisibility fieldVisibility, GraphQLType type, Value inputValue, Map<String, Object> variables) { if (inputValue instanceof VariableReference) { return variables.get(((VariableReference) inputValue).getName()); } if (inputValue instanceof NullValue) { return null; } if (type instanceof GraphQLScalarType) { return parseLiteral(inputValue, ((GraphQLScalarType) type).getCoercing(), variables); } if (isNonNull(type)) { return coerceValueAst(fieldVisibility, unwrapOne(type), inputValue, variables); } if (type instanceof GraphQLInputObjectType) { return coerceValueAstForInputObject(fieldVisibility, (GraphQLInputObjectType) type, (ObjectValue) inputValue, variables); } if (type instanceof GraphQLEnumType) { return parseLiteral(inputValue, ((GraphQLEnumType) type).getCoercing(), variables); } if (isList(type)) { return coerceValueAstForList(fieldVisibility, (GraphQLList) type, inputValue, variables); } return null; }
if (isNonNull(graphQLType)) { Object returnValue = coerceValue(fieldVisibility, variableDefinition, inputName, unwrapOne(graphQLType), value); if (returnValue == null) { throw new NonNullableValueCoercedAsNullException(variableDefinition, inputName, graphQLType); return coerceValueForScalar((GraphQLScalarType) graphQLType, value); } else if (graphQLType instanceof GraphQLEnumType) { return coerceValueForEnum((GraphQLEnumType) graphQLType, value); } else if (graphQLType instanceof GraphQLList) { return coerceValueForList(fieldVisibility, variableDefinition, inputName, (GraphQLList) graphQLType, value); } else if (graphQLType instanceof GraphQLInputObjectType) { if (value instanceof Map) { return coerceValueForInputObjectType(fieldVisibility, variableDefinition, (GraphQLInputObjectType) graphQLType, (Map<String, Object>) value); } else { throw new CoercingParseValueException(
); Map<String, Object> arguments = (Map<String, Object>) new ValuesResolver() .getArgumentValues(fieldDef.getArguments(), Collections.singletonList(where), variables) .get("where");
private Object coerceValueAstForInputObject(GraphqlFieldVisibility fieldVisibility, GraphQLInputObjectType type, ObjectValue inputValue, Map<String, Object> variables) { Map<String, Object> result = new LinkedHashMap<>(); Map<String, ObjectField> inputValueFieldsByName = mapObjectValueFieldsByName(inputValue); fieldObject = coerceValueAst(fieldVisibility, inputTypeField.getType(), fieldInputValue, variables); result.put(field.getName(), fieldObject); } else { assertNonNullInputField(inputTypeField); assertNonNullInputField(inputTypeField);
OperationDefinition operationDefinition = getOperationResult.operationDefinition; ValuesResolver valuesResolver = new ValuesResolver(); Map<String, Object> inputVariables = executionInput.getVariables(); List<VariableDefinition> variableDefinitions = operationDefinition.getVariableDefinitions(); coercedVariables = valuesResolver.coerceArgumentValues(graphQLSchema, variableDefinitions, inputVariables);
if (defaultValue != null) { Object coercedValue = coerceValueAst(fieldVisibility, variableType, variableDefinition.getDefaultValue(), null); coercedValues.put(variableName, coercedValue); } else if (isNonNull(variableType)) { Object value = variableValues.get(variableName); Object coercedValue = getVariableValue(fieldVisibility, variableDefinition, variableType, value);
public ExecutionResult execute(GraphQLSchema graphQLSchema, Object root, Document document, String operationName, Map<String, Object> args) { ExecutionContextBuilder executionContextBuilder = new ExecutionContextBuilder(new ValuesResolver()); ExecutionContext executionContext = executionContextBuilder.build(graphQLSchema, strategy, root, document, operationName, args); return executeOperation(executionContext, root, executionContext.getOperationDefinition()); }
private Object coerceValueAstForList(GraphqlFieldVisibility fieldVisibility, GraphQLList graphQLList, Value value, Map<String, Object> variables) { if (value instanceof ArrayValue) { ArrayValue arrayValue = (ArrayValue) value; List<Object> result = new ArrayList<>(); for (Value singleValue : arrayValue.getValues()) { result.add(coerceValueAst(fieldVisibility, graphQLList.getWrappedType(), singleValue, variables)); } return result; } else { return Collections.singletonList(coerceValueAst(fieldVisibility, graphQLList.getWrappedType(), value, variables)); } }
private List coerceValueForList(GraphqlFieldVisibility fieldVisibility, VariableDefinition variableDefinition, String inputName, GraphQLList graphQLList, Object value) { if (value instanceof Iterable) { List<Object> result = new ArrayList<>(); for (Object val : (Iterable) value) { result.add(coerceValue(fieldVisibility, variableDefinition, inputName, graphQLList.getWrappedType(), val)); } return result; } else { return Collections.singletonList(coerceValue(fieldVisibility, variableDefinition, inputName, graphQLList.getWrappedType(), value)); } }
coercedVariables = valuesResolver.coerceArgumentValues(graphQLSchema, variableDefinitions, inputVariables); } catch (RuntimeException rte) { if (rte instanceof GraphQLError) {
if (isNonNull(graphQLType)) { Object returnValue = coerceValue(fieldVisibility, variableDefinition, inputName, unwrapOne(graphQLType), value); if (returnValue == null) { throw new NonNullableValueCoercedAsNullException(variableDefinition, inputName, graphQLType); return coerceValueForScalar((GraphQLScalarType) graphQLType, value); } else if (graphQLType instanceof GraphQLEnumType) { return coerceValueForEnum((GraphQLEnumType) graphQLType, value); } else if (graphQLType instanceof GraphQLList) { return coerceValueForList(fieldVisibility, variableDefinition, inputName, (GraphQLList) graphQLType, value); } else if (graphQLType instanceof GraphQLInputObjectType) { if (value instanceof Map) { return coerceValueForInputObjectType(fieldVisibility, variableDefinition, (GraphQLInputObjectType) graphQLType, (Map<String, Object>) value); } else { throw new CoercingParseValueException(
private Object coerceValueAst(GraphqlFieldVisibility fieldVisibility, GraphQLType type, Value inputValue, Map<String, Object> variables) { if (inputValue instanceof VariableReference) { return variables.get(((VariableReference) inputValue).getName()); } if (inputValue instanceof NullValue) { return null; } if (type instanceof GraphQLScalarType) { return parseLiteral(inputValue, ((GraphQLScalarType) type).getCoercing(), variables); } if (isNonNull(type)) { return coerceValueAst(fieldVisibility, unwrapOne(type), inputValue, variables); } if (type instanceof GraphQLInputObjectType) { return coerceValueAstForInputObject(fieldVisibility, (GraphQLInputObjectType) type, (ObjectValue) inputValue, variables); } if (type instanceof GraphQLEnumType) { return parseLiteral(inputValue, ((GraphQLEnumType) type).getCoercing(), variables); } if (isList(type)) { return coerceValueAstForList(fieldVisibility, (GraphQLList) type, inputValue, variables); } return null; }
private Object coerceValueAstForInputObject(GraphqlFieldVisibility fieldVisibility, GraphQLInputObjectType type, ObjectValue inputValue, Map<String, Object> variables) { Map<String, Object> result = new LinkedHashMap<>(); Map<String, ObjectField> inputValueFieldsByName = mapObjectValueFieldsByName(inputValue); fieldObject = coerceValueAst(fieldVisibility, inputTypeField.getType(), fieldInputValue, variables); result.put(field.getName(), fieldObject); } else { assertNonNullInputField(inputTypeField); assertNonNullInputField(inputTypeField);
OperationDefinition operationDefinition = getOperationResult.operationDefinition; ValuesResolver valuesResolver = new ValuesResolver(); Map<String, Object> inputVariables = executionInput.getVariables(); List<VariableDefinition> variableDefinitions = operationDefinition.getVariableDefinitions(); coercedVariables = valuesResolver.coerceArgumentValues(graphQLSchema, variableDefinitions, inputVariables);
private Object getVariableValue(GraphqlFieldVisibility fieldVisibility, VariableDefinition variableDefinition, GraphQLType variableType, Object value) { if (value == null && variableDefinition.getDefaultValue() != null) { return coerceValueAst(fieldVisibility, variableType, variableDefinition.getDefaultValue(), null); } return coerceValue(fieldVisibility, variableDefinition, variableDefinition.getName(), variableType, value); }
if (defaultValue != null) { Object coercedValue = coerceValueAst(fieldVisibility, variableType, variableDefinition.getDefaultValue(), null); coercedValues.put(variableName, coercedValue); } else if (isNonNull(variableType)) { Object value = variableValues.get(variableName); Object coercedValue = getVariableValue(fieldVisibility, variableDefinition, variableType, value);