Skip to content

Commit 1cf0389

Browse files
committed
Refactor template usages, introduce FreeMarkerTemplateType
1 parent 4bda965 commit 1cf0389

File tree

5 files changed

+70
-46
lines changed

5 files changed

+70
-46
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.kobylynskyi.graphql.codegen;
2+
3+
enum FreeMarkerTemplateType {
4+
5+
TYPE,
6+
ENUM,
7+
UNION,
8+
REQUEST,
9+
RESPONSE,
10+
INTERFACE,
11+
OPERATIONS,
12+
PARAMETRIZED_INPUT,
13+
RESPONSE_PROJECTION;
14+
15+
}

src/main/java/com/kobylynskyi/graphql/codegen/FreeMarkerTemplatesRegistry.java

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,22 @@
99
import freemarker.template.Version;
1010

1111
import java.io.IOException;
12-
import java.util.HashMap;
13-
import java.util.Map;
12+
import java.util.EnumMap;
13+
14+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.ENUM;
15+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.INTERFACE;
16+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.OPERATIONS;
17+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.PARAMETRIZED_INPUT;
18+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.REQUEST;
19+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.RESPONSE;
20+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.RESPONSE_PROJECTION;
21+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.TYPE;
22+
import static com.kobylynskyi.graphql.codegen.FreeMarkerTemplateType.UNION;
1423

