Skip to content

Commit f0396c6

Browse files
timw6nkobylynskyi
authored andcommitted
Add support for creating a toString() method on generated classes (#13)
1 parent 7bcab9b commit f0396c6

File tree

8 files changed

+44
-2
lines changed

8 files changed

+44
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Please refer to:
2727
| modelNamePrefix | String | Empty | Sets the prefix for GraphQL model classes (type, input, interface, enum, union). |
2828
| modelNameSuffix | String | Empty | Sets the suffix for GraphQL model classes (type, input, interface, enum, union). |
2929
| generateEqualsAndHashCode | Boolean | False | Specifies whether generated model classes should have equals and hashCode methods defined. |
30-
30+
| generateToString | Boolean | False | Specifies whether generated model classes should have toString method defined. |
3131

3232
### Inspired by
3333
[swagger-codegen](https://github.com/swagger-api/swagger-codegen)

src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public static Map<String, Object> map(MappingConfig mappingConfig, InputObjectTy
3131
dataModel.put(NAME, typeDefinition.getName());
3232
dataModel.put(FIELDS, InputValueDefinitionToParameterMapper.map(mappingConfig, typeDefinition.getInputValueDefinitions(), typeDefinition.getName()));
3333
dataModel.put(EQUALS_AND_HASH_CODE, mappingConfig.isGenerateEqualsAndHashCode());
34+
dataModel.put(TO_STRING, mappingConfig.isGenerateToString());
3435
return dataModel;
3536
}
3637

src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public static Map<String, Object> map(MappingConfig mappingConfig, ObjectTypeDef
4949
.forEach(allParameters::addAll);
5050
dataModel.put(FIELDS, allParameters);
5151
dataModel.put(EQUALS_AND_HASH_CODE, mappingConfig.isGenerateEqualsAndHashCode());
52+
dataModel.put(TO_STRING, mappingConfig.isGenerateToString());
5253

5354
return dataModel;
5455
}

src/main/java/com/kobylynskyi/graphql/codegen/model/DataModelFields.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public final class DataModelFields {
1515
public static final String IMPLEMENTS = "implements";
1616
public static final String OPERATIONS = "operations";
1717
public static final String EQUALS_AND_HASH_CODE = "equalsAndHashCode";
18+
public static final String TO_STRING = "toString";
19+
1820
}

src/main/java/com/kobylynskyi/graphql/codegen/model/DefaultMappingConfigValues.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ public class DefaultMappingConfigValues {
55
public static final String DEFAULT_VALIDATION_ANNOTATION = "javax.validation.constraints.NotNull";
66
public static final boolean DEFAULT_GENERATE_APIS = true;
77
public static final boolean DEFAULT_EQUALS_AND_HASHCODE = false;
8+
public static final boolean DEFAULT_TO_STRING = false;
89
}

src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class MappingConfig {
2929
private String modelNameSuffix;
3030
private String modelValidationAnnotation = DefaultMappingConfigValues.DEFAULT_VALIDATION_ANNOTATION;
3131
private boolean generateEqualsAndHashCode = DefaultMappingConfigValues.DEFAULT_EQUALS_AND_HASHCODE;
32+
private boolean generateToString = DefaultMappingConfigValues.DEFAULT_TO_STRING;
3233

3334
public void putCustomTypeMappingIfAbsent(String from, String to) {
3435
if (customTypesMapping == null) {

src/main/resources/templates/javaClassGraphqlType.ftl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,16 @@ public class ${className} <#if implements?has_content>implements <#list implemen
5858
</#if>
5959
}
6060
</#if>
61+
<#if toString>
62+
@Override
63+
public String toString() {
64+
return "${className}{"
65+
<#if fields?has_content>
66+
<#list fields as field>
67+
+ "${field.name}='" + ${field.name} + "'<#if field_has_next>,</#if>"
68+
</#list>
69+
</#if>
70+
+ "}";
71+
}
72+
</#if>
6173
}

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,30 @@ void generate_EqualsAndHashCode() throws Exception {
244244
.map(File::getPath).findFirst().orElseThrow(FileNotFoundException::new)));
245245
}
246246

247+
@Test
248+
void generate_toString() throws Exception {
249+
mappingConfig.setGenerateToString(true);
250+
mappingConfig.setModelNameSuffix("TO");
251+
252+
generator.generate();
253+
254+
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
255+
assertNotEquals(files.length, 0);
256+
257+
for (File eventFile : files) {
258+
if (eventFile.getName().endsWith("TO.java")) {
259+
String content = Utils.getFileContent(eventFile.getPath());
260+
261+
if (content.contains("public interface ") || content.contains("public enum ")) {
262+
continue;
263+
}
264+
265+
assertThat(content,
266+
StringContains.containsString("public String toString()"));
267+
}
268+
}
269+
}
270+
247271
@Test
248272
void generate_NoSchemas() throws Exception {
249273
generator.setSchemas(Collections.emptyList());
@@ -299,4 +323,4 @@ void generate_OnlyModel() throws Exception {
299323
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java"), generatedFileNames);
300324
}
301325

302-
}
326+
}

0 commit comments

Comments
 (0)