Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Commit fc5fd02

Browse files
committed
Added directive wiring
1 parent 8c9a9f2 commit fc5fd02

File tree

1 file changed

+82
-71
lines changed

1 file changed

+82
-71
lines changed
Lines changed: 82 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package com.oembedler.moon.graphql.boot;
22

3-
import com.coxautodev.graphql.tools.*;
3+
import com.coxautodev.graphql.tools.GraphQLResolver;
4+
import com.coxautodev.graphql.tools.PerFieldObjectMapperProvider;
5+
import com.coxautodev.graphql.tools.SchemaParser;
6+
import com.coxautodev.graphql.tools.SchemaParserBuilder;
7+
import com.coxautodev.graphql.tools.SchemaParserDictionary;
8+
import com.coxautodev.graphql.tools.SchemaParserOptions;
9+
import com.coxautodev.graphql.tools.TypeDefinitionFactory;
410
import com.fasterxml.jackson.databind.ObjectMapper;
511
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
612
import com.fasterxml.jackson.module.kotlin.KotlinModule;
713
import graphql.schema.GraphQLScalarType;
814
import graphql.schema.GraphQLSchema;
15+
import graphql.schema.idl.SchemaDirectiveWiring;
916
import graphql.servlet.config.GraphQLSchemaProvider;
17+
import java.io.IOException;
18+
import java.util.List;
1019
import org.springframework.beans.factory.annotation.Autowired;
1120
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
1221
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -19,9 +28,6 @@
1928
import org.springframework.context.annotation.Bean;
2029
import org.springframework.context.annotation.Configuration;
2130

