提交 5846fe20 编写于 作者: B Bogdan Kobylynskyi

Refactor GraphQLTypeMappers - remove duplicate code

上级 dd048a34
......@@ -7,7 +7,6 @@ import com.kobylynskyi.graphql.codegen.model.MappingContext;
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import graphql.language.Argument;
import java.util.HashSet;
import java.util.Map;
......@@ -79,20 +78,6 @@ public class JavaGraphQLTypeMapper implements GraphQLTypeMapper {
return !isPrimitive(type);
}
@Override
public String getGenericsString(MappingContext mappingContext, String genericType, String typeParameter) {
if (genericType.contains("%s")) {
return String.format(genericType, typeParameter);
} else {
return String.format("%s<%s>", genericType, typeParameter);
}
}
@Override
public String mapDirectiveArgumentValue(MappingContext mappingContext, Argument dirArg, String argumentValueFormatter) {
return valueMapper.map(mappingContext, dirArg.getValue(), null, argumentValueFormatter);
}
@Override
public NamedDefinition getLanguageType(MappingContext mappingContext, String graphQLType, String name,
String parentTypeName, boolean mandatory, boolean collection) {
......@@ -119,4 +104,9 @@ public class JavaGraphQLTypeMapper implements GraphQLTypeMapper {
mandatory, primitiveCanBeUsed, serializeUsingObjectMapper);
}
@Override
public ValueMapper getValueMapper() {
return valueMapper;
}
}
......@@ -7,7 +7,6 @@ import com.kobylynskyi.graphql.codegen.model.MappingContext;
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import graphql.language.Argument;
import java.util.HashSet;
import java.util.Set;
......@@ -83,45 +82,11 @@ public class KotlinGraphQLTypeMapper implements GraphQLTypeMapper {
return isKotlinPrimitive(kotlinType);
}
@Override
public String getGenericsString(MappingContext mappingContext, String genericType, String typeParameter) {
if (genericType.contains("%s")) {
return String.format(genericType, typeParameter);
} else {
return String.format("%s<%s>", genericType, typeParameter);
}
}
@Override
public String mapDirectiveArgumentValue(MappingContext mappingContext, Argument dirArg, String argumentValueFormatter) {
return valueMapper.map(mappingContext, dirArg.getValue(), null, argumentValueFormatter);
}
@Override
public boolean addModelValidationAnnotationForType(String possiblyPrimitiveType) {
return false;
}
public static String defaultValueKotlinPrimitive(String kotlinType) {
switch (kotlinType) {
case "Long":
return "0L";
case "Float":
return "0F";
case "Double":
return "0D";
case "Char":
return "0.toChar()";
case "Boolean":
return "false";
case "Int":
case "Byte":
case "Short":
default:
return "0";
}
}
@Override
public String getTypeConsideringPrimitive(MappingContext mappingContext,
NamedDefinition namedDefinition,
......@@ -143,7 +108,7 @@ public class KotlinGraphQLTypeMapper implements GraphQLTypeMapper {
if (computedTypeName.startsWith(KOTLIN_UTIL_LIST) && !graphqlTypeName.endsWith(KOTLIN_UTIL_NULLABLE)) {
String modelClassNameWithPrefixAndSuffix = DataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, graphqlTypeName);
if (computedTypeName.contains(modelClassNameWithPrefixAndSuffix + KOTLIN_UTIL_NULLABLE) ||
computedTypeName.contains(graphqlTypeName + KOTLIN_UTIL_NULLABLE)){
computedTypeName.contains(graphqlTypeName + KOTLIN_UTIL_NULLABLE)) {
return computedTypeName;
}
if (!computedTypeName.contains(modelClassNameWithPrefixAndSuffix + KOTLIN_UTIL_NULLABLE) && computedTypeName.contains(modelClassNameWithPrefixAndSuffix)) {
......@@ -157,4 +122,9 @@ public class KotlinGraphQLTypeMapper implements GraphQLTypeMapper {
return computedTypeName;
}
@Override
public ValueMapper getValueMapper() {
return valueMapper;
}
}
......@@ -6,9 +6,20 @@ import com.kobylynskyi.graphql.codegen.model.MultiLanguageDeprecated;
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDefinition;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import graphql.language.*;
import graphql.language.Argument;
import graphql.language.Directive;
import graphql.language.DirectivesContainer;
import graphql.language.ListType;
import graphql.language.NamedNode;
import graphql.language.NonNullType;
import graphql.language.Type;
import graphql.language.TypeName;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Map GraphQL type to language-specific type (java/scala/kotlin/etc)
......@@ -116,17 +127,13 @@ public interface GraphQLTypeMapper {
* @param typeParameter Parameter of generics type
* @return type wrapped into generics
*/
String getGenericsString(MappingContext mappingContext, String genericType, String typeParameter);
/**
* Map value of the directive argument
*
* @param mappingContext Global mapping context
* @param dirArg Directive argument
* @param argumentValueFormatter Formatter of the directive argument
* @return formatted value
*/
String mapDirectiveArgumentValue(MappingContext mappingContext, Argument dirArg, String argumentValueFormatter);
default String getGenericsString(MappingContext mappingContext, String genericType, String typeParameter) {
if (genericType.contains("%s")) {
return String.format(genericType, typeParameter);
} else {
return String.format("%s<%s>", genericType, typeParameter);
}
}
/**
* Convert GraphQL type to a corresponding language-specific type
......@@ -297,7 +304,7 @@ public interface GraphQLTypeMapper {
if (argumentValueFormatter != null) {
directiveAnnotationMapped = directiveAnnotationMapped.replace(
String.format("{{%s%s}}", dirArg.getName(), argumentValueFormatter),
mapDirectiveArgumentValue(mappingContext, dirArg, argumentValueFormatter));
getValueMapper().map(mappingContext, dirArg.getValue(), null, argumentValueFormatter));
}
}
directiveAnnotationsMapped.add(directiveAnnotationMapped);
......@@ -327,5 +334,6 @@ public interface GraphQLTypeMapper {
.orElse(null);
}
ValueMapper getValueMapper();
}
......@@ -6,7 +6,6 @@ import com.kobylynskyi.graphql.codegen.model.MappingContext;
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import graphql.language.Argument;
import java.util.HashSet;
import java.util.Set;
......@@ -96,13 +95,13 @@ public class ScalaGraphQLTypeMapper implements GraphQLTypeMapper {
}
@Override
public String mapDirectiveArgumentValue(MappingContext mappingContext, Argument dirArg, String argumentValueFormatter) {
return valueMapper.map(mappingContext, dirArg.getValue(), null, argumentValueFormatter);
public boolean addModelValidationAnnotationForType(String possiblyPrimitiveType) {
return !ScalaGraphQLTypeMapper.isScalaPrimitive(possiblyPrimitiveType);
}
@Override
public boolean addModelValidationAnnotationForType(String possiblyPrimitiveType) {
return !ScalaGraphQLTypeMapper.isScalaPrimitive(possiblyPrimitiveType);
public ValueMapper getValueMapper() {
return valueMapper;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册