@SuppressWarnings("unchecked") public Builder(GraphQLFieldDefinition existing) { this.name = existing.getName(); this.description = existing.getDescription(); this.type = existing.getType(); this.dataFetcherFactory = DataFetcherFactories.useDataFetcher(existing.getDataFetcher()); this.deprecationReason = existing.getDeprecationReason(); this.definition = existing.getDefinition(); this.arguments.putAll(getByName(existing.getArguments(), GraphQLArgument::getName)); this.directives.putAll(getByName(existing.getDirectives(), GraphQLDirective::getName)); }
@Override public TraversalControl visitGraphQLFieldDefinition(GraphQLFieldDefinition node, TraverserContext<GraphQLType> context) { GraphQLFieldsContainer parentContainerType = (GraphQLFieldsContainer) context.getParentContext().thisNode(); DataFetcher dataFetcher = node.getDataFetcher(); if (dataFetcher == null) { dataFetcher = new PropertyDataFetcher<>(node.getName()); } FieldCoordinates coordinates = coordinates(parentContainerType, node); codeRegistry.dataFetcherIfAbsent(coordinates, dataFetcher); return CONTINUE; }
/** * Creates a resolver for the <em>node</em> query as defined by the Relay GraphQL spec. * <p>This query only takes a singe argument called "id" of type String, and returns the object implementing the * <em>Node</em> interface to which the given id corresponds.</p> * * @param nodeQueriesByType A map of all queries whose return types implement the <em>Node</em> interface, keyed * by their corresponding GraphQL type name * @param relay Relay helper * * @return The node query resolver */ private DataFetcher createNodeResolver(Map<String, String> nodeQueriesByType, Relay relay) { return env -> { String typeName; try { typeName = relay.fromGlobalId(env.getArgument(GraphQLId.RELAY_ID_FIELD_NAME)).getType(); } catch (Exception e) { throw new IllegalArgumentException(env.getArgument(GraphQLId.RELAY_ID_FIELD_NAME) + " is not a valid Relay node ID"); } if (!nodeQueriesByType.containsKey(typeName)) { throw new IllegalArgumentException(typeName + " is not a Relay node type or no registered query can fetch it by ID"); } return env.getGraphQLSchema().getQueryType().getFieldDefinition(nodeQueriesByType.get(typeName)).getDataFetcher().get(env); }; }
public GraphQLFieldDefinitionWrapper(GraphQLFieldDefinition fieldDefinition) { super(fieldDefinition.getName(), fieldDefinition.getDescription(), fieldDefinition.getType(), fieldDefinition.getDataFetcher(), fieldDefinition.getArguments(), fieldDefinition.getDeprecationReason()); }
@SuppressWarnings("unchecked") public Builder(GraphQLFieldDefinition existing) { this.name = existing.getName(); this.description = existing.getDescription(); this.type = existing.getType(); this.dataFetcherFactory = DataFetcherFactories.useDataFetcher(existing.getDataFetcher()); this.deprecationReason = existing.getDeprecationReason(); this.definition = existing.getDefinition(); this.arguments.putAll(getByName(existing.getArguments(), GraphQLArgument::getName)); this.directives.putAll(getByName(existing.getDirectives(), GraphQLDirective::getName)); }
@Override public TraversalControl visitGraphQLFieldDefinition(GraphQLFieldDefinition node, TraverserContext<GraphQLType> context) { GraphQLFieldsContainer parentContainerType = (GraphQLFieldsContainer) context.getParentContext().thisNode(); DataFetcher dataFetcher = node.getDataFetcher(); if (dataFetcher == null) { dataFetcher = new PropertyDataFetcher<>(node.getName()); } FieldCoordinates coordinates = coordinates(parentContainerType, node); codeRegistry.dataFetcherIfAbsent(coordinates, dataFetcher); return CONTINUE; }
@SuppressWarnings("serial") @Test public void testTypeConverterDetection() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().add(new TestTypeMapper()).addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<TypeConverterTest>(){}.getType()); assertEquals(AppendingTypeconverter.class, objectType.getFieldDefinition("someStrings").getDataFetcher().getClass()); }
assertEquals(fields.get(6).getName(), "publicTest"); assertEquals(fields.get(5).getDataFetcher().getClass(), PropertyDataFetcher.class); assertEquals(fields.get(6).getDataFetcher().getClass(), PropertyDataFetcher.class);
@Test public void testCustomDataFetcherForField() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper(ImmutableList.<IGraphQLTypeMapper> builder() .add(new TestTypeMappingDataFetcher()) .addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()) .build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(ClassWithFieldDataFetcher.class); assertNotNull(objectType.getFieldDefinition("field1")); assertEquals(DefaultMethodDataFetcher.class, objectType.getFieldDefinition("field1").getDataFetcher().getClass()); }
public GraphQLFieldDefinitionWrapper(GraphQLFieldDefinition fieldDefinition) { super(fieldDefinition.getName(), fieldDefinition.getDescription(), fieldDefinition.getType(), DataFetcherFactories.useDataFetcher((DataFetcher<?>) fieldDefinition.getDataFetcher()), fieldDefinition.getArguments(), fieldDefinition.getDeprecationReason(), fieldDefinition.getDirectives(), fieldDefinition.getDefinition()); }
@Override public GraphQLFieldDefinition onField(AnnotationsWiringEnvironment environment) { GraphQLFieldDefinition field = (GraphQLFieldDefinition) environment.getElement(); boolean isActive = (boolean) environment.getDirective().getArgument("isActive").getValue(); DataFetcher dataFetcher = DataFetcherFactories.wrapDataFetcher(field.getDataFetcher(), (((dataFetchingEnvironment, value) -> { if (value instanceof String && isActive) { return ((String) value).toUpperCase(); } return value; }))); return field.transform(builder -> builder.dataFetcher(dataFetcher)); } }
@SuppressWarnings("serial") @Test public void testMethodOnlyFields() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().add(new TestTypeMapper()).addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<MethodOnlyFields>() { }.getType()); assertEquals(MethodOnlyFields.class.getSimpleName(), objectType.getName()); assertEquals(2, objectType.getFieldDefinitions().size()); assertNotNull(objectType.getFieldDefinition("stringField")); assertEquals(Scalars.GraphQLString, objectType.getFieldDefinition("stringField").getType()); assertNotNull(objectType.getFieldDefinition("stringList")); assertEquals(GraphQLList.class, objectType.getFieldDefinition("stringList").getType().getClass()); assertEquals(Scalars.GraphQLString, ((GraphQLList) objectType.getFieldDefinition("stringList").getType()).getWrappedType()); assertNull(objectType.getFieldDefinition("ignoredObject")); assertEquals(DefaultMethodDataFetcher.class, objectType.getFieldDefinition("stringField").getDataFetcher().getClass()); assertEquals(CollectionConverterDataFetcher.class, objectType.getFieldDefinition("stringList").getDataFetcher().getClass()); }
@SuppressWarnings("serial") @Test public void testMethodBasedFields() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().add(new TestTypeMapper()).addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<MethodBasedFields>() { }.getType()); assertEquals(MethodBasedFields.class.getSimpleName(), objectType.getName()); assertEquals(2, objectType.getFieldDefinitions().size()); assertNotNull(objectType.getFieldDefinition("stringField")); assertEquals(Scalars.GraphQLString, objectType.getFieldDefinition("stringField").getType()); assertNotNull(objectType.getFieldDefinition("stringList")); assertEquals(GraphQLList.class, objectType.getFieldDefinition("stringList").getType().getClass()); assertEquals(Scalars.GraphQLString, ((GraphQLList) objectType.getFieldDefinition("stringList").getType()).getWrappedType()); assertNull(objectType.getFieldDefinition("ignoredObject")); assertEquals(DefaultMethodDataFetcher.class, objectType.getFieldDefinition("stringField").getDataFetcher().getClass()); assertEquals(CollectionConverterDataFetcher.class, objectType.getFieldDefinition("stringList").getDataFetcher().getClass()); }
public static Builder notNull (Builder aSource) { GraphQLFieldDefinition field = aSource.build(); return create(field.getName()).argument(field.getArguments()) .type(new GraphQLNonNull(field.getType())) .dataFetcher(field.getDataFetcher()) .definition(field.getDefinition()) .deprecate(field.getDeprecationReason()) .description(field.getDescription()); }
@Override public GraphQLFieldDefinition onField(AnnotationsWiringEnvironment environment) { GraphQLFieldDefinition field = (GraphQLFieldDefinition) environment.getElement(); String suffix = (String) environment.getDirective().getArgument("suffix").getValue(); DataFetcher dataFetcher = DataFetcherFactories.wrapDataFetcher(field.getDataFetcher(), (((dataFetchingEnvironment, value) -> { if (value instanceof String) { return value + suffix; } return value; }))); return field.transform(builder -> builder.dataFetcher(dataFetcher)); } }
if (graphQLFieldDefinition.getName().equals("data")) { willReturn("data").given(field).getName(); String value = (String)graphQLFieldDefinition.getDataFetcher().get(environment); assertEquals(":value1:1234", value); } else if (graphQLFieldDefinition.getName().equals("dataNoSpring")) { willReturn("dataNoSpring").given(field).getName(); String value = (String)graphQLFieldDefinition.getDataFetcher().get(environment); assertEquals("data value", value); } else if (graphQLFieldDefinition.getName().equals("fieldTest")) { willReturn("fieldTest").given(field).getName(); String value = (String)graphQLFieldDefinition.getDataFetcher().get(environment); assertEquals(":Hello World!", value); } else {
context.setClientMutationId(innerEnv.getArgument(CLIENT_MUTATION_ID)); return mutation.getDataFetcher().get(innerEnv); }) .build();
@SuppressWarnings("serial") @Test public void testGenericMapTypeMapping() { assertGenericMapTypeMapping("Map_String_String", Scalars.GraphQLString, graphQLObjectMapper.getOutputType(new TypeToken<Map<String, String>>() { }.getType())); assertGenericMapTypeMapping("Map_Integer_Integer", Scalars.GraphQLInt, graphQLObjectMapper.getOutputType(new TypeToken<Map<Integer, Integer>>() { }.getType())); assertGenericMapTypeMapping("Map_Long_Long", Scalars.GraphQLLong, graphQLObjectMapper.getOutputType(new TypeToken<Map<Long, Long>>() { }.getType())); assertGenericMapTypeMapping("Map_Float_Float", Scalars.GraphQLFloat, graphQLObjectMapper.getOutputType(new TypeToken<Map<Float, Float>>() { }.getType())); assertGenericMapTypeMapping("Map_Double_Double", Scalars.GraphQLFloat, graphQLObjectMapper.getOutputType(new TypeToken<Map<Double, Double>>() { }.getType())); assertGenericMapTypeMapping("Map_Boolean_Boolean", Scalars.GraphQLBoolean, graphQLObjectMapper.getOutputType(new TypeToken<Map<Boolean, Boolean>>() { }.getType())); assertGenericMapTypeMapping("Map_CollectionsTestObject_CollectionsTestObject", expectedObjectType, graphQLObjectMapper.getOutputType(new TypeToken<Map<CollectionsTestObject, CollectionsTestObject>>() { }.getType())); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(GenericMapTestObject.class); assertNotNull(objectType.getFieldDefinition("mapField").getDataFetcher()); assertEquals(MapConverterDataFetcher.class, objectType.getFieldDefinition("mapField").getDataFetcher().getClass()); }