Skip to content

Commit 45a9a04

Browse files
committed
Support mandatory field validation annotation #3
1 parent 23e5ad3 commit 45a9a04

File tree

13 files changed

+420
-7
lines changed

13 files changed

+420
-7
lines changed

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static ParameterDefinition map(MappingConfig mappingConfig, FieldDefiniti
1919
ParameterDefinition parameter = new ParameterDefinition();
2020
parameter.setName(MapperUtils.capitalizeIfRestricted(fieldDef.getName()));
2121
parameter.setType(getJavaType(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName));
22-
parameter.setAnnotations(getAnnotations(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName));
22+
parameter.setAnnotations(getAnnotations(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName, false));
2323
return parameter;
2424
}
2525

@@ -69,19 +69,29 @@ private static String getJavaType(MappingConfig mappingConfig, String graphlType
6969
}
7070

7171
static List<String> getAnnotations(MappingConfig mappingConfig, Type type, String name, String parentTypeName) {
72+
return getAnnotations(mappingConfig, type, name, parentTypeName, true);
73+
}
74+
75+
private static List<String> getAnnotations(MappingConfig mappingConfig, Type type, String name, String parentTypeName,
76+
boolean mandatory) {
7277
if (type instanceof TypeName) {
73-
return getAnnotations(mappingConfig, ((TypeName) type).getName(), name, parentTypeName);
78+
return getAnnotations(mappingConfig, ((TypeName) type).getName(), name, parentTypeName, mandatory);
7479
} else if (type instanceof ListType) {
75-
return getAnnotations(mappingConfig, ((ListType) type).getType(), name, parentTypeName);
80+
return getAnnotations(mappingConfig, ((ListType) type).getType(), name, parentTypeName, mandatory);
7681
} else if (type instanceof NonNullType) {
77-
return getAnnotations(mappingConfig, ((NonNullType) type).getType(), name, parentTypeName);
82+
return getAnnotations(mappingConfig, ((NonNullType) type).getType(), name, parentTypeName, true);
7883
}
7984
return null;
8085
}
8186

