|
1 | 1 | package com.kobylynskyi.graphql.codegen; |
2 | 2 |
|
3 | 3 | import com.kobylynskyi.graphql.codegen.mapper.*; |
4 | | -import com.kobylynskyi.graphql.codegen.model.DataModelFields; |
5 | 4 | import com.kobylynskyi.graphql.codegen.model.DefinitionType; |
6 | 5 | import com.kobylynskyi.graphql.codegen.model.DefinitionTypeDeterminer; |
7 | 6 | import com.kobylynskyi.graphql.codegen.model.MappingConfig; |
8 | | -import com.kobylynskyi.graphql.codegen.utils.Utils; |
9 | | -import freemarker.template.Template; |
10 | 7 | import freemarker.template.TemplateException; |
11 | 8 | import graphql.language.*; |
12 | 9 | import lombok.Getter; |
13 | 10 | import lombok.Setter; |
14 | 11 |
|
15 | 12 | import java.io.File; |
16 | | -import java.io.FileWriter; |
17 | 13 | import java.io.IOException; |
18 | | -import java.nio.file.FileAlreadyExistsException; |
19 | 14 | import java.util.List; |
20 | 15 | import java.util.Map; |
21 | 16 |
|
@@ -45,7 +40,7 @@ public GraphqlCodegen(List<String> schemas, File outputDir, MappingConfig mappin |
45 | 40 | } |
46 | 41 |
|
47 | 42 | public void generate() throws Exception { |
48 | | - prepareOutputDir(); |
| 43 | + GraphqlCodegenFileCreator.prepareOutputDir(outputDir); |
49 | 44 | for (String schema : schemas) { |
50 | 45 | long startTime = System.currentTimeMillis(); |
51 | 46 | Document document = GraphqlDocumentParser.getDocument(schema); |
@@ -84,76 +79,46 @@ private void processDocument(Document document) throws IOException, TemplateExce |
84 | 79 |
|
85 | 80 | private void generateUnion(UnionTypeDefinition definition) throws IOException, TemplateException { |
86 | 81 | Map<String, Object> dataModel = UnionDefinitionToDataModelMapper.map(mappingConfig, definition); |
87 | | - generateFile(FreeMarkerTemplatesRegistry.unionTemplate, dataModel); |
| 82 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.unionTemplate, dataModel, outputDir); |
88 | 83 | } |
89 | 84 |
|
90 | 85 | private void generateInterface(InterfaceTypeDefinition definition) throws IOException, TemplateException { |
91 | 86 | Map<String, Object> dataModel = InterfaceDefinitionToDataModelMapper.map(mappingConfig, definition); |
92 | | - generateFile(FreeMarkerTemplatesRegistry.interfaceTemplate, dataModel); |
| 87 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.interfaceTemplate, dataModel, outputDir); |
93 | 88 | } |
94 | 89 |
|
95 | 90 | private void generateOperation(ObjectTypeDefinition definition) throws IOException, TemplateException { |
96 | 91 | for (FieldDefinition fieldDef : definition.getFieldDefinitions()) { |
97 | 92 | Map<String, Object> dataModel = FieldDefinitionToDataModelMapper.map(mappingConfig, fieldDef, definition.getName()); |
98 | | - generateFile(FreeMarkerTemplatesRegistry.operationsTemplate, dataModel); |
| 93 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.operationsTemplate, dataModel, outputDir); |
99 | 94 | } |
100 | 95 | // We need to generate a root object to workaround https://github.com/facebook/relay/issues/112 |
101 | 96 | Map<String, Object> dataModel = ObjectDefinitionToDataModelMapper.map(mappingConfig, definition); |
102 | | - generateFile(FreeMarkerTemplatesRegistry.operationsTemplate, dataModel); |
| 97 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.operationsTemplate, dataModel, outputDir); |
103 | 98 | } |
104 | 99 |
|
105 | 100 | private void generateType(ObjectTypeDefinition definition, Document document) throws IOException, TemplateException { |
106 | 101 | Map<String, Object> dataModel = TypeDefinitionToDataModelMapper.map(mappingConfig, definition, document); |
107 | | - generateFile(FreeMarkerTemplatesRegistry.typeTemplate, dataModel); |
| 102 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.typeTemplate, dataModel, outputDir); |
108 | 103 | } |
109 | 104 |
|
110 | 105 | private void generateInput(InputObjectTypeDefinition definition) throws IOException, TemplateException { |
111 | 106 | Map<String, Object> dataModel = InputDefinitionToDataModelMapper.map(mappingConfig, definition); |
112 | | - generateFile(FreeMarkerTemplatesRegistry.typeTemplate, dataModel); |
| 107 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.typeTemplate, dataModel, outputDir); |
113 | 108 | } |
114 | 109 |
|
115 | 110 | private void generateEnum(EnumTypeDefinition definition) throws IOException, TemplateException { |
116 | 111 | Map<String, Object> dataModel = EnumDefinitionToDataModelMapper.map(mappingConfig, definition); |
117 | | - generateFile(FreeMarkerTemplatesRegistry.enumTemplate, dataModel); |
| 112 | + GraphqlCodegenFileCreator.generateFile(FreeMarkerTemplatesRegistry.enumTemplate, dataModel, outputDir); |
118 | 113 | } |
119 | 114 |
|
120 | 115 | private void addScalarsToCustomMappingConfig(Document document) { |
121 | 116 | for (Definition definition : document.getDefinitions()) { |
122 | 117 | if (definition instanceof ScalarTypeDefinition) { |
123 | 118 | String scalarName = ((ScalarTypeDefinition) definition).getName(); |
124 | | - if (!mappingConfig.getCustomTypesMapping().containsKey(scalarName)) { |
125 | | - mappingConfig.getCustomTypesMapping().put(scalarName, "String"); |
126 | | - } |
| 119 | + mappingConfig.putCustomTypeMappingIfAbsent(scalarName, "String"); |
127 | 120 | } |
128 | 121 | } |
129 | 122 | } |
130 | 123 |
|
131 | | - private void generateFile(Template template, Map<String, Object> dataModel) throws IOException, TemplateException { |
132 | | - String fileName = dataModel.get(DataModelFields.CLASS_NAME) + ".java"; |
133 | | - File fileOutputDir = getFileTargetDirectory(dataModel); |
134 | | - File javaSourceFile = new File(fileOutputDir, fileName); |
135 | | - boolean fileCreated = javaSourceFile.createNewFile(); |
136 | | - if (!fileCreated) { |
137 | | - throw new FileAlreadyExistsException("File already exists: " + javaSourceFile.getPath()); |
138 | | - } |
139 | | - template.process(dataModel, new FileWriter(javaSourceFile)); |
140 | | - } |
141 | | - |
142 | | - private void prepareOutputDir() throws IOException { |
143 | | - Utils.deleteDir(outputDir); |
144 | | - Utils.createDirIfAbsent(outputDir); |
145 | | - } |
146 | | - |
147 | | - private File getFileTargetDirectory(Map<String, Object> dataModel) throws IOException { |
148 | | - File targetDir; |
149 | | - Object packageName = dataModel.get(DataModelFields.PACKAGE); |
150 | | - if (packageName != null && !Utils.isBlank(packageName.toString())) { |
151 | | - targetDir = new File(outputDir, packageName.toString().replace(".", File.separator)); |
152 | | - } else { |
153 | | - targetDir = outputDir; |
154 | | - } |
155 | | - Utils.createDirIfAbsent(targetDir); |
156 | | - return targetDir; |
157 | | - } |
158 | | - |
159 | 124 | } |
0 commit comments