private GraphQLDirective transformArgs(GraphQLDirective graphQLDirective, String[] argumentValues) { GraphQLDirective.Builder directiveBuilder = newDirective(graphQLDirective); directiveBuilder.clearArguments(); List<GraphQLArgument> arguments = graphQLDirective.getArguments(); if (argumentValues.length > arguments.size()) { throw new GraphQLAnnotationsException(String.format("Directive '%s' is supplied with more argument values than it supports", graphQLDirective.getName()), null); } for (int i = 0; i < argumentValues.length; i++) { transformArgument(argumentValues, directiveBuilder, arguments, i); } for (int i = argumentValues.length; i < arguments.size(); i++) { int finalI = i; directiveBuilder.argument(arguments.get(i).transform(builder -> builder.value(arguments.get(finalI).getDefaultValue()))); } return directiveBuilder.build(); }
private GraphQLArgument transformArgument(GraphQLArgument argument, TypedElement element, String description, OperationMapper operationMapper, BuildContext buildContext) { if (argument.getDefaultValue() == null && shouldWrap(argument.getType(), element)) { return argument.transform(builder -> builder.type(new GraphQLNonNull(argument.getType()))); } if (shouldUnwrap(argument.getDefaultValue(), argument.getType())) { //do not warn on primitives as their non-nullness is implicit if (!ClassUtils.getRawType(element.getJavaType().getType()).isPrimitive()) { log.warn("Non-null argument with a default value will be treated as nullable: " + description); } return argument.transform(builder -> builder.type((GraphQLInputType) GraphQLUtils.unwrapNonNull(argument.getType()))); } return argument; }
private void transformArgument(String[] argumentValues, GraphQLDirective.Builder directiveBuilder, List<GraphQLArgument> arguments, int i) { int finalI = i; GraphQLArgument graphQLArgument = arguments.get(i); directiveBuilder.argument(graphQLArgument.transform(builder -> { String argumentValue = argumentValues[finalI]; if (graphQLArgument.getType() instanceof GraphQLScalarType) { try { Object value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().parseValue(argumentValue); builder.value(value); } catch (Exception e) { throw new GraphQLAnnotationsException("Could not parse argument value to argument type", e); } } else { throw new GraphQLAnnotationsException("Directive argument type must be a scalar!", null); } })); }
@Override public GraphQLArgument transformArgument(GraphQLArgument argument, DirectiveArgument directiveArgument, OperationMapper operationMapper, BuildContext buildContext) { if (directiveArgument.getAnnotation() != null && directiveArgument.getDefaultValue() == null) { return argument.transform(builder -> builder.type(GraphQLNonNull.nonNull(argument.getType()))); } return transformArgument(argument, directiveArgument.getTypedElement(), directiveArgument.toString(), operationMapper, buildContext); }