1524
class FreeMarkerTemplatesRegistry {
1625

1726
private static final Version FREEMARKER_TEMPLATE_VERSION = Configuration.VERSION_2_3_30;
18-
private static final Map<String, Map<String, Template>> templateMap = new HashMap<>();
27+
private static final EnumMap<GeneratedLanguage, EnumMap<FreeMarkerTemplateType, Template>> templateMap = new EnumMap<>(GeneratedLanguage.class);
1928

2029
static {
2130
BeansWrapper beansWrapper = new BeansWrapper(FREEMARKER_TEMPLATE_VERSION);
@@ -28,29 +37,29 @@ class FreeMarkerTemplatesRegistry {
2837
configuration.setSharedVariable("statics", beansWrapper.getStaticModels());
2938

3039
try {
31-
Map<String, Template> javaTemplates = new HashMap<>();
32-
javaTemplates.put("typeTemplate", configuration.getTemplate("templates/javaClassGraphqlType.ftl"));
33-
javaTemplates.put("enumTemplate", configuration.getTemplate("templates/javaClassGraphqlEnum.ftl"));
34-
javaTemplates.put("unionTemplate", configuration.getTemplate("templates/javaClassGraphqlUnion.ftl"));
35-
javaTemplates.put("requestTemplate", configuration.getTemplate("templates/javaClassGraphqlRequest.ftl"));
36-
javaTemplates.put("responseTemplate", configuration.getTemplate("templates/javaClassGraphqlResponse.ftl"));
37-
javaTemplates.put("interfaceTemplate", configuration.getTemplate("templates/javaClassGraphqlInterface.ftl"));
38-
javaTemplates.put("operationsTemplate", configuration.getTemplate("templates/javaClassGraphqlOperations.ftl"));
39-
javaTemplates.put("parametrizedInputTemplate", configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl"));
40-
javaTemplates.put("responseProjectionTemplate", configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl"));
41-
templateMap.put(GeneratedLanguage.JAVA.name(), javaTemplates);
40+
EnumMap<FreeMarkerTemplateType, Template> javaTemplates = new EnumMap<>(FreeMarkerTemplateType.class);
41+
javaTemplates.put(TYPE, configuration.getTemplate("templates/javaClassGraphqlType.ftl"));
42+
javaTemplates.put(ENUM, configuration.getTemplate("templates/javaClassGraphqlEnum.ftl"));
43+
javaTemplates.put(UNION, configuration.getTemplate("templates/javaClassGraphqlUnion.ftl"));
44+
javaTemplates.put(REQUEST, configuration.getTemplate("templates/javaClassGraphqlRequest.ftl"));
45+
javaTemplates.put(RESPONSE, configuration.getTemplate("templates/javaClassGraphqlResponse.ftl"));
46+
javaTemplates.put(INTERFACE, configuration.getTemplate("templates/javaClassGraphqlInterface.ftl"));
47+
javaTemplates.put(OPERATIONS, configuration.getTemplate("templates/javaClassGraphqlOperations.ftl"));
48+
javaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl"));
49+
javaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl"));
50+
templateMap.put(GeneratedLanguage.JAVA, javaTemplates);
4251

43-
Map<String, Template> scalaTemplates = new HashMap<>();
44-
scalaTemplates.put("typeTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlType.ftl"));
45-
scalaTemplates.put("enumTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlEnum.ftl"));
46-
scalaTemplates.put("unionTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlUnion.ftl"));
47-
scalaTemplates.put("requestTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlRequest.ftl"));
48-
scalaTemplates.put("responseTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponse.ftl"));
49-
scalaTemplates.put("interfaceTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlInterface.ftl"));
50-
scalaTemplates.put("operationsTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlOperations.ftl"));
51-
scalaTemplates.put("parametrizedInputTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlParametrizedInput.ftl"));
52-
scalaTemplates.put("responseProjectionTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponseProjection.ftl"));
53-
templateMap.put(GeneratedLanguage.SCALA.name(), scalaTemplates);
52+
EnumMap<FreeMarkerTemplateType, Template> scalaTemplates = new EnumMap<>(FreeMarkerTemplateType.class);
53+
scalaTemplates.put(TYPE, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlType.ftl"));
54+
scalaTemplates.put(ENUM, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlEnum.ftl"));
55+
scalaTemplates.put(UNION, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlUnion.ftl"));
56+
scalaTemplates.put(REQUEST, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlRequest.ftl"));
57+
scalaTemplates.put(RESPONSE, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponse.ftl"));
58+
scalaTemplates.put(INTERFACE, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlInterface.ftl"));
59+
scalaTemplates.put(OPERATIONS, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlOperations.ftl"));
60+
scalaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlParametrizedInput.ftl"));
61+
scalaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponseProjection.ftl"));
62+
templateMap.put(GeneratedLanguage.SCALA, scalaTemplates);
5463

5564

5665
} catch (IOException e) {
@@ -61,8 +70,8 @@ class FreeMarkerTemplatesRegistry {
6170
private FreeMarkerTemplatesRegistry() {
6271
}
6372

64-
public static Template getTemplateWithLang(GeneratedLanguage generatedLanguage, String templateName) {
65-
return templateMap.get(generatedLanguage.name()).get(templateName);
73+
public static Template getTemplateWithLang(GeneratedLanguage generatedLanguage, FreeMarkerTemplateType templateType) {
74+
return templateMap.get(generatedLanguage).get(templateType);
6675
}
6776

6877
}

src/main/java/com/kobylynskyi/graphql/codegen/GraphQLCodegen.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -298,28 +298,28 @@ private List<File> processDefinitions(ExtendedDocument document) {
298298
private List<File> generateUnion(MappingContext mappingContext, ExtendedUnionTypeDefinition definition) {
299299
List<File> generatedFiles = new ArrayList<>();
300300
Map<String, Object> dataModel = UnionDefinitionToDataModelMapper.map(mappingContext, definition);
301-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "unionTemplate", dataModel, outputDir));
301+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.UNION, dataModel, outputDir));
302302

303303
if (Boolean.TRUE.equals(mappingConfig.getGenerateClient())) {
304304
Map<String, Object> responseProjDataModel = RequestResponseDefinitionToDataModelMapper.mapResponseProjection(mappingContext, definition);
305-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "responseProjectionTemplate", responseProjDataModel, outputDir));
305+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.RESPONSE_PROJECTION, responseProjDataModel, outputDir));
306306
}
307307
return generatedFiles;
308308
}
309309

310310
private List<File> generateInterface(MappingContext mappingContext, ExtendedInterfaceTypeDefinition definition) {
311311
List<File> generatedFiles = new ArrayList<>();
312312
Map<String, Object> dataModel = InterfaceDefinitionToDataModelMapper.map(mappingContext, definition);
313-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "interfaceTemplate", dataModel, outputDir));
313+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.INTERFACE, dataModel, outputDir));
314314

