diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/FreeMarkerTemplatesRegistry.java b/src/main/java/com/kobylynskyi/graphql/codegen/FreeMarkerTemplatesRegistry.java index 65964495a4fdea4eff6cc11d2e272bf9274c34ce..d9abd0b7d12aad4e2736ea958a2248db09506915 100644 --- a/src/main/java/com/kobylynskyi/graphql/codegen/FreeMarkerTemplatesRegistry.java +++ b/src/main/java/com/kobylynskyi/graphql/codegen/FreeMarkerTemplatesRegistry.java @@ -38,15 +38,15 @@ class FreeMarkerTemplatesRegistry { try { EnumMap javaTemplates = new EnumMap<>(FreeMarkerTemplateType.class); - javaTemplates.put(TYPE, configuration.getTemplate("templates/javaClassGraphqlType.ftl")); - javaTemplates.put(ENUM, configuration.getTemplate("templates/javaClassGraphqlEnum.ftl")); - javaTemplates.put(UNION, configuration.getTemplate("templates/javaClassGraphqlUnion.ftl")); - javaTemplates.put(REQUEST, configuration.getTemplate("templates/javaClassGraphqlRequest.ftl")); - javaTemplates.put(RESPONSE, configuration.getTemplate("templates/javaClassGraphqlResponse.ftl")); - javaTemplates.put(INTERFACE, configuration.getTemplate("templates/javaClassGraphqlInterface.ftl")); - javaTemplates.put(OPERATIONS, configuration.getTemplate("templates/javaClassGraphqlOperations.ftl")); - javaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl")); - javaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl")); + javaTemplates.put(TYPE, configuration.getTemplate("templates/java-lang/javaClassGraphqlType.ftl")); + javaTemplates.put(ENUM, configuration.getTemplate("templates/java-lang/javaClassGraphqlEnum.ftl")); + javaTemplates.put(UNION, configuration.getTemplate("templates/java-lang/javaClassGraphqlUnion.ftl")); + javaTemplates.put(REQUEST, configuration.getTemplate("templates/java-lang/javaClassGraphqlRequest.ftl")); + javaTemplates.put(RESPONSE, configuration.getTemplate("templates/java-lang/javaClassGraphqlResponse.ftl")); + javaTemplates.put(INTERFACE, configuration.getTemplate("templates/java-lang/javaClassGraphqlInterface.ftl")); + javaTemplates.put(OPERATIONS, configuration.getTemplate("templates/java-lang/javaClassGraphqlOperations.ftl")); + javaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/java-lang/javaClassGraphqlParametrizedInput.ftl")); + javaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/java-lang/javaClassGraphqlResponseProjection.ftl")); templateMap.put(GeneratedLanguage.JAVA, javaTemplates); EnumMap scalaTemplates = new EnumMap<>(FreeMarkerTemplateType.class); @@ -72,8 +72,6 @@ class FreeMarkerTemplatesRegistry { kotlinTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/kotlin-lang/kotlinClassGraphqlParametrizedInput.ftl")); kotlinTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/kotlin-lang/kotlinClassGraphqlResponseProjection.ftl")); templateMap.put(GeneratedLanguage.KOTLIN, kotlinTemplates); - - } catch (IOException e) { throw new UnableToLoadFreeMarkerTemplateException(e); } diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InterfaceDefinitionToDataModelMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InterfaceDefinitionToDataModelMapper.java index 1ecacfa8ee79a5e814bba91ab1658f5e9837308b..5f50ad46ebb1b98216ca1ded0a64a836bf642e96 100644 --- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InterfaceDefinitionToDataModelMapper.java +++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InterfaceDefinitionToDataModelMapper.java @@ -5,6 +5,8 @@ import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedInterfaceTypeDe import java.util.HashMap; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import static com.kobylynskyi.graphql.codegen.model.DataModelFields.*; @@ -40,6 +42,7 @@ public class InterfaceDefinitionToDataModelMapper { dataModel.put(PACKAGE, DataModelMapper.getModelPackageName(mappingContext)); dataModel.put(CLASS_NAME, dataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, definition)); dataModel.put(JAVA_DOC, definition.getJavaDoc()); + dataModel.put(IMPLEMENTS, getInterfaces(mappingContext, definition)); dataModel.put(ANNOTATIONS, graphQLTypeMapper.getAnnotations(mappingContext, definition)); dataModel.put(FIELDS, fieldDefinitionToParameterMapper.mapFields(mappingContext, definition.getFieldDefinitions(), definition)); dataModel.put(GENERATED_INFO, mappingContext.getGeneratedInformation()); @@ -48,4 +51,12 @@ public class InterfaceDefinitionToDataModelMapper { return dataModel; } + private Set getInterfaces(MappingContext mappingContext, + ExtendedInterfaceTypeDefinition definition) { + return definition.getImplements() + .stream() + .map(anImplement -> graphQLTypeMapper.getLanguageType(mappingContext, anImplement)) + .collect(Collectors.toSet()); + } + } diff --git a/src/main/resources/templates/javaClassGraphqlEnum.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlEnum.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlEnum.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlEnum.ftl diff --git a/src/main/resources/templates/javaClassGraphqlInterface.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlInterface.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlInterface.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlInterface.ftl diff --git a/src/main/resources/templates/javaClassGraphqlOperations.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlOperations.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlOperations.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlOperations.ftl diff --git a/src/main/resources/templates/javaClassGraphqlParametrizedInput.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlParametrizedInput.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlParametrizedInput.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlParametrizedInput.ftl diff --git a/src/main/resources/templates/javaClassGraphqlRequest.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlRequest.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlRequest.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlRequest.ftl diff --git a/src/main/resources/templates/javaClassGraphqlResponse.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlResponse.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlResponse.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlResponse.ftl diff --git a/src/main/resources/templates/javaClassGraphqlResponseProjection.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlResponseProjection.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlResponseProjection.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlResponseProjection.ftl diff --git a/src/main/resources/templates/javaClassGraphqlType.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlType.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlType.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlType.ftl diff --git a/src/main/resources/templates/javaClassGraphqlUnion.ftl b/src/main/resources/templates/java-lang/javaClassGraphqlUnion.ftl similarity index 100% rename from src/main/resources/templates/javaClassGraphqlUnion.ftl rename to src/main/resources/templates/java-lang/javaClassGraphqlUnion.ftl diff --git a/src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenInterfacesTest.java b/src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenInterfacesTest.java index d958a071d97ba113aa3fcda9ae87de00aae12065..eb99c4acf53b4197665e8f6fafc840e39d549c00 100644 --- a/src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenInterfacesTest.java +++ b/src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenInterfacesTest.java @@ -43,7 +43,7 @@ class GraphQLCodegenInterfacesTest { File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles()); List generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList()); - assertEquals(Arrays.asList("Bar.java", "Bar1.java", "Foo.java", "Foo1.java"), generatedFileNames); + assertEquals(Arrays.asList("Bar.java", "Bar1.java", "BarBar.java", "Foo.java", "Foo1.java"), generatedFileNames); for (File file : files) { assertSameTrimmedContent(new File(String.format("src/test/resources/expected-classes/interfaces/%s.txt", @@ -51,4 +51,5 @@ class GraphQLCodegenInterfacesTest { file); } } + } diff --git a/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenInterfacesTest.java b/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenInterfacesTest.java index b4d42701268c571d958143f99d2272fb1d4bf379..33819556fbcc8b73f56c636fd7e09670a2100942 100644 --- a/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenInterfacesTest.java +++ b/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenInterfacesTest.java @@ -46,7 +46,7 @@ class GraphQLCodegenInterfacesTest { File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles()); List generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList()); - assertEquals(Arrays.asList("Bar.kt", "Bar1.kt", "Foo.kt", "Foo1.kt"), generatedFileNames); + assertEquals(Arrays.asList("Bar.kt", "Bar1.kt", "BarBar.kt", "Foo.kt", "Foo1.kt"), generatedFileNames); for (File file : files) { assertSameTrimmedContent(new File(String.format("src/test/resources/expected-classes/kt/interfaces/%s.txt", diff --git a/src/test/resources/expected-classes/interfaces/BarBar.java.txt b/src/test/resources/expected-classes/interfaces/BarBar.java.txt new file mode 100644 index 0000000000000000000000000000000000000000..9cf5faa6b6b4dc44cb0831a2674e82b13b9f10c3 --- /dev/null +++ b/src/test/resources/expected-classes/interfaces/BarBar.java.txt @@ -0,0 +1,13 @@ +package com.kobylynskyi.graphql.interfaces; + + +@javax.annotation.Generated( + value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen", + date = "2020-12-31T23:59:59-0500" +) +public interface BarBar extends Bar{ + + @javax.validation.constraints.NotNull + String getId(); + +} \ No newline at end of file diff --git a/src/test/resources/expected-classes/kt/interfaces/BarBar.kt.txt b/src/test/resources/expected-classes/kt/interfaces/BarBar.kt.txt new file mode 100644 index 0000000000000000000000000000000000000000..b7e2b2ccad229d4ab4371d097cbbae82debff46e --- /dev/null +++ b/src/test/resources/expected-classes/kt/interfaces/BarBar.kt.txt @@ -0,0 +1,12 @@ +package com.kobylynskyi.graphql.interfaces + + +@javax.annotation.Generated( + value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"], + date = "2020-12-31T23:59:59-0500" +) +interface BarBar : Bar{ + + val id: String + +} \ No newline at end of file diff --git a/src/test/resources/schemas/interfaces.graphqls b/src/test/resources/schemas/interfaces.graphqls index 1f69d2a365c892fc1a4f203ffcbb5ce39a614850..ae6c06dc63bf9a105c7a97a1a9c8df6135b88aab 100644 --- a/src/test/resources/schemas/interfaces.graphqls +++ b/src/test/resources/schemas/interfaces.graphqls @@ -7,11 +7,15 @@ interface Bar { id: ID! } -type Foo1 implements Foo{ +type Foo1 implements Foo { id: ID! bars: [Bar1] } -type Bar1 implements Bar{ +type Bar1 implements Bar { + id: ID! +} + +interface BarBar implements Bar { id: ID! } \ No newline at end of file