提交 45a9a046 编写于 作者: B Bogdan Kobylynskyi

Support mandatory field validation annotation #3

上级 23e5ad30
...@@ -19,7 +19,7 @@ class GraphqlTypeToJavaTypeMapper { ...@@ -19,7 +19,7 @@ class GraphqlTypeToJavaTypeMapper {
ParameterDefinition parameter = new ParameterDefinition(); ParameterDefinition parameter = new ParameterDefinition();
parameter.setName(MapperUtils.capitalizeIfRestricted(fieldDef.getName())); parameter.setName(MapperUtils.capitalizeIfRestricted(fieldDef.getName()));
parameter.setType(getJavaType(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName)); parameter.setType(getJavaType(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName));
parameter.setAnnotations(getAnnotations(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName)); parameter.setAnnotations(getAnnotations(mappingConfig, fieldDef.getType(), fieldDef.getName(), parentTypeName, false));
return parameter; return parameter;
} }
...@@ -69,19 +69,29 @@ class GraphqlTypeToJavaTypeMapper { ...@@ -69,19 +69,29 @@ class GraphqlTypeToJavaTypeMapper {
} }
static List<String> getAnnotations(MappingConfig mappingConfig, Type type, String name, String parentTypeName) { static List<String> getAnnotations(MappingConfig mappingConfig, Type type, String name, String parentTypeName) {
return getAnnotations(mappingConfig, type, name, parentTypeName, true);
}
private static List<String> getAnnotations(MappingConfig mappingConfig, Type type, String name, String parentTypeName,
boolean mandatory) {
if (type instanceof TypeName) { if (type instanceof TypeName) {
return getAnnotations(mappingConfig, ((TypeName) type).getName(), name, parentTypeName); return getAnnotations(mappingConfig, ((TypeName) type).getName(), name, parentTypeName, mandatory);
} else if (type instanceof ListType) { } else if (type instanceof ListType) {
return getAnnotations(mappingConfig, ((ListType) type).getType(), name, parentTypeName); return getAnnotations(mappingConfig, ((ListType) type).getType(), name, parentTypeName, mandatory);
} else if (type instanceof NonNullType) { } else if (type instanceof NonNullType) {
return getAnnotations(mappingConfig, ((NonNullType) type).getType(), name, parentTypeName); return getAnnotations(mappingConfig, ((NonNullType) type).getType(), name, parentTypeName, true);
} }
return null; return null;
} }
private static List<String> getAnnotations(MappingConfig mappingConfig, String graphlType, String name, String parentTypeName) { private static List<String> getAnnotations(MappingConfig mappingConfig, String graphlType, String name, String parentTypeName, boolean mandatory) {
List<String> annotations = new ArrayList<>(); List<String> annotations = new ArrayList<>();
// Todo: https://github.com/kobylynskyi/graphql-java-codegen/issues/3 if (mandatory) {
String modelValidationAnnotation = mappingConfig.getModelValidationAnnotation();
if (modelValidationAnnotation != null && !modelValidationAnnotation.trim().isEmpty()) {
annotations.add(modelValidationAnnotation);
}
}
Map<String, String> customAnnotationsMapping = mappingConfig.getCustomAnnotationsMapping(); Map<String, String> customAnnotationsMapping = mappingConfig.getCustomAnnotationsMapping();
if (name != null && parentTypeName != null && customAnnotationsMapping.containsKey(parentTypeName + "." + name)) { if (name != null && parentTypeName != null && customAnnotationsMapping.containsKey(parentTypeName + "." + name)) {
annotations.add(customAnnotationsMapping.get(parentTypeName + "." + name)); annotations.add(customAnnotationsMapping.get(parentTypeName + "." + name));
......
package com.kobylynskyi.graphql.codegen.model;
public class DefaultMappingConfigValues {
public static final String DEFAULT_VALIDATION_ANNOTATION = "javax.validation.constraints.NotNull";
public static final boolean DEFAULT_GENERATE_APIS = true;
}
...@@ -21,12 +21,13 @@ public class MappingConfig { ...@@ -21,12 +21,13 @@ public class MappingConfig {
*/ */
private Map<String, String> customAnnotationsMapping = new HashMap<>(); private Map<String, String> customAnnotationsMapping = new HashMap<>();
private boolean generateApis = true; private boolean generateApis = DefaultMappingConfigValues.DEFAULT_GENERATE_APIS;
private String packageName; private String packageName;
private String apiPackageName; private String apiPackageName;
private String modelPackageName; private String modelPackageName;
private String modelNamePrefix; private String modelNamePrefix;
private String modelNameSuffix; private String modelNameSuffix;
private String modelValidationAnnotation = DefaultMappingConfigValues.DEFAULT_VALIDATION_ANNOTATION;
public void putCustomTypeMappingIfAbsent(String from, String to) { public void putCustomTypeMappingIfAbsent(String from, String to) {
if (customTypesMapping == null) { if (customTypesMapping == null) {
......
...@@ -83,6 +83,18 @@ class GraphqlCodegenGitHubTest { ...@@ -83,6 +83,18 @@ class GraphqlCodegenGitHubTest {
getGeneratedFileContent(files, "GithubCommitTO.java")); getGeneratedFileContent(files, "GithubCommitTO.java"));
} }
@Test
void generate_NoValidationAnnotation() throws Exception {
mappingConfig.setModelValidationAnnotation(null);
generator.generate();
File commitFile = Arrays.stream(Objects.requireNonNull(outputJavaClassesDir.listFiles()))
.filter(file -> file.getName().equalsIgnoreCase("Commit.java"))
.findFirst().orElseThrow(FileNotFoundException::new);
assertEquals(Utils.getFileContent(new File("src/test/resources/expected-classes/Commit_noValidationAnnotation.java.txt").getPath()),
Utils.getFileContent(commitFile.getPath()));
}
private static String getGeneratedFileContent(File[] files, String fileName) throws IOException { private static String getGeneratedFileContent(File[] files, String fileName) throws IOException {
File file = Arrays.stream(files).filter(f -> f.getName().equalsIgnoreCase(fileName)) File file = Arrays.stream(files).filter(f -> f.getName().equalsIgnoreCase(fileName))
.findFirst().orElseThrow(FileNotFoundException::new); .findFirst().orElseThrow(FileNotFoundException::new);
......
...@@ -4,43 +4,73 @@ import java.util.*; ...@@ -4,43 +4,73 @@ import java.util.*;
public class Commit implements Closer, IssueTimelineItem, PullRequestTimelineItem, GitObject, Node, Subscribable, UniformResourceLocatable{ public class Commit implements Closer, IssueTimelineItem, PullRequestTimelineItem, GitObject, Node, Subscribable, UniformResourceLocatable{
@javax.validation.constraints.NotNull
private String abbreviatedOid; private String abbreviatedOid;
@javax.validation.constraints.NotNull
private Integer additions; private Integer additions;
private PullRequestConnection associatedPullRequests; private PullRequestConnection associatedPullRequests;
private GitActor author; private GitActor author;
@javax.validation.constraints.NotNull
private Boolean authoredByCommitter; private Boolean authoredByCommitter;
@javax.validation.constraints.NotNull
private String authoredDate; private String authoredDate;
@javax.validation.constraints.NotNull
private Blame blame; private Blame blame;
@javax.validation.constraints.NotNull
private Integer changedFiles; private Integer changedFiles;
@javax.validation.constraints.NotNull
private CommitCommentConnection comments; private CommitCommentConnection comments;
@javax.validation.constraints.NotNull
private String commitResourcePath; private String commitResourcePath;
@javax.validation.constraints.NotNull
private String commitUrl; private String commitUrl;
@javax.validation.constraints.NotNull
private String committedDate; private String committedDate;
@javax.validation.constraints.NotNull
private Boolean committedViaWeb; private Boolean committedViaWeb;
private GitActor committer; private GitActor committer;
@javax.validation.constraints.NotNull
private Integer deletions; private Integer deletions;
private DeploymentConnection deployments; private DeploymentConnection deployments;
@javax.validation.constraints.NotNull
private CommitHistoryConnection history; private CommitHistoryConnection history;
@javax.validation.constraints.NotNull
private String id; private String id;
@javax.validation.constraints.NotNull
private String message; private String message;
@javax.validation.constraints.NotNull
private String messageBody; private String messageBody;
@javax.validation.constraints.NotNull
private String messageBodyHTML; private String messageBodyHTML;
@javax.validation.constraints.NotNull
private String messageHeadline; private String messageHeadline;
@javax.validation.constraints.NotNull
private String messageHeadlineHTML; private String messageHeadlineHTML;
@javax.validation.constraints.NotNull
private String oid; private String oid;
@javax.validation.constraints.NotNull
private CommitConnection parents; private CommitConnection parents;
private String pushedDate; private String pushedDate;
@javax.validation.constraints.NotNull
private Repository repository; private Repository repository;
@javax.validation.constraints.NotNull
private String resourcePath; private String resourcePath;
private GitSignature signature; private GitSignature signature;
private Status status; private Status status;
@javax.validation.constraints.NotNull
private String tarballUrl; private String tarballUrl;
@javax.validation.constraints.NotNull
private Tree tree; private Tree tree;
@javax.validation.constraints.NotNull
private String treeResourcePath; private String treeResourcePath;
@javax.validation.constraints.NotNull
private String treeUrl; private String treeUrl;
@javax.validation.constraints.NotNull
private String url; private String url;
@javax.validation.constraints.NotNull
private Boolean viewerCanSubscribe; private Boolean viewerCanSubscribe;
private SubscriptionState viewerSubscription; private SubscriptionState viewerSubscription;
@javax.validation.constraints.NotNull
private String zipballUrl; private String zipballUrl;
public Commit() { public Commit() {
......
package com.github.graphql;
import java.util.*;
public class Commit implements Closer, IssueTimelineItem, PullRequestTimelineItem, GitObject, Node, Subscribable, UniformResourceLocatable{
private String abbreviatedOid;
private Integer additions;
private PullRequestConnection associatedPullRequests;
private GitActor author;
private Boolean authoredByCommitter;
private String authoredDate;
private Blame blame;
private Integer changedFiles;
private CommitCommentConnection comments;
private String commitResourcePath;
private String commitUrl;
private String committedDate;
private Boolean committedViaWeb;
private GitActor committer;
private Integer deletions;
private DeploymentConnection deployments;
private CommitHistoryConnection history;
private String id;
private String message;
private String messageBody;
private String messageBodyHTML;
private String messageHeadline;
private String messageHeadlineHTML;
private String oid;
private CommitConnection parents;
private String pushedDate;
private Repository repository;
private String resourcePath;
private GitSignature signature;
private Status status;
private String tarballUrl;
private Tree tree;
private String treeResourcePath;
private String treeUrl;
private String url;
private Boolean viewerCanSubscribe;
private SubscriptionState viewerSubscription;
private String zipballUrl;
public Commit() {
}
public String getAbbreviatedOid() {
return abbreviatedOid;
}
public void setAbbreviatedOid(String abbreviatedOid) {
this.abbreviatedOid = abbreviatedOid;
}
public Integer getAdditions() {
return additions;
}
public void setAdditions(Integer additions) {
this.additions = additions;
}
public PullRequestConnection getAssociatedPullRequests() {
return associatedPullRequests;
}
public void setAssociatedPullRequests(PullRequestConnection associatedPullRequests) {
this.associatedPullRequests = associatedPullRequests;
}
public GitActor getAuthor() {
return author;
}
public void setAuthor(GitActor author) {
this.author = author;
}
public Boolean getAuthoredByCommitter() {
return authoredByCommitter;
}
public void setAuthoredByCommitter(Boolean authoredByCommitter) {
this.authoredByCommitter = authoredByCommitter;
}
public String getAuthoredDate() {
return authoredDate;
}
public void setAuthoredDate(String authoredDate) {
this.authoredDate = authoredDate;
}
public Blame getBlame() {
return blame;
}
public void setBlame(Blame blame) {
this.blame = blame;
}
public Integer getChangedFiles() {
return changedFiles;
}
public void setChangedFiles(Integer changedFiles) {
this.changedFiles = changedFiles;
}
public CommitCommentConnection getComments() {
return comments;
}
public void setComments(CommitCommentConnection comments) {
this.comments = comments;
}
public String getCommitResourcePath() {
return commitResourcePath;
}
public void setCommitResourcePath(String commitResourcePath) {
this.commitResourcePath = commitResourcePath;
}
public String getCommitUrl() {
return commitUrl;
}
public void setCommitUrl(String commitUrl) {
this.commitUrl = commitUrl;
}
public String getCommittedDate() {
return committedDate;
}
public void setCommittedDate(String committedDate) {
this.committedDate = committedDate;
}
public Boolean getCommittedViaWeb() {
return committedViaWeb;
}
public void setCommittedViaWeb(Boolean committedViaWeb) {
this.committedViaWeb = committedViaWeb;
}
public GitActor getCommitter() {
return committer;
}
public void setCommitter(GitActor committer) {
this.committer = committer;
}
public Integer getDeletions() {
return deletions;
}
public void setDeletions(Integer deletions) {
this.deletions = deletions;
}
public DeploymentConnection getDeployments() {
return deployments;
}
public void setDeployments(DeploymentConnection deployments) {
this.deployments = deployments;
}
public CommitHistoryConnection getHistory() {
return history;
}
public void setHistory(CommitHistoryConnection history) {
this.history = history;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessageBody() {
return messageBody;
}
public void setMessageBody(String messageBody) {
this.messageBody = messageBody;
}
public String getMessageBodyHTML() {
return messageBodyHTML;
}
public void setMessageBodyHTML(String messageBodyHTML) {
this.messageBodyHTML = messageBodyHTML;
}
public String getMessageHeadline() {
return messageHeadline;
}
public void setMessageHeadline(String messageHeadline) {
this.messageHeadline = messageHeadline;
}
public String getMessageHeadlineHTML() {
return messageHeadlineHTML;
}
public void setMessageHeadlineHTML(String messageHeadlineHTML) {
this.messageHeadlineHTML = messageHeadlineHTML;
}
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
public CommitConnection getParents() {
return parents;
}
public void setParents(CommitConnection parents) {
this.parents = parents;
}
public String getPushedDate() {
return pushedDate;
}
public void setPushedDate(String pushedDate) {
this.pushedDate = pushedDate;
}
public Repository getRepository() {
return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
}
public String getResourcePath() {
return resourcePath;
}
public void setResourcePath(String resourcePath) {
this.resourcePath = resourcePath;
}
public GitSignature getSignature() {
return signature;
}
public void setSignature(GitSignature signature) {
this.signature = signature;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getTarballUrl() {
return tarballUrl;
}
public void setTarballUrl(String tarballUrl) {
this.tarballUrl = tarballUrl;
}
public Tree getTree() {
return tree;
}
public void setTree(Tree tree) {
this.tree = tree;
}
public String getTreeResourcePath() {
return treeResourcePath;
}
public void setTreeResourcePath(String treeResourcePath) {
this.treeResourcePath = treeResourcePath;
}
public String getTreeUrl() {
return treeUrl;
}
public void setTreeUrl(String treeUrl) {
this.treeUrl = treeUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Boolean getViewerCanSubscribe() {
return viewerCanSubscribe;
}
public void setViewerCanSubscribe(Boolean viewerCanSubscribe) {
this.viewerCanSubscribe = viewerCanSubscribe;
}
public SubscriptionState getViewerSubscription() {
return viewerSubscription;
}
public void setViewerSubscription(SubscriptionState viewerSubscription) {
this.viewerSubscription = viewerSubscription;
}
public String getZipballUrl() {
return zipballUrl;
}
public void setZipballUrl(String zipballUrl) {
this.zipballUrl = zipballUrl;
}
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ import java.util.*; ...@@ -4,6 +4,7 @@ import java.util.*;
public interface CreateEventMutation { public interface CreateEventMutation {
@javax.validation.constraints.NotNull
Event createEvent(String categoryId, String createdBy) throws Exception; Event createEvent(String categoryId, String createdBy) throws Exception;
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import java.util.*; ...@@ -4,6 +4,7 @@ import java.util.*;
public interface EventByIdQuery { public interface EventByIdQuery {
@javax.validation.constraints.NotNull
Event eventById(String id) throws Exception; Event eventById(String id) throws Exception;
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import java.util.*; ...@@ -4,6 +4,7 @@ import java.util.*;
public interface EventsByCategoryAndStatusQuery { public interface EventsByCategoryAndStatusQuery {
@javax.validation.constraints.NotNull
Collection<Event> eventsByCategoryAndStatus(String categoryId, EventStatus status) throws Exception; Collection<Event> eventsByCategoryAndStatus(String categoryId, EventStatus status) throws Exception;
} }
\ No newline at end of file
...@@ -4,43 +4,73 @@ import java.util.*; ...@@ -4,43 +4,73 @@ import java.util.*;
public class GithubCommitTO implements GithubCloserTO, GithubIssueTimelineItemTO, GithubPullRequestTimelineItemTO, GithubGitObjectTO, GithubNodeTO, GithubSubscribableTO, GithubUniformResourceLocatableTO{ public class GithubCommitTO implements GithubCloserTO, GithubIssueTimelineItemTO, GithubPullRequestTimelineItemTO, GithubGitObjectTO, GithubNodeTO, GithubSubscribableTO, GithubUniformResourceLocatableTO{
@javax.validation.constraints.NotNull
private String abbreviatedOid; private String abbreviatedOid;
@javax.validation.constraints.NotNull
private Integer additions; private Integer additions;
private GithubPullRequestConnectionTO associatedPullRequests; private GithubPullRequestConnectionTO associatedPullRequests;
private GithubGitActorTO author; private GithubGitActorTO author;
@javax.validation.constraints.NotNull
private Boolean authoredByCommitter; private Boolean authoredByCommitter;
@javax.validation.constraints.NotNull
private String authoredDate; private String authoredDate;
@javax.validation.constraints.NotNull
private GithubBlameTO blame; private GithubBlameTO blame;
@javax.validation.constraints.NotNull
private Integer changedFiles; private Integer changedFiles;
@javax.validation.constraints.NotNull
private GithubCommitCommentConnectionTO comments; private GithubCommitCommentConnectionTO comments;
@javax.validation.constraints.NotNull
private String commitResourcePath; private String commitResourcePath;
@javax.validation.constraints.NotNull
private String commitUrl; private String commitUrl;
@javax.validation.constraints.NotNull
private String committedDate; private String committedDate;
@javax.validation.constraints.NotNull
private Boolean committedViaWeb; private Boolean committedViaWeb;
private GithubGitActorTO committer; private GithubGitActorTO committer;
@javax.validation.constraints.NotNull
private Integer deletions; private Integer deletions;
private GithubDeploymentConnectionTO deployments; private GithubDeploymentConnectionTO deployments;
@javax.validation.constraints.NotNull
private GithubCommitHistoryConnectionTO history; private GithubCommitHistoryConnectionTO history;
@javax.validation.constraints.NotNull
private String id; private String id;
@javax.validation.constraints.NotNull
private String message; private String message;
@javax.validation.constraints.NotNull
private String messageBody; private String messageBody;
@javax.validation.constraints.NotNull
private String messageBodyHTML; private String messageBodyHTML;
@javax.validation.constraints.NotNull
private String messageHeadline; private String messageHeadline;
@javax.validation.constraints.NotNull
private String messageHeadlineHTML; private String messageHeadlineHTML;
@javax.validation.constraints.NotNull
private String oid; private String oid;
@javax.validation.constraints.NotNull
private GithubCommitConnectionTO parents; private GithubCommitConnectionTO parents;
private String pushedDate; private String pushedDate;
@javax.validation.constraints.NotNull
private GithubRepositoryTO repository; private GithubRepositoryTO repository;
@javax.validation.constraints.NotNull
private String resourcePath; private String resourcePath;
private GithubGitSignatureTO signature; private GithubGitSignatureTO signature;
private GithubStatusTO status; private GithubStatusTO status;
@javax.validation.constraints.NotNull
private String tarballUrl; private String tarballUrl;
@javax.validation.constraints.NotNull
private GithubTreeTO tree; private GithubTreeTO tree;
@javax.validation.constraints.NotNull
private String treeResourcePath; private String treeResourcePath;
@javax.validation.constraints.NotNull
private String treeUrl; private String treeUrl;
@javax.validation.constraints.NotNull
private String url; private String url;
@javax.validation.constraints.NotNull
private Boolean viewerCanSubscribe; private Boolean viewerCanSubscribe;
private GithubSubscriptionStateTO viewerSubscription; private GithubSubscriptionStateTO viewerSubscription;
@javax.validation.constraints.NotNull
private String zipballUrl; private String zipballUrl;
public GithubCommitTO() { public GithubCommitTO() {
......
...@@ -4,6 +4,7 @@ import java.util.*; ...@@ -4,6 +4,7 @@ import java.util.*;
public interface Mutation { public interface Mutation {
@javax.validation.constraints.NotNull
Event createEvent(String categoryId, String createdBy) throws Exception; Event createEvent(String categoryId, String createdBy) throws Exception;
} }
\ No newline at end of file
...@@ -4,10 +4,13 @@ import java.util.*; ...@@ -4,10 +4,13 @@ import java.util.*;
public interface Query { public interface Query {
@javax.validation.constraints.NotNull
String version() throws Exception; String version() throws Exception;
@javax.validation.constraints.NotNull
Collection<Event> eventsByCategoryAndStatus(String categoryId, EventStatus status) throws Exception; Collection<Event> eventsByCategoryAndStatus(String categoryId, EventStatus status) throws Exception;
@javax.validation.constraints.NotNull
Event eventById(String id) throws Exception; Event eventById(String id) throws Exception;
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import java.util.*; ...@@ -4,6 +4,7 @@ import java.util.*;
public interface VersionQuery { public interface VersionQuery {
@javax.validation.constraints.NotNull
String version() throws Exception; String version() throws Exception;
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册