Skip to content

Commit 894fbd4

Browse files
committed
Support RegEx in customAnnotationsMapping #783
Also refactor mappers
1 parent d7ae176 commit 894fbd4

28 files changed

+617
-425
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.kobylynskyi.graphql.codegen.java;
2+
3+
import com.kobylynskyi.graphql.codegen.mapper.AnnotationsMapper;
4+
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
5+
import com.kobylynskyi.graphql.codegen.model.MappingContext;
6+
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
/**
11+
* Mapper class for converting GraphQL types to Java types
12+
*/
13+
public class JavaAnnotationsMapper extends AnnotationsMapper {
14+
15+
private final ValueMapper valueMapper;
16+
17+
public JavaAnnotationsMapper(ValueMapper valueMapper) {
18+
this.valueMapper = valueMapper;
19+
}
20+
21+
@Override
22+
public boolean addModelValidationAnnotationForType(String type) {
23+
return !JavaGraphQLTypeMapper.isJavaPrimitive(type);
24+
}
25+
26+
@Override
27+
public ValueMapper getValueMapper() {
28+
return valueMapper;
29+
}
30+
31+
@Override
32+
public String getJacksonResolverTypeIdAnnotation(String modelPackageName) {
33+
return "com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver(" + modelPackageName +
34+
"GraphqlJacksonTypeIdResolver.class)";
35+
}
36+
37+
@Override
38+
protected List<String> getAdditionalAnnotations(MappingContext mappingContext, String typeName) {
39+
return Collections.emptyList();
40+
}
41+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/**
1212
* Data model mapper for JAVA generated classes
1313
*/
14-
public class JavaDataModelMapper implements DataModelMapper {
14+
public class JavaDataModelMapper extends DataModelMapper {
1515

1616
private static final Set<String> JAVA_RESTRICTED_KEYWORDS = new HashSet<>(Arrays.asList(
1717
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",

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

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
44
import com.kobylynskyi.graphql.codegen.mapper.GraphQLTypeMapper;
5-
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
65
import com.kobylynskyi.graphql.codegen.model.MappingContext;
76
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
87
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
@@ -17,19 +16,13 @@
1716
/**
1817
* Mapper class for converting GraphQL types to Java types
1918
*/
20-
public class JavaGraphQLTypeMapper implements GraphQLTypeMapper {
19+
public class JavaGraphQLTypeMapper extends GraphQLTypeMapper {
2120

2221
public static final String JAVA_UTIL_LIST = "java.util.List";
2322
private static final String JAVA_UTIL_OPTIONAL = "java.util.Optional";
2423
private static final Set<String> JAVA_PRIMITIVE_TYPES = new HashSet<>(asList(
2524
"byte", "short", "int", "long", "float", "double", "char", "boolean"));
2625

27-
private final ValueMapper valueMapper;
28-
29-
public JavaGraphQLTypeMapper(ValueMapper valueMapper) {
30-
this.valueMapper = valueMapper;
31-
}
32-
3326
public static boolean isJavaPrimitive(String possiblyPrimitiveType) {
3427
return JAVA_PRIMITIVE_TYPES.contains(possiblyPrimitiveType);
3528
}
@@ -86,11 +79,6 @@ public boolean isPrimitive(String possiblyPrimitiveType) {
8679
return isJavaPrimitive(possiblyPrimitiveType);
8780
}
8881

89-
@Override
90-
public boolean addModelValidationAnnotationForType(String type) {
91-
return !isPrimitive(type);
92-
}
93-
9482
@Override
9583
public NamedDefinition getLanguageType(MappingContext mappingContext, String graphQLType, String name,
9684
String parentTypeName, boolean mandatory, boolean collection) {
@@ -117,14 +105,4 @@ public NamedDefinition getLanguageType(MappingContext mappingContext, String gra
117105
mandatory, primitiveCanBeUsed, serializeUsingObjectMapper);
118106
}
119107

120-
@Override
121-
public ValueMapper getValueMapper() {
122-
return valueMapper;
123-
}
124-
125-
@Override
126-
public String getJacksonResolverTypeIdAnnotation(String modelPackageName) {
127-
return "com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver(" + modelPackageName +
128-
"GraphqlJacksonTypeIdResolver.class)";
129-
}
130108
}
Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,46 @@
11
package com.kobylynskyi.graphql.codegen.java;
22

3+
import com.kobylynskyi.graphql.codegen.mapper.AnnotationsMapper;
34
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
45
import com.kobylynskyi.graphql.codegen.mapper.GraphQLTypeMapper;
56
import com.kobylynskyi.graphql.codegen.mapper.MapperFactory;
6-
import com.kobylynskyi.graphql.codegen.mapper.ValueFormatter;
77
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
88

99
/**
1010
* A factory of various mappers for Java language
1111
*/
1212
public class JavaMapperFactoryImpl implements MapperFactory {
1313

14+
private final DataModelMapper dataModelMapper;
15+
private final ValueMapper valueMapper;
16+
private final GraphQLTypeMapper graphQLTypeMapper;
17+
private final AnnotationsMapper annotationsMapper;
18+
19+
public JavaMapperFactoryImpl() {
20+
dataModelMapper = new JavaDataModelMapper();
21+
valueMapper = new ValueMapper(new JavaValueFormatter(), dataModelMapper);
22+
graphQLTypeMapper = new JavaGraphQLTypeMapper();
23+
annotationsMapper = new JavaAnnotationsMapper(valueMapper);
24+
}
25+
26+
@Override
27+
public DataModelMapper getDataModelMapper() {
28+
return dataModelMapper;
29+
}
30+
1431
@Override
15-
public DataModelMapper createDataModelMapper() {
16-
return new JavaDataModelMapper();
32+
public GraphQLTypeMapper getGraphQLTypeMapper() {
33+
return graphQLTypeMapper;
1734
}
1835

1936
@Override
20-
public GraphQLTypeMapper createGraphQLTypeMapper(ValueMapper valueMapper) {
21-
return new JavaGraphQLTypeMapper(valueMapper);
37+
public AnnotationsMapper getAnnotationsMapper() {
38+
return annotationsMapper;
2239
}
2340

2441
@Override
25-
public ValueFormatter createValueFormatter() {
26-
return new JavaValueFormatter();
42+
public ValueMapper getValueMapper() {
43+
return valueMapper;
2744
}
2845

2946
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.kobylynskyi.graphql.codegen.kotlin;
2+
3+
import com.kobylynskyi.graphql.codegen.mapper.AnnotationsMapper;
4+
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
5+
import com.kobylynskyi.graphql.codegen.model.MappingContext;
6+
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
/**
11+
* Mapper class for converting GraphQL types to Kotlin types
12+
*
13+
* @author 梦境迷离
14+
* @since 2020/12/09
15+
*/
16+
public class KotlinAnnotationsMapper extends AnnotationsMapper {
17+
18+
private final ValueMapper valueMapper;
19+
20+
public KotlinAnnotationsMapper(ValueMapper valueMapper) {
21+
this.valueMapper = valueMapper;
22+
}
23+
24+
@Override
25+
public boolean addModelValidationAnnotationForType(String possiblyPrimitiveType) {
26+
return false;
27+
}
28+
29+
@Override
30+
public String getJacksonResolverTypeIdAnnotation(String modelPackageName) {
31+
return "com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver(" + modelPackageName +
32+
"GraphqlJacksonTypeIdResolver::class)";
33+
}
34+
35+
@Override
36+
protected List<String> getAdditionalAnnotations(MappingContext mappingContext, String typeName) {
37+
return Collections.emptyList();
38+
}
39+
40+
@Override
41+
public ValueMapper getValueMapper() {
42+
return valueMapper;
43+
}
44+
}

src/main/java/com/kobylynskyi/graphql/codegen/kotlin/KotlinDataModelMapper.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
44
import com.kobylynskyi.graphql.codegen.model.MappingContext;
5-
import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDefinition;
65
import com.kobylynskyi.graphql.codegen.utils.Utils;
76

87
import java.util.Arrays;
@@ -17,7 +16,7 @@
1716
* @author 梦境迷离
1817
* @since 2020/12/09
1918
*/
20-
public class KotlinDataModelMapper implements DataModelMapper {
19+
public class KotlinDataModelMapper extends DataModelMapper {
2120

2221
private static final String RESTRICTED_KEYWORDS_WRAP_WITH = "`";
2322
private static final Set<String> KOTLIN_RESTRICTED_KEYWORDS = new HashSet<>(
@@ -48,10 +47,4 @@ public String capitalizeMethodNameIfRestricted(MappingContext mappingContext, St
4847
return methodName;
4948
}
5049

51-
@Override
52-
public String getModelClassNameWithPrefixAndSuffix(MappingContext mappingContext,
53-
ExtendedDefinition<?, ?> extendedDefinition) {
54-
return DataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, extendedDefinition.getName());
55-
}
56-
5750
}

src/main/java/com/kobylynskyi/graphql/codegen/kotlin/KotlinGraphQLTypeMapper.java

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
44
import com.kobylynskyi.graphql.codegen.mapper.GraphQLTypeMapper;
5-
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
65
import com.kobylynskyi.graphql.codegen.model.MappingContext;
76
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
87
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
@@ -19,20 +18,14 @@
1918
* @author 梦境迷离
2019
* @since 2020/12/09
2120
*/
22-
public class KotlinGraphQLTypeMapper implements GraphQLTypeMapper {
21+
public class KotlinGraphQLTypeMapper extends GraphQLTypeMapper {
2322

2423
private static final String KOTLIN_UTIL_LIST = "List";
2524
private static final String KOTLIN_UTIL_NULLABLE = "?";
2625
// Char Boolean are not primitive type, but non null equivalent jvm primitive types.
2726
private static final Set<String> KOTLIN_PRIMITIVE_TYPES = new HashSet<>(
2827
asList("Byte", "Short", "Int", "Long", "Float", "Double", "Char", "Boolean"));
2928

30-
private final ValueMapper valueMapper;
31-
32-
public KotlinGraphQLTypeMapper(ValueMapper valueMapper) {
33-
this.valueMapper = valueMapper;
34-
}
35-
3629
public static boolean isKotlinPrimitive(String scalaType) {
3730
return KOTLIN_PRIMITIVE_TYPES.contains(scalaType);
3831
}
@@ -43,6 +36,7 @@ public static boolean isKotlinPrimitive(String scalaType) {
4336
* @param kotlinType type get from Type template
4437
* @return default value
4538
*/
39+
@SuppressWarnings("unused")
4640
public static String defaultValueKotlinPrimitive(String kotlinType) {
4741
switch (kotlinType) {
4842
case "Long":
@@ -111,11 +105,6 @@ public boolean isPrimitive(String kotlinType) {
111105
return isKotlinPrimitive(kotlinType);
112106
}
113107

114-
@Override
115-
public boolean addModelValidationAnnotationForType(String possiblyPrimitiveType) {
116-
return false;
117-
}
118-
119108
@Override
120109
public String getTypeConsideringPrimitive(MappingContext mappingContext,
121110
NamedDefinition namedDefinition,
@@ -159,11 +148,6 @@ public String getTypeConsideringPrimitive(MappingContext mappingContext,
159148
return computedTypeName;
160149
}
161150

162-
@Override
163-
public ValueMapper getValueMapper() {
164-
return valueMapper;
165-
}
166-
167151
@Override
168152
public String getResponseReturnType(MappingContext mappingContext, NamedDefinition namedDefinition,
169153
String computedTypeName) {
@@ -173,10 +157,4 @@ public String getResponseReturnType(MappingContext mappingContext, NamedDefiniti
173157
// Should fix it when generate response class.
174158
return getTypeConsideringPrimitive(mappingContext, namedDefinition, computedTypeName);
175159
}
176-
177-
@Override
178-
public String getJacksonResolverTypeIdAnnotation(String modelPackageName) {
179-
return "com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver(" + modelPackageName +
180-
"GraphqlJacksonTypeIdResolver::class)";
181-
}
182160
}
Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.kobylynskyi.graphql.codegen.kotlin;
22

3+
import com.kobylynskyi.graphql.codegen.mapper.AnnotationsMapper;
34
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
45
import com.kobylynskyi.graphql.codegen.mapper.GraphQLTypeMapper;
56
import com.kobylynskyi.graphql.codegen.mapper.MapperFactory;
6-
import com.kobylynskyi.graphql.codegen.mapper.ValueFormatter;
77
import com.kobylynskyi.graphql.codegen.mapper.ValueMapper;
88

99
/**
@@ -14,19 +14,36 @@
1414
*/
1515
public class KotlinMapperFactoryImpl implements MapperFactory {
1616

17+
private final DataModelMapper dataModelMapper;
18+
private final ValueMapper valueMapper;
19+
private final GraphQLTypeMapper graphQLTypeMapper;
20+
private final AnnotationsMapper annotationsMapper;
21+
22+
public KotlinMapperFactoryImpl() {
23+
dataModelMapper = new KotlinDataModelMapper();
24+
valueMapper = new ValueMapper(new KotlinValueFormatter(), dataModelMapper);
25+
graphQLTypeMapper = new KotlinGraphQLTypeMapper();
26+
annotationsMapper = new KotlinAnnotationsMapper(valueMapper);
27+
}
28+
29+
@Override
30+
public DataModelMapper getDataModelMapper() {
31+
return dataModelMapper;
32+
}
33+
1734
@Override
18-
public DataModelMapper createDataModelMapper() {
19-
return new KotlinDataModelMapper();
35+
public GraphQLTypeMapper getGraphQLTypeMapper() {
36+
return graphQLTypeMapper;
2037
}
2138

2239
@Override
23-
public GraphQLTypeMapper createGraphQLTypeMapper(ValueMapper valueMapper) {
24-
return new KotlinGraphQLTypeMapper(valueMapper);
40+
public AnnotationsMapper getAnnotationsMapper() {
41+
return annotationsMapper;
2542
}
2643

2744
@Override
28-
public ValueFormatter createValueFormatter() {
29-
return new KotlinValueFormatter();
45+
public ValueMapper getValueMapper() {
46+
return valueMapper;
3047
}
3148

3249
}

0 commit comments

Comments
 (0)