Skip to content

Commit 50d7ecd

Browse files
committed
Use Optional<> in models
1 parent 2faf31d commit 50d7ecd

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
id "java"
3+
id "war"
34
id "idea"
45
id "ivy-publish"
56
id "jacoco"
@@ -23,6 +24,7 @@ dependencies {
2324
compileOnly "org.freemarker:freemarker:2.3.31"
2425
compileOnly "com.graphql-java:graphql-java:16.2"
2526
compileOnly "com.fasterxml.jackson.core:jackson-databind:2.12.1"
27+
providedCompile "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.1"
2628
compileOnly "com.typesafe:config:1.4.1"
2729

2830
testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.1"

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ protected void initCustomTypeMappings(Collection<ExtendedScalarTypeDefinition> s
4747
mappingConfig.putCustomTypeMappingIfAbsent("ID", String.class.getSimpleName());
4848
mappingConfig.putCustomTypeMappingIfAbsent("String", String.class.getSimpleName());
4949
mappingConfig.putCustomTypeMappingIfAbsent("Int", Integer.class.getSimpleName());
50-
mappingConfig.putCustomTypeMappingIfAbsent("Int!", "int");
50+
mappingConfig.putCustomTypeMappingIfAbsent("Int!", "Integer");
5151
mappingConfig.putCustomTypeMappingIfAbsent("Float", Double.class.getSimpleName());
52-
mappingConfig.putCustomTypeMappingIfAbsent("Float!", "double");
52+
mappingConfig.putCustomTypeMappingIfAbsent("Float!", "Double");
5353
mappingConfig.putCustomTypeMappingIfAbsent("Boolean", Boolean.class.getSimpleName());
54-
mappingConfig.putCustomTypeMappingIfAbsent("Boolean!", "boolean");
54+
mappingConfig.putCustomTypeMappingIfAbsent("Boolean!", "Boolean");
5555
}
5656

5757
}

src/main/java/com/kobylynskyi/graphql/codegen/utils/Utils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.kobylynskyi.graphql.codegen.utils;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
45
import com.kobylynskyi.graphql.codegen.model.exception.UnableToCreateDirectoryException;
56
import com.kobylynskyi.graphql.codegen.model.exception.UnableToDeleteDirectoryException;
67
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
@@ -20,6 +21,9 @@
2021
public final class Utils {
2122

2223
public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
24+
static {
25+
OBJECT_MAPPER.registerModule(new Jdk8Module());
26+
}
2327

2428
private Utils() {
2529
}

src/main/resources/templates/java-lang/javaClassGraphqlType.ftl

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import java.util.Objects;
1717
<#if toString>
1818
import java.util.StringJoiner;
1919
</#if>
20+
import java.util.Optional;
21+
22+
import com.fasterxml.jackson.annotation.JsonInclude;
23+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
2024

2125
<#if javaDoc?has_content>
2226
/**
@@ -34,6 +38,7 @@ import java.util.StringJoiner;
3438
<#list annotations as annotation>
3539
@${annotation}
3640
</#list>
41+
@JsonInclude(Include.NON_NULL)
3742
public class ${className} implements java.io.Serializable<#if implements?has_content><#list implements as interface>, ${interface}<#if interface_has_next></#if></#list></#if> {
3843

3944
<#if fields?has_content>
@@ -44,7 +49,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
4449
<#list field.annotations as annotation>
4550
@${annotation}
4651
</#list>
47-
private ${field.type} ${field.name}<#if field.defaultValue?has_content> = ${field.defaultValue}</#if>;
52+
private Optional<${field.type}> ${field.name}<#if field.defaultValue?has_content> = ${field.defaultValue}</#if>;
4853
</#list>
4954
</#if>
5055

@@ -53,6 +58,12 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
5358

5459
<#if fields?has_content>
5560
public ${className}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, </#if></#list>) {
61+
<#list fields as field>
62+
this.${field.name} = Optional.ofNullable(${field.name});
63+
</#list>
64+
}
65+
66+
public ${className}(<#list fields as field>Optional<${field.type}> ${field.name}<#if field_has_next>, </#if></#list>) {
5667
<#list fields as field>
5768
this.${field.name} = ${field.name};
5869
</#list>
@@ -72,7 +83,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
7283
@${field.deprecated.annotation}
7384
</#if>
7485
public <#if field.mandatory && field.definitionInParentType?has_content && !field.definitionInParentType.mandatory>${field.definitionInParentType.type}<#else>${field.type}</#if> get${field.name?cap_first}() {
75-
return ${field.name};
86+
return (${field.name} == null || ${field.name}.isEmpty()) ? null : ${field.name}.get();
7687
}
7788
<#if !immutableModels>
7889
<#if field.javaDoc?has_content>
@@ -86,7 +97,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
8697
@${field.deprecated.annotation}
8798
</#if>
8899
public void set${field.name?cap_first}(${field.type} ${field.name}) {
89-
this.${field.name} = ${field.name};
100+
this.${field.name} = Optional.ofNullable(${field.name});
90101
}
91102
</#if>
92103

@@ -133,7 +144,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
133144
joiner.add("${field.originalName}: " + ${field.name});
134145
</#if>
135146
<#else>
136-
if (${field.name} != null) {
147+
if (${field.name} != null && ${field.name}.isPresent()) {
137148
<#if toStringForRequest>
138149
joiner.add("${field.originalName}: " + GraphQLRequestSerializer.getEntry(${field.name}<#if field.serializeUsingObjectMapper>, true</#if>));
139150
<#else>
@@ -160,7 +171,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
160171

161172
<#if fields?has_content>
162173
<#list fields as field>
163-
private ${field.type} ${field.name}<#if field.defaultValue?has_content> = ${field.defaultValue}</#if>;
174+
private Optional<${field.type}> ${field.name}<#if field.defaultValue?has_content> = Optional.ofNullable(${field.defaultValue})</#if>;
164175
</#list>
165176
</#if>
166177

@@ -180,7 +191,7 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
180191
@${field.deprecated.annotation}
181192
</#if>
182193
public Builder set${field.name?cap_first}(${field.type} ${field.name}) {
183-
this.${field.name} = ${field.name};
194+
this.${field.name} = Optional.ofNullable(${field.name});
184195
return this;
185196
}
186197

0 commit comments

Comments
 (0)