315315
if (Boolean.TRUE.equals(mappingConfig.getGenerateClient())) {
316316
Map<String, Object> responseProjDataModel = RequestResponseDefinitionToDataModelMapper.mapResponseProjection(mappingContext, definition);
317-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "responseProjectionTemplate", responseProjDataModel, outputDir));
317+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.RESPONSE_PROJECTION, responseProjDataModel, outputDir));
318318

319319
for (ExtendedFieldDefinition fieldDefinition : definition.getFieldDefinitions()) {
320320
if (!Utils.isEmpty(fieldDefinition.getInputValueDefinitions())) {
321321
Map<String, Object> fieldProjDataModel = RequestResponseDefinitionToDataModelMapper.mapParametrizedInput(mappingContext, fieldDefinition, definition);
322-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "parametrizedInputTemplate", fieldProjDataModel, outputDir));
322+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.PARAMETRIZED_INPUT, fieldProjDataModel, outputDir));
323323
}
324324
}
325325
}
@@ -372,10 +372,10 @@ private List<File> generateClient(MappingContext mappingContext, ExtendedObjectT
372372
List<String> fieldNames = definition.getFieldDefinitions().stream().map(FieldDefinition::getName).collect(toList());
373373
for (ExtendedFieldDefinition operationDef : definition.getFieldDefinitions()) {
374374
Map<String, Object> requestDataModel = RequestResponseDefinitionToDataModelMapper.mapRequest(mappingContext, operationDef, definition.getName(), fieldNames);
375-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "requestTemplate", requestDataModel, outputDir));
375+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.REQUEST, requestDataModel, outputDir));
376376

377377
Map<String, Object> responseDataModel = RequestResponseDefinitionToDataModelMapper.mapResponse(mappingContext, operationDef, definition.getName(), fieldNames);
378-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "responseTemplate", responseDataModel, outputDir));
378+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.RESPONSE, responseDataModel, outputDir));
379379
}
380380
return generatedFiles;
381381
}
@@ -384,29 +384,29 @@ private List<File> generateApis(MappingContext mappingContext, ExtendedObjectTyp
384384
List<File> generatedFiles = new ArrayList<>();
385385
for (ExtendedFieldDefinition operationDef : definition.getFieldDefinitions()) {
386386
Map<String, Object> dataModel = FieldDefinitionsToResolverDataModelMapper.mapRootTypeField(mappingContext, operationDef, definition.getName(), fieldNames);
387-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "operationsTemplate", dataModel, outputDir));
387+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.OPERATIONS, dataModel, outputDir));
388388
}
389389
return generatedFiles;
390390
}
391391

392392
private File generateRootApi(MappingContext mappingContext, ExtendedObjectTypeDefinition definition) {
393393
Map<String, Object> dataModel = FieldDefinitionsToResolverDataModelMapper.mapRootTypeFields(mappingContext, definition);
394-
return GraphQLCodegenFileCreator.generateFile(mappingContext, "operationsTemplate", dataModel, outputDir);
394+
return GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.OPERATIONS, dataModel, outputDir);
395395
}
396396

397397
private List<File> generateType(MappingContext mappingContext, ExtendedObjectTypeDefinition definition) {
398398
List<File> generatedFiles = new ArrayList<>();
399399
Map<String, Object> dataModel = TypeDefinitionToDataModelMapper.map(mappingContext, definition);
400-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "typeTemplate", dataModel, outputDir));
400+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.TYPE, dataModel, outputDir));
401401

402402
if (Boolean.TRUE.equals(mappingConfig.getGenerateClient())) {
403403
Map<String, Object> responseProjDataModel = RequestResponseDefinitionToDataModelMapper.mapResponseProjection(mappingContext, definition);
404-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "responseProjectionTemplate", responseProjDataModel, outputDir));
404+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.RESPONSE_PROJECTION, responseProjDataModel, outputDir));
405405

