Skip to content

Commit fdf7ce8

Browse files
committed
Option to register data fetchers on GraphQLCodeRegistry
Closes gh-312
1 parent c55ffb1 commit fdf7ce8

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import graphql.schema.DataFetcher;
3333
import graphql.schema.DataFetchingEnvironment;
3434
import graphql.schema.FieldCoordinates;
35+
import graphql.schema.GraphQLCodeRegistry;
3536
import graphql.schema.idl.RuntimeWiring;
3637
import org.apache.commons.logging.Log;
3738
import org.apache.commons.logging.LogFactory;
@@ -72,6 +73,10 @@
7273
* annotated handler methods in {@link Controller @Controller} classes and
7374
* registers them as {@link DataFetcher}s.
7475
*
76+
* <p>In addition to initializing a {@link RuntimeWiring.Builder}, this class, also
77+
* provides an option to {@link #configure(GraphQLCodeRegistry.Builder) configure}
78+
* data fetchers on a {@link GraphQLCodeRegistry.Builder}.
79+
*
7580
* @author Rossen Stoyanchev
7681
* @author Brian Clozel
7782
* @since 1.0.0
@@ -185,7 +190,7 @@ public void afterPropertiesSet() {
185190
}
186191

187192
@Override
188-
public void configure(RuntimeWiring.Builder builder) {
193+
public void configure(RuntimeWiring.Builder runtimeWiringBuilder) {
189194
Assert.state(this.argumentResolvers != null, "`argumentResolvers` is not initialized");
190195

191196
findHandlerMethods().forEach((info) -> {
@@ -197,7 +202,7 @@ public void configure(RuntimeWiring.Builder builder) {
197202
String dataLoaderKey = registerBatchLoader(info);
198203
dataFetcher = new BatchMappingDataFetcher(dataLoaderKey);
199204
}
200-
builder.type(info.getCoordinates().getTypeName(), typeBuilder ->
205+
runtimeWiringBuilder.type(info.getCoordinates().getTypeName(), typeBuilder ->
201206
typeBuilder.dataFetcher(info.getCoordinates().getFieldName(), dataFetcher));
202207
});
203208
}
@@ -372,6 +377,26 @@ else if (clazz.equals(Mono.class) || clazz.equals(Map.class)) {
372377
return dataLoaderKey;
373378
}
374379

380+
/**
381+
* Alternative to {@link #configure(RuntimeWiring.Builder)} that registers
382+
* data fetchers in a {@link GraphQLCodeRegistry.Builder}. This could be
383+
* used with programmatic creation of {@link graphql.schema.GraphQLSchema}.
384+
*/
385+
@SuppressWarnings("rawtypes")
386+
public void configure(GraphQLCodeRegistry.Builder codeRegistryBuilder) {
387+
388+
RuntimeWiring.Builder wiringBuilder = RuntimeWiring.newRuntimeWiring();
389+
configure(wiringBuilder);
390+
RuntimeWiring runtimeWiring = wiringBuilder.build();
391+
392+
runtimeWiring.getDataFetchers().forEach((typeName, dataFetcherMap) -> {
393+
dataFetcherMap.forEach((key, value) -> {
394+
FieldCoordinates coordinates = FieldCoordinates.coordinates(typeName, key);
395+
codeRegistryBuilder.dataFetcher(coordinates, (DataFetcher<?>) value);
396+
});
397+
});
398+
}
399+
375400

376401
private static class MappingInfo {
377402

0 commit comments

Comments
 (0)