private GraphQLInputObjectField buildInputField(BuildContext buildCtx, InputValueDefinition fieldDef) { buildCtx.enterNode(fieldDef); GraphQLInputObjectField.Builder fieldBuilder = GraphQLInputObjectField.newInputObjectField(); fieldBuilder.definition(fieldDef); fieldBuilder.name(fieldDef.getName()); fieldBuilder.description(schemaGeneratorHelper.buildDescription(fieldDef, fieldDef.getDescription())); // currently the spec doesnt allow deprecations on InputValueDefinitions but it should! //fieldBuilder.deprecate(buildDeprecationReason(fieldDef.getDirectives())); GraphQLInputType inputType = buildInputType(buildCtx, fieldDef.getType()); fieldBuilder.type(inputType); Value defaultValue = fieldDef.getDefaultValue(); if (defaultValue != null) { fieldBuilder.defaultValue(schemaGeneratorHelper.buildValue(defaultValue, inputType)); } fieldBuilder.withDirectives( buildDirectives(fieldDef.getDirectives(), emptyList(), INPUT_FIELD_DEFINITION, buildCtx.getDirectiveDefinitions()) ); GraphQLInputObjectField inputObjectField = fieldBuilder.build(); inputObjectField = directiveBehaviour.onInputObjectField(inputObjectField, buildCtx.mkBehaviourParams()); return buildCtx.exitNode(inputObjectField); }
private GraphQLFieldDefinition buildRelayMutation(Method method, ProcessingElementsContainer container, GraphQLFieldDefinition.Builder builder, GraphQLOutputType outputType, List<GraphQLArgument> args) { GraphQLFieldDefinition relayFieldDefinition; if (!(outputType instanceof GraphQLObjectType || outputType instanceof GraphQLInterfaceType)) { throw new RuntimeException("outputType should be an object or an interface"); } StringBuilder titleBuffer = new StringBuilder(method.getName()); titleBuffer.setCharAt(0, Character.toUpperCase(titleBuffer.charAt(0))); String title = titleBuffer.toString(); List<GraphQLFieldDefinition> fieldDefinitions = outputType instanceof GraphQLObjectType ? ((GraphQLObjectType) outputType).getFieldDefinitions() : ((GraphQLInterfaceType) outputType).getFieldDefinitions(); relayFieldDefinition = container.getRelay().mutationWithClientMutationId(title, method.getName(), args.stream(). map(t -> newInputObjectField().name(t.getName()).type(t.getType()).description(t.getDescription()).build()). collect(Collectors.toList()), fieldDefinitions, new StaticDataFetcher(null)); builder.argument(relayFieldDefinition.getArguments()).type(relayFieldDefinition.getType()); return relayFieldDefinition; }
@Test(expectedExceptions = InvalidDirectiveLocationException.class) public void wireGraphQLInputObjectField_invalidLocations_exceptionIsThrown() throws Exception { // Arrange AnnotationsDirectiveWiring upperWiring = mock(AnnotationsDirectiveWiring.class); GraphQLInputObjectField directiveContainer = GraphQLInputObjectField.newInputObjectField().name("asdf") .type(GraphQLInputObjectType.newInputObject().name("dfdf").build()).build(); AnnotationsWiringEnvironmentImpl upperCaseEnv = new AnnotationsWiringEnvironmentImpl(directiveContainer, directiveContainer.getDirective("upperCase")); when(upperWiring.onInputObjectField(upperCaseEnv)).thenReturn(directiveContainer); HashMap<GraphQLDirective, AnnotationsDirectiveWiring> map = new HashMap<>(); GraphQLDirective upperCase = newDirective().name("upperCase").build(); map.put(upperCase, upperWiring); // Act directiveWirer.wire(directiveContainer, map); }
/** * Maps a single field/property to a GraphQL input field. * * @param inputField The field/property to map to a GraphQL input field * @param buildContext The shared context containing all the global information needed for mapping * * @return GraphQL input field representing the given field/property */ public GraphQLInputObjectField toGraphQLInputField(InputField inputField, BuildContext buildContext) { GraphQLInputObjectField.Builder builder = newInputObjectField() .name(inputField.getName()) .description(inputField.getDescription()) .type(toGraphQLInputType(inputField.getJavaType(), buildContext)) .withDirective(Directives.mappedInputField(inputField)) .withDirectives(toGraphQLDirectives(inputField.getTypedElement(), buildContext.directiveBuilder::buildInputFieldDefinitionDirectives, buildContext)) .defaultValue(inputField.getDefaultValue()); return buildContext.transformers.transform(builder.build(), inputField, this, buildContext); }
@Test public void wireGraphQLInputObjectField_validLocations_correctMethodIsCalled() throws Exception { // Arrange AnnotationsDirectiveWiring upperWiring = mock(AnnotationsDirectiveWiring.class); GraphQLInputObjectField directiveContainer = GraphQLInputObjectField.newInputObjectField().name("asdf") .type(GraphQLInputObjectType.newInputObject().name("dfdf").build()).build(); AnnotationsWiringEnvironmentImpl upperCaseEnv = new AnnotationsWiringEnvironmentImpl(directiveContainer, directiveContainer.getDirective("upperCase")); when(upperWiring.onInputObjectField(upperCaseEnv)).thenReturn(directiveContainer); HashMap<GraphQLDirective, AnnotationsDirectiveWiring> map = new HashMap<>(); GraphQLDirective upperCase = newDirective().name("upperCase").validLocations(Introspection.DirectiveLocation.INPUT_FIELD_DEFINITION).build(); map.put(upperCase, upperWiring); // Act directiveWirer.wire(directiveContainer, map); // Assert verify(upperWiring).onInputObjectField(upperCaseEnv); }
private GraphQLInputType getListInputMapping(final IGraphQLObjectMapper graphQLObjectMapper, final Type type) { ParameterizedType pType = (ParameterizedType) type; GraphQLInputObjectType objectType = GraphQLInputObjectType.newInputObject() .name(graphQLObjectMapper.getTypeNamingStrategy().getTypeName(graphQLObjectMapper, type)) .field(GraphQLInputObjectField.newInputObjectField() .name(KEY_NAME) .type(graphQLObjectMapper.getInputType(pType.getActualTypeArguments()[0])) .build()) .field(GraphQLInputObjectField.newInputObjectField() .name(VALUE_NAME) .type(graphQLObjectMapper.getInputType(pType.getActualTypeArguments()[1])) .build()) .build(); return new GraphQLList(objectType); }
public GraphQLFieldDefinition mutationWithClientMutationId(String name, String fieldName, List<GraphQLInputObjectField> inputFields, List<GraphQLFieldDefinition> outputFields, DataFetcher dataFetcher) { GraphQLInputObjectField clientMutationIdInputField = newInputObjectField() .name("clientMutationId") .type(GraphQLString) .build(); GraphQLFieldDefinition clientMutationIdPayloadField = newFieldDefinition() .name("clientMutationId") .type(GraphQLString) .build(); return mutation(name, fieldName, addElementToList(inputFields, clientMutationIdInputField), addElementToList(outputFields, clientMutationIdPayloadField), dataFetcher); }
public GraphQLInputObjectField buildGraphQLInputObjectField(DfsContext dfsContext, Field field, Class<?> implClass) { ResolvableTypeAccessor resolvableTypeAccessor = ResolvableTypeAccessor.forField(field, implClass); Object defaultValue = invokeMethodByName(dfsContext, implClass, resolvableTypeAccessor.getGraphQLInDefaultValueProviderMethodName()); defaultValue = evaluateSpElExpression(dfsContext, implClass, null, resolvableTypeAccessor.getGraphQLInDefaultValueSpel(), defaultValue); GraphQLInputObjectField graphQLInputObjectField = GraphQLInputObjectField.newInputObjectField() .name(resolvableTypeAccessor.getName()) .description(resolvableTypeAccessor.getDescription()) .defaultValue(defaultValue) .type(buildGraphQLInputTypeFromMethodParam(dfsContext, resolvableTypeAccessor)) .build(); return graphQLInputObjectField; }
@Override protected GraphQLInputObjectType toGraphQLInputType(String typeName, AnnotatedType javaType, OperationMapper operationMapper, BuildContext buildContext) { GraphQLInputObjectType.Builder builder = GraphQLInputObjectType.newInputObject() .name(typeName) .description(buildContext.typeInfoGenerator.generateInputTypeDescription(javaType, buildContext.messageBundle)); Enum[] keys = (Enum[]) ClassUtils.getRawType(getElementType(javaType, 0).getType()).getEnumConstants(); Arrays.stream(keys).forEach(enumValue -> builder.field(GraphQLInputObjectField.newInputObjectField() .name(enumMapper.getValueName(enumValue, buildContext.messageBundle)) .description(enumMapper.getValueDescription(enumValue, buildContext.messageBundle)) .type(operationMapper.toGraphQLInputType(getElementType(javaType, 1), buildContext)) .build())); return builder.build(); }
@Override public GraphQLInputType getInputType(IGraphQLObjectMapper objectMapper, Type type) { return GraphQLInputObjectType.newInputObject().name(objectMapper.getTypeNamingStrategy().getTypeName(objectMapper, type)) .field(GraphQLInputObjectField.newInputObjectField().name("time").type(Scalars.GraphQLString).build()).build(); }
private GraphQLInputObjectField formField(String fieldName, String description) { return newInputObjectField() .name(fieldName) .description(description) .type(GraphQLString) .build(); }
private GraphQLInputObjectField getWhereInputField(Attribute<?,?> attribute) { GraphQLType type = getWhereAttributeType(attribute); String description = getSchemaDescription(attribute.getJavaMember()); if (type instanceof GraphQLInputType) { return GraphQLInputObjectField.newInputObjectField() .name(attribute.getName()) .description(description) .type((GraphQLInputType) type) .build(); } throw new IllegalArgumentException("Attribute " + attribute.getName() + " cannot be mapped as an Input Argument"); }
static GraphQLInputObjectField formField(String fieldName, String description, GraphQLInputType inputType) { return newInputObjectField() .name(fieldName) .description(description) .type(inputType) .build(); }
public GraphQLInputObjectField getInputField(Method method, ProcessingElementsContainer container) throws GraphQLAnnotationsException { GraphQLInputObjectField.Builder builder = newInputObjectField(); builder.name(new MethodNameBuilder(method).alwaysPrettify(alwaysPrettify).build()); TypeFunction typeFunction = getTypeFunction(method, container); GraphQLInputType inputType = (GraphQLInputType) new MethodTypeBuilder(method, typeFunction, container, true).build(); return builder.type(inputType).description(new DescriptionBuilder(method).build()).build(); }
public GraphQLInputObjectField getInputField(Field field, ProcessingElementsContainer container) throws GraphQLAnnotationsException { GraphQLInputObjectField.Builder builder = newInputObjectField(); builder.name(new FieldNameBuilder(field).alwaysPrettify(alwaysPrettify).build()); TypeFunction typeFunction = getTypeFunction(field, container); GraphQLType graphQLType = typeFunction.buildType(true, field.getType(), field.getAnnotatedType(), container); return builder.type((GraphQLInputType) graphQLType).description(new DescriptionBuilder(field).build()).build(); }
public GraphQLFieldDefinition mutationWithClientMutationId(String name, String fieldName, List<GraphQLInputObjectField> inputFields, List<GraphQLFieldDefinition> outputFields, DataFetcher dataFetcher) { GraphQLInputObjectField clientMutationIdInputField = newInputObjectField() .name("clientMutationId") .type(GraphQLString) .build(); GraphQLFieldDefinition clientMutationIdPayloadField = newFieldDefinition() .name("clientMutationId") .type(GraphQLString) .build(); return mutation(name, fieldName, addElementToList(inputFields, clientMutationIdInputField), addElementToList(outputFields, clientMutationIdPayloadField), dataFetcher); }
void inputTypes() { GraphQLInputObjectType inputObjectType = newInputObject() .name("inputObjectType") .field(newInputObjectField() .name("field") .type(GraphQLString)) .build(); }
public static GraphQLInputObjectType rangeType() { return GraphQLInputObjectType.newInputObject() .name("Range") .field(GraphQLInputObjectField.newInputObjectField() .name("lowerBound") .type(GraphQLInt)) .field(GraphQLInputObjectField.newInputObjectField() .name("upperBound") .type(GraphQLInt)) .build(); } }
public static GraphQLInputObjectType filterType() { return GraphQLInputObjectType.newInputObject() .name("Filter") .field(GraphQLInputObjectField.newInputObjectField() .name("even") .type(GraphQLBoolean)) .field(GraphQLInputObjectField.newInputObjectField() .name("range") .type(rangeType())) .build(); }