406406
for (ExtendedFieldDefinition fieldDefinition : definition.getFieldDefinitions()) {
407407
if (!Utils.isEmpty(fieldDefinition.getInputValueDefinitions())) {
408408
Map<String, Object> fieldProjDataModel = RequestResponseDefinitionToDataModelMapper.mapParametrizedInput(mappingContext, fieldDefinition, definition);
409-
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, "parametrizedInputTemplate", fieldProjDataModel, outputDir));
409+
generatedFiles.add(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.PARAMETRIZED_INPUT, fieldProjDataModel, outputDir));
410410
}
411411
}
412412
}
@@ -422,20 +422,20 @@ private Optional<File> generateFieldResolver(MappingContext mappingContext,
422422
.collect(toList());
423423
if (!fieldDefsWithResolvers.isEmpty()) {
424424
Map<String, Object> dataModel = FieldDefinitionsToResolverDataModelMapper.mapToTypeResolver(mappingContext, fieldDefsWithResolvers, parentDefinition.getName());
425-
return Optional.of(GraphQLCodegenFileCreator.generateFile(mappingContext, "operationsTemplate", dataModel, outputDir));
425+
return Optional.of(GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.OPERATIONS, dataModel, outputDir));
426426
}
427427
}
428428
return Optional.empty();
429429
}
430430

431431
private File generateInput(MappingContext mappingContext, ExtendedInputObjectTypeDefinition definition) {
432432
Map<String, Object> dataModel = InputDefinitionToDataModelMapper.map(mappingContext, definition);
433-
return GraphQLCodegenFileCreator.generateFile(mappingContext, "typeTemplate", dataModel, outputDir);
433+
return GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.TYPE, dataModel, outputDir);
434434
}
435435

436436
private File generateEnum(MappingContext mappingContext, ExtendedEnumTypeDefinition definition) {
437437
Map<String, Object> dataModel = EnumDefinitionToDataModelMapper.map(mappingContext, definition);
438-
return GraphQLCodegenFileCreator.generateFile(mappingContext, "enumTemplate", dataModel, outputDir);
438+
return GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.ENUM, dataModel, outputDir);
439439
}
440440

441441
private void initCustomTypeMappings(Collection<ExtendedScalarTypeDefinition> scalarTypeDefinitions) {

src/main/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenFileCreator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class GraphQLCodegenFileCreator {
2525
private GraphQLCodegenFileCreator() {
2626
}
2727

28-
static File generateFile(MappingContext mappingContext, String templateName, Map<String, Object> dataModel, File outputDir) {
28+
static File generateFile(MappingContext mappingContext, FreeMarkerTemplateType templateType, Map<String, Object> dataModel, File outputDir) {
2929
GeneratedLanguage language = mappingContext.getGeneratedLanguage();
3030
String fileName = getGeneratedFileName(dataModel, language);
3131
File fileOutputDir = getFileTargetDirectory(dataModel, outputDir);
@@ -34,7 +34,7 @@ static File generateFile(MappingContext mappingContext, String templateName, Map
3434
if (!javaSourceFile.createNewFile()) {
3535
throw new FileAlreadyExistsException("File already exists: " + javaSourceFile.getPath());
3636
}
37-
Template template = FreeMarkerTemplatesRegistry.getTemplateWithLang(language, templateName);
37+
Template template = FreeMarkerTemplatesRegistry.getTemplateWithLang(language, templateType);
3838
template.process(dataModel, new FileWriter(javaSourceFile));
3939
} catch (Exception e) {
4040
throw new UnableToCreateFileException(e);

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenFileCreatorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ void generateFile() throws IOException {
4141
dataModel.put(DataModelFields.ANNOTATIONS, Collections.emptyList());
4242
dataModel.put(DataModelFields.GENERATED_INFO, new GeneratedInformation());
4343

44-
GraphQLCodegenFileCreator.generateFile(mappingContext, "enumTemplate", dataModel, OUTPUT_DIR);
44+
GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.ENUM, dataModel, OUTPUT_DIR);
4545
assertThrows(UnableToCreateFileException.class,
46-
() -> GraphQLCodegenFileCreator.generateFile(mappingContext, "enumTemplate", dataModel, OUTPUT_DIR));
46+
() -> GraphQLCodegenFileCreator.generateFile(mappingContext, FreeMarkerTemplateType.ENUM, dataModel, OUTPUT_DIR));
4747
}
4848
}

0 commit comments

Comments
 (0)