82-
private static List<String> getAnnotations(MappingConfig mappingConfig, String graphlType, String name, String parentTypeName) {
87+
private static List<String> getAnnotations(MappingConfig mappingConfig, String graphlType, String name, String parentTypeName, boolean mandatory) {
8388
List<String> annotations = new ArrayList<>();
84-
// Todo: https://github.com/kobylynskyi/graphql-java-codegen/issues/3
89+
if (mandatory) {
90+
String modelValidationAnnotation = mappingConfig.getModelValidationAnnotation();
91+
if (modelValidationAnnotation != null && !modelValidationAnnotation.trim().isEmpty()) {
92+
annotations.add(modelValidationAnnotation);
93+
}
94+
}
8595
Map<String, String> customAnnotationsMapping = mappingConfig.getCustomAnnotationsMapping();
8696
if (name != null && parentTypeName != null && customAnnotationsMapping.containsKey(parentTypeName + "." + name)) {
8797
annotations.add(customAnnotationsMapping.get(parentTypeName + "." + name));
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.kobylynskyi.graphql.codegen.model;
2+
3+
public class DefaultMappingConfigValues {
4+
5+
public static final String DEFAULT_VALIDATION_ANNOTATION = "javax.validation.constraints.NotNull";
6+
public static final boolean DEFAULT_GENERATE_APIS = true;
7+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ public class MappingConfig {
2121
*/
2222
private Map<String, String> customAnnotationsMapping = new HashMap<>();
2323

24-
private boolean generateApis = true;
24+
private boolean generateApis = DefaultMappingConfigValues.DEFAULT_GENERATE_APIS;
2525
private String packageName;
2626
private String apiPackageName;
2727
private String modelPackageName;
2828
private String modelNamePrefix;
2929
private String modelNameSuffix;
30+
private String modelValidationAnnotation = DefaultMappingConfigValues.DEFAULT_VALIDATION_ANNOTATION;
3031

3132
public void putCustomTypeMappingIfAbsent(String from, String to) {
3233
if (customTypesMapping == null) {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ void generate_ClassNameWithSuffix_Prefix() throws Exception {
8383
getGeneratedFileContent(files, "GithubCommitTO.java"));
8484
}
8585

86+
@Test
87+
void generate_NoValidationAnnotation() throws Exception {
88+
mappingConfig.setModelValidationAnnotation(null);
89+
90+
generator.generate();
91+
File commitFile = Arrays.stream(Objects.requireNonNull(outputJavaClassesDir.listFiles()))
92+
.filter(file -> file.getName().equalsIgnoreCase("Commit.java"))
93+
.findFirst().orElseThrow(FileNotFoundException::new);
94+
assertEquals(Utils.getFileContent(new File("src/test/resources/expected-classes/Commit_noValidationAnnotation.java.txt").getPath()),
95+
Utils.getFileContent(commitFile.getPath()));
96+
}
97+
8698
private static String getGeneratedFileContent(File[] files, String fileName) throws IOException {
8799
File file = Arrays.stream(files).filter(f -> f.getName().equalsIgnoreCase(fileName))
88100
.findFirst().orElseThrow(FileNotFoundException::new);

src/test/resources/expected-classes/Commit.java.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,73 @@ import java.util.*;
44

55
public class Commit implements Closer, IssueTimelineItem, PullRequestTimelineItem, GitObject, Node, Subscribable, UniformResourceLocatable{
66

7+
@javax.validation.constraints.NotNull
78
private String abbreviatedOid;
9+
@javax.validation.constraints.NotNull
810
private Integer additions;
911
private PullRequestConnection associatedPullRequests;
1012
private GitActor author;
13+
@javax.validation.constraints.NotNull
1114
private Boolean authoredByCommitter;
15+
@javax.validation.constraints.NotNull
1216
private String authoredDate;
17+
@javax.validation.constraints.NotNull
1318
private Blame blame;
19+
@javax.validation.constraints.NotNull
1420
private Integer changedFiles;
21+
@javax.validation.constraints.NotNull
1522
private CommitCommentConnection comments;
23+
@javax.validation.constraints.NotNull
1624
private String commitResourcePath;
25+
@javax.validation.constraints.NotNull
1726
private String commitUrl;
27+
@javax.validation.constraints.NotNull
1828
private String committedDate;
29+
@javax.validation.constraints.NotNull
1930
private Boolean committedViaWeb;
2031
private GitActor committer;
32+
@javax.validation.constraints.NotNull
2133
private Integer deletions;
2234
private DeploymentConnection deployments;
35+
@javax.validation.constraints.NotNull
2336
private CommitHistoryConnection history;
37+
@javax.validation.constraints.NotNull
2438
private String id;
39+
@javax.validation.constraints.NotNull
2540
private String message;
41+
@javax.validation.constraints.NotNull
2642
private String messageBody;
43+
@javax.validation.constraints.NotNull
2744
private String messageBodyHTML;
45+
@javax.validation.constraints.NotNull
2846
private String messageHeadline;
47+
@javax.validation.constraints.NotNull
2948
private String messageHeadlineHTML;
49+
@javax.validation.constraints.NotNull
3050
private String oid;
51+
@javax.validation.constraints.NotNull
3152
private CommitConnection parents;
3253
private String pushedDate;
54+
@javax.validation.constraints.NotNull
3355
private Repository repository;
56+
@javax.validation.constraints.NotNull
3457
private String resourcePath;
3558
private GitSignature signature;
3659
private Status status;
60+
@javax.validation.constraints.NotNull
3761
private String tarballUrl;
62+
@javax.validation.constraints.NotNull
3863
private Tree tree;
64+
@javax.validation.constraints.NotNull
3965
private String treeResourcePath;
66+
@javax.validation.constraints.NotNull
4067
private String treeUrl;
68+
@javax.validation.constraints.NotNull
4169
private String url;
70+
@javax.validation.constraints.NotNull
4271
private Boolean viewerCanSubscribe;
4372
private SubscriptionState viewerSubscription;
73+
@javax.validation.constraints.NotNull
4474
private String zipballUrl;
4575

4676
public Commit() {

0 commit comments

Comments
 (0)