22-
import java.io.IOException;
23-
import java.util.List;
24-
2531
/**
2632
* @author Andrew Potter
2733
*/
@@ -31,91 +37,96 @@
3137
@EnableConfigurationProperties(GraphQLToolsProperties.class)
3238
public class GraphQLJavaToolsAutoConfiguration {
3339

34-
@Autowired(required = false)
35-
private SchemaParserDictionary dictionary;
40+
@Autowired(required = false)
41+
private SchemaParserDictionary dictionary;
3642

37-
@Autowired(required = false)
38-
private GraphQLScalarType[] scalars;
43+
@Autowired(required = false)
44+
private GraphQLScalarType[] scalars;
3945

40-
@Autowired(required = false)
41-
private List<SchemaDirective> directives;
46+
@Autowired(required = false)
47+
private List<SchemaDirective> directives;
4248

43-
@Autowired(required = false)
44-
private List<TypeDefinitionFactory> typeDefinitionFactories;
49+
@Autowired(required = false)
50+
private List<SchemaDirectiveWiring> directiveWirings;
4551

52+
@Autowired(required = false)
53+
private List<TypeDefinitionFactory> typeDefinitionFactories;
4654

47-
@Autowired
48-
private GraphQLToolsProperties props;
55+
@Autowired
56+
private GraphQLToolsProperties props;
4957

50-
@Bean
51-
@ConditionalOnMissingBean
52-
public SchemaStringProvider schemaStringProvider() {
53-
return new ClasspathResourceSchemaStringProvider(props.getSchemaLocationPattern());
54-
}
58+
@Bean
59+
@ConditionalOnMissingBean
60+
public SchemaStringProvider schemaStringProvider() {
61+
return new ClasspathResourceSchemaStringProvider(props.getSchemaLocationPattern());
62+
}
5563

56-
@Bean
57-
@ConditionalOnMissingBean
58-
@ConfigurationProperties("graphql.tools.schema-parser-options")
59-
public SchemaParserOptions.Builder optionsBuilder(
60-
PerFieldObjectMapperProvider perFieldObjectMapperProvider
61-
) {
62-
SchemaParserOptions.Builder optionsBuilder = SchemaParserOptions.newOptions();
64+
@Bean
65+
@ConditionalOnMissingBean
66+
@ConfigurationProperties("graphql.tools.schema-parser-options")
67+
public SchemaParserOptions.Builder optionsBuilder(
68+
PerFieldObjectMapperProvider perFieldObjectMapperProvider
69+
) {
70+
SchemaParserOptions.Builder optionsBuilder = SchemaParserOptions.newOptions();
6371

64-
if (perFieldObjectMapperProvider != null) {
65-
optionsBuilder.objectMapperProvider(perFieldObjectMapperProvider);
66-
}
67-
optionsBuilder.introspectionEnabled(props.isIntrospectionEnabled());
68-
69-
if (typeDefinitionFactories != null) {
70-
typeDefinitionFactories.forEach(optionsBuilder::typeDefinitionFactory);
71-
}
72+
if (perFieldObjectMapperProvider != null) {
73+
optionsBuilder.objectMapperProvider(perFieldObjectMapperProvider);
74+
}
75+
optionsBuilder.introspectionEnabled(props.isIntrospectionEnabled());
7276

73-
return optionsBuilder;
77+
if (typeDefinitionFactories != null) {
78+
typeDefinitionFactories.forEach(optionsBuilder::typeDefinitionFactory);
7479
}
7580

76-
@Bean
77-
@ConditionalOnBean({GraphQLResolver.class})
78-
@ConditionalOnMissingBean
79-
public SchemaParser schemaParser(
80-
List<GraphQLResolver<?>> resolvers,
81-
SchemaStringProvider schemaStringProvider,
82-
SchemaParserOptions.Builder optionsBuilder
83-
) throws IOException {
84-
SchemaParserBuilder builder = dictionary != null ? new SchemaParserBuilder(dictionary) : new SchemaParserBuilder();
81+
return optionsBuilder;
82+
}
8583

86-
List<String> schemaStrings = schemaStringProvider.schemaStrings();
87-
schemaStrings.forEach(builder::schemaString);
84+
@Bean
85+
@ConditionalOnBean({GraphQLResolver.class})
86+
@ConditionalOnMissingBean
87+
public SchemaParser schemaParser(
88+
List<GraphQLResolver<?>> resolvers,
89+
SchemaStringProvider schemaStringProvider,
90+
SchemaParserOptions.Builder optionsBuilder
91+
) throws IOException {
92+
SchemaParserBuilder builder = dictionary != null ? new SchemaParserBuilder(dictionary) : new SchemaParserBuilder();
8893

89-
if (scalars != null) {
90-
builder.scalars(scalars);
91-
}
94+
List<String> schemaStrings = schemaStringProvider.schemaStrings();
95+
schemaStrings.forEach(builder::schemaString);
9296

93-
builder.options(optionsBuilder.build());
97+
if (scalars != null) {
98+
builder.scalars(scalars);
99+
}
94100

95-
if (directives != null) {
96-
directives.forEach(it -> builder.directive(it.getName(), it.getDirective()));
97-
}
101+
builder.options(optionsBuilder.build());
98102

99-
return builder
100-
.resolvers(resolvers)
101-
.build();
103+
if (directives != null) {
104+
directives.forEach(it -> builder.directive(it.getName(), it.getDirective()));
102105
}
103106

104-
@Bean
105-
@ConditionalOnMissingBean
106-
@ConditionalOnProperty(value = "graphql.tools.use-default-objectmapper", havingValue = "true", matchIfMissing = true)
107-
public PerFieldObjectMapperProvider perFieldObjectMapperProvider(ObjectMapper objectMapper) {
108-
objectMapper
109-
.registerModule(new Jdk8Module())
110-
.registerModule(new KotlinModule());
111-
return fieldDefinition -> objectMapper;
107+
if (directiveWirings != null) {
108+
directiveWirings.forEach(builder::directiveWiring);
112109
}
113110

114-
115-
@Bean
116-
@ConditionalOnBean(SchemaParser.class)
117-
@ConditionalOnMissingBean({GraphQLSchema.class, GraphQLSchemaProvider.class})
118-
public GraphQLSchema graphQLSchema(SchemaParser schemaParser) {
119-
return schemaParser.makeExecutableSchema();
120-
}
111+
return builder
112+
.resolvers(resolvers)
113+
.build();
114+
}
115+
116+
@Bean
117+
@ConditionalOnMissingBean
118+
@ConditionalOnProperty(value = "graphql.tools.use-default-objectmapper", havingValue = "true", matchIfMissing = true)
119+
public PerFieldObjectMapperProvider perFieldObjectMapperProvider(ObjectMapper objectMapper) {
120+
objectMapper
121+
.registerModule(new Jdk8Module())
122+
.registerModule(new KotlinModule());
123+
return fieldDefinition -> objectMapper;
124+
}
125+
126+
@Bean
127+
@ConditionalOnBean(SchemaParser.class)
128+
@ConditionalOnMissingBean({GraphQLSchema.class, GraphQLSchemaProvider.class})
129+
public GraphQLSchema graphQLSchema(SchemaParser schemaParser) {
130+
return schemaParser.makeExecutableSchema();
131+
}
121132
}

0 commit comments

Comments
 (0)