|
47 | 47 | @Component
|
48 | 48 | public class CodeGenerator {
|
49 | 49 |
|
50 |
| - // Templates for both client and server generation |
51 |
| - private static final String PATH_VELOCITY_TEMPLATE_OBJECT = "templates/object_type.vm.java"; |
52 |
| - private static final String PATH_VELOCITY_TEMPLATE_INTERFACE = "templates/interface_type.vm.java"; |
53 |
| - private static final String PATH_VELOCITY_TEMPLATE_ENUM = "templates/enum_type.vm.java"; |
54 |
| - private static final String PATH_VELOCITY_TEMPLATE_UNION = "templates/union_type.vm.java"; |
55 |
| - // Templates for client generation only |
56 |
| - private static final String PATH_VELOCITY_TEMPLATE_CUSTOM_SCALAR_REGISTRY_INITIALIZER = "templates/client_CustomScalarRegistryInitializer.vm.java"; |
57 |
| - private static final String PATH_VELOCITY_TEMPLATE_QUERY_MUTATION_SUBSCRIPTION = "templates/client_query_mutation_subscription_type.vm.java"; |
58 |
| - private static final String PATH_VELOCITY_TEMPLATE_QUERY_TARGET_TYPE = "templates/client_query_target_type.vm.java"; |
59 |
| - private static final String PATH_VELOCITY_TEMPLATE_JACKSON_DESERIALIZER = "templates/client_jackson_deserialize.vm.java"; |
60 |
| - // Templates for server generation only |
61 |
| - private static final String PATH_VELOCITY_TEMPLATE_BATCHLOADERDELEGATE = "templates/server_BatchLoaderDelegate.vm.java"; |
62 |
| - private static final String PATH_VELOCITY_TEMPLATE_BATCHLOADERDELEGATEIMPL = "templates/server_BatchLoaderDelegateImpl.vm.java"; |
63 |
| - // private static final String PATH_VELOCITY_TEMPLATE_CUSTOM_SCALARS = "templates/server_GraphQLScalarType.vm.java"; |
64 |
| - private static final String PATH_VELOCITY_TEMPLATE_DATAFETCHER = "templates/server_GraphQLDataFetchers.vm.java"; |
65 |
| - private static final String PATH_VELOCITY_TEMPLATE_DATAFETCHERDELEGATE = "templates/server_GraphQLDataFetchersDelegate.vm.java"; |
66 |
| - private static final String PATH_VELOCITY_TEMPLATE_GRAPHQLUTIL = "templates/server_GraphQLUtil.vm.java"; |
67 |
| - private static final String PATH_VELOCITY_TEMPLATE_PROVIDER = "templates/server_GraphQLProvider.vm.java"; |
68 |
| - private static final String PATH_VELOCITY_TEMPLATE_SERVER = "templates/server_GraphQLServerMain.vm.java"; |
69 |
| - |
70 | 50 | public static final String FILE_TYPE_JACKSON_DESERIALIZER = "Jackson deserializer";
|
71 | 51 |
|
72 | 52 | @Autowired
|
@@ -103,33 +83,33 @@ public CodeGenerator() {
|
103 | 83 | public int generateCode() throws IOException {
|
104 | 84 |
|
105 | 85 | int i = 0;
|
106 |
| - i += generateTargetFiles(documentParser.getObjectTypes(), "object", PATH_VELOCITY_TEMPLATE_OBJECT); |
107 |
| - i += generateTargetFiles(documentParser.getInterfaceTypes(), "interface", PATH_VELOCITY_TEMPLATE_INTERFACE); |
108 |
| - i += generateTargetFiles(documentParser.getUnionTypes(), "union", PATH_VELOCITY_TEMPLATE_UNION); |
109 |
| - i += generateTargetFiles(documentParser.getEnumTypes(), "enum", PATH_VELOCITY_TEMPLATE_ENUM); |
| 86 | + i += generateTargetFiles(documentParser.getObjectTypes(), "object", resolveTemplate(CodeTemplate.OBJECT)); |
| 87 | + i += generateTargetFiles(documentParser.getInterfaceTypes(), "interface", resolveTemplate(CodeTemplate.INTERFACE)); |
| 88 | + i += generateTargetFiles(documentParser.getUnionTypes(), "union", resolveTemplate(CodeTemplate.UNION)); |
| 89 | + i += generateTargetFiles(documentParser.getEnumTypes(), "enum", resolveTemplate(CodeTemplate.ENUM)); |
110 | 90 |
|
111 | 91 | switch (pluginConfiguration.getMode()) {
|
112 | 92 | case server:
|
113 | 93 | i += generateServerFiles();
|
114 | 94 | break;
|
115 | 95 | case client:
|
116 | 96 | i += generateTargetFiles(documentParser.getQueryTypes(), "query",
|
117 |
| - PATH_VELOCITY_TEMPLATE_QUERY_MUTATION_SUBSCRIPTION); |
| 97 | + resolveTemplate(CodeTemplate.QUERY_MUTATION_SUBSCRIPTION)); |
118 | 98 | i += generateTargetFiles(documentParser.getMutationTypes(), "mutation",
|
119 |
| - PATH_VELOCITY_TEMPLATE_QUERY_MUTATION_SUBSCRIPTION); |
| 99 | + resolveTemplate(CodeTemplate.QUERY_MUTATION_SUBSCRIPTION)); |
120 | 100 | i += generateTargetFiles(documentParser.getSubscriptionTypes(), "subscription",
|
121 |
| - PATH_VELOCITY_TEMPLATE_QUERY_MUTATION_SUBSCRIPTION); |
| 101 | + resolveTemplate(CodeTemplate.QUERY_MUTATION_SUBSCRIPTION)); |
122 | 102 |
|
123 | 103 | // Files for Custom Scalars
|
124 | 104 | VelocityContext context = new VelocityContext();
|
125 | 105 | context.put("pluginConfiguration", pluginConfiguration);
|
126 | 106 | context.put("customScalars", documentParser.customScalars);
|
127 | 107 | i += generateOneFile(getJavaFile("CustomScalarRegistryInitializer"),
|
128 | 108 | "Generating CustomScalarRegistryInitializer", context,
|
129 |
| - PATH_VELOCITY_TEMPLATE_CUSTOM_SCALAR_REGISTRY_INITIALIZER); |
| 109 | + resolveTemplate(CodeTemplate.CUSTOM_SCALAR_REGISTRY_INITIALIZER)); |
130 | 110 | //
|
131 | 111 | i += generateTargetFiles(documentParser.customScalars, FILE_TYPE_JACKSON_DESERIALIZER,
|
132 |
| - PATH_VELOCITY_TEMPLATE_JACKSON_DESERIALIZER); |
| 112 | + resolveTemplate(CodeTemplate.JACKSON_DESERIALIZER)); |
133 | 113 | i += generateQueryTargetType();
|
134 | 114 | break;
|
135 | 115 | }
|
@@ -223,7 +203,7 @@ int generateQueryTargetType() {
|
223 | 203 | context.put("objectName", objectName);
|
224 | 204 | context.put("query", query);
|
225 | 205 |
|
226 |
| - i += generateOneFile(targetFile, msg, context, PATH_VELOCITY_TEMPLATE_QUERY_TARGET_TYPE); |
| 206 | + i += generateOneFile(targetFile, msg, context, resolveTemplate(CodeTemplate.QUERY_TARGET_TYPE)); |
227 | 207 | }
|
228 | 208 | }
|
229 | 209 | return i;
|
@@ -253,28 +233,28 @@ int generateServerFiles() throws IOException {
|
253 | 233 |
|
254 | 234 | int ret = 0;
|
255 | 235 | ret += generateOneFile(getJavaFile("GraphQLServerMain"), "generating GraphQLServerMain", context,
|
256 |
| - PATH_VELOCITY_TEMPLATE_SERVER); |
| 236 | + resolveTemplate(CodeTemplate.SERVER)); |
257 | 237 | ret += generateOneFile(getJavaFile("GraphQLProvider"), "generating GraphQLProvider", context,
|
258 |
| - PATH_VELOCITY_TEMPLATE_PROVIDER); |
| 238 | + resolveTemplate(CodeTemplate.PROVIDER)); |
259 | 239 | ret += generateOneFile(getJavaFile("GraphQLDataFetchers"), "generating GraphQLDataFetchers", context,
|
260 |
| - PATH_VELOCITY_TEMPLATE_DATAFETCHER); |
| 240 | + resolveTemplate(CodeTemplate.DATAFETCHER)); |
261 | 241 | ret += generateOneFile(getJavaFile("GraphQLUtil"), "generating GraphQLUtil", context,
|
262 |
| - PATH_VELOCITY_TEMPLATE_GRAPHQLUTIL); |
| 242 | + resolveTemplate(CodeTemplate.GRAPHQLUTIL)); |
263 | 243 |
|
264 | 244 | for (DataFetchersDelegate dataFetcherDelegate : documentParser.dataFetchersDelegates) {
|
265 | 245 | context.put("dataFetcherDelegate", dataFetcherDelegate);
|
266 | 246 | ret += generateOneFile(getJavaFile(dataFetcherDelegate.getPascalCaseName()),
|
267 | 247 | "generating " + dataFetcherDelegate.getPascalCaseName(), context,
|
268 |
| - PATH_VELOCITY_TEMPLATE_DATAFETCHERDELEGATE); |
| 248 | + resolveTemplate(CodeTemplate.DATAFETCHERDELEGATE)); |
269 | 249 | }
|
270 | 250 |
|
271 | 251 | ret += generateOneFile(getJavaFile("BatchLoaderDelegate"), "generating BatchLoaderDelegate", context,
|
272 |
| - PATH_VELOCITY_TEMPLATE_BATCHLOADERDELEGATE); |
| 252 | + resolveTemplate(CodeTemplate.BATCHLOADERDELEGATE)); |
273 | 253 | for (BatchLoader batchLoader : documentParser.batchLoaders) {
|
274 | 254 | String name = "BatchLoaderDelegate" + batchLoader.getType().getClassSimpleName() + "Impl";
|
275 | 255 | context.put("batchLoader", batchLoader);
|
276 | 256 | ret += generateOneFile(getJavaFile(name), "generating " + name, context,
|
277 |
| - PATH_VELOCITY_TEMPLATE_BATCHLOADERDELEGATEIMPL); |
| 257 | + resolveTemplate(CodeTemplate.BATCHLOADERDELEGATEIMPL)); |
278 | 258 | }
|
279 | 259 |
|
280 | 260 | return ret;
|
@@ -393,4 +373,18 @@ List<String> getImportList() {
|
393 | 373 | }
|
394 | 374 | return ret;
|
395 | 375 | }
|
| 376 | + |
| 377 | + /** |
| 378 | + * Resolves the template for the given key |
| 379 | + * @param templateKey |
| 380 | + * @param defaultValue |
| 381 | + * @return |
| 382 | + */ |
| 383 | + protected String resolveTemplate(CodeTemplate template) { |
| 384 | + if(pluginConfiguration.getTemplates().containsKey(template.name())) { |
| 385 | + return pluginConfiguration.getTemplates().get(template.name()); |
| 386 | + } else { |
| 387 | + return template.getDefaultValue(); |
| 388 | + } |
| 389 | + } |
396 | 390 | }
|
0 commit comments