Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Graphql Java Codegen
提交
92e276b6
G
Graphql Java Codegen
项目概览
梦境迷离
/
Graphql Java Codegen
11 个月 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Graphql Java Codegen
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
92e276b6
编写于
9月 30, 2020
作者:
B
Bogdan Kobylynskyi
提交者:
GitHub
9月 30, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Generate parametrized input class for interfaces #327 (#330)
上级
e6b9e9be
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
88 addition
and
11 deletion
+88
-11
src/main/java/com/kobylynskyi/graphql/codegen/GraphQLCodegen.java
.../java/com/kobylynskyi/graphql/codegen/GraphQLCodegen.java
+16
-8
src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java
...en/mapper/RequestResponseDefinitionToDataModelMapper.java
+1
-1
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenFieldsResolversTest.java
...yi/graphql/codegen/GraphQLCodegenFieldsResolversTest.java
+13
-0
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenModelsForRootTypesTest.java
...graphql/codegen/GraphQLCodegenModelsForRootTypesTest.java
+2
-2
src/test/resources/expected-classes/request/ProductLinkCodeParametrizedInput.java.txt
...classes/request/ProductLinkCodeParametrizedInput.java.txt
+41
-0
src/test/resources/schemas/parametrized-input-client.graphqls
...test/resources/schemas/parametrized-input-client.graphqls
+15
-0
未找到文件。
src/main/java/com/kobylynskyi/graphql/codegen/GraphQLCodegen.java
浏览文件 @
92e276b6
...
...
@@ -279,8 +279,7 @@ public class GraphQLCodegen {
for
(
ExtendedInterfaceTypeDefinition
definition
:
document
.
getInterfaceDefinitions
())
{
generateFieldResolver
(
context
,
definition
.
getFieldDefinitions
(),
definition
).
ifPresent
(
generatedFiles:
:
add
);
}
System
.
out
.
println
(
String
.
format
(
"Generated %d definition classes in folder %s"
,
generatedFiles
.
size
(),
outputDir
.
getAbsolutePath
()));
System
.
out
.
printf
(
"Generated %d definition classes in folder %s%n"
,
generatedFiles
.
size
(),
outputDir
.
getAbsolutePath
());
return
generatedFiles
;
}
...
...
@@ -304,6 +303,13 @@ public class GraphQLCodegen {
if
(
Boolean
.
TRUE
.
equals
(
mappingConfig
.
getGenerateClient
()))
{
Map
<
String
,
Object
>
responseProjDataModel
=
RequestResponseDefinitionToDataModelMapper
.
mapResponseProjection
(
mappingContext
,
definition
);
generatedFiles
.
add
(
GraphQLCodegenFileCreator
.
generateFile
(
FreeMarkerTemplatesRegistry
.
responseProjectionTemplate
,
responseProjDataModel
,
outputDir
));
for
(
ExtendedFieldDefinition
fieldDefinition
:
definition
.
getFieldDefinitions
())
{
if
(!
Utils
.
isEmpty
(
fieldDefinition
.
getInputValueDefinitions
()))
{
Map
<
String
,
Object
>
fieldProjDataModel
=
RequestResponseDefinitionToDataModelMapper
.
mapParametrizedInput
(
mappingContext
,
fieldDefinition
,
definition
);
generatedFiles
.
add
(
GraphQLCodegenFileCreator
.
generateFile
(
FreeMarkerTemplatesRegistry
.
parametrizedInputTemplate
,
fieldProjDataModel
,
outputDir
));
}
}
}
return
generatedFiles
;
}
...
...
@@ -398,12 +404,14 @@ public class GraphQLCodegen {
private
Optional
<
File
>
generateFieldResolver
(
MappingContext
mappingContext
,
List
<
ExtendedFieldDefinition
>
fieldDefinitions
,
ExtendedDefinition
<?,
?>
parentDefinition
)
{
List
<
ExtendedFieldDefinition
>
fieldDefsWithResolvers
=
fieldDefinitions
.
stream
()
.
filter
(
fieldDef
->
FieldDefinitionToParameterMapper
.
generateResolversForField
(
mappingContext
,
fieldDef
,
parentDefinition
))
.
collect
(
toList
());
if
(!
fieldDefsWithResolvers
.
isEmpty
())
{
Map
<
String
,
Object
>
dataModel
=
FieldDefinitionsToResolverDataModelMapper
.
mapToTypeResolver
(
mappingContext
,
fieldDefsWithResolvers
,
parentDefinition
.
getName
());
return
Optional
.
of
(
GraphQLCodegenFileCreator
.
generateFile
(
FreeMarkerTemplatesRegistry
.
operationsTemplate
,
dataModel
,
outputDir
));
if
(
Boolean
.
TRUE
.
equals
(
mappingConfig
.
getGenerateApis
()))
{
List
<
ExtendedFieldDefinition
>
fieldDefsWithResolvers
=
fieldDefinitions
.
stream
()
.
filter
(
fieldDef
->
FieldDefinitionToParameterMapper
.
generateResolversForField
(
mappingContext
,
fieldDef
,
parentDefinition
))
.
collect
(
toList
());
if
(!
fieldDefsWithResolvers
.
isEmpty
())
{
Map
<
String
,
Object
>
dataModel
=
FieldDefinitionsToResolverDataModelMapper
.
mapToTypeResolver
(
mappingContext
,
fieldDefsWithResolvers
,
parentDefinition
.
getName
());
return
Optional
.
of
(
GraphQLCodegenFileCreator
.
generateFile
(
FreeMarkerTemplatesRegistry
.
operationsTemplate
,
dataModel
,
outputDir
));
}
}
return
Optional
.
empty
();
}
...
...
src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java
浏览文件 @
92e276b6
...
...
@@ -64,7 +64,7 @@ public class RequestResponseDefinitionToDataModelMapper {
*/
public
static
Map
<
String
,
Object
>
mapParametrizedInput
(
MappingContext
mappingContext
,
ExtendedFieldDefinition
fieldDefinition
,
Extended
ObjectTypeDefinition
parentTypeDefinition
)
{
Extended
Definition
<?,
?>
parentTypeDefinition
)
{
String
className
=
MapperUtils
.
getParametrizedInputClassName
(
mappingContext
,
fieldDefinition
,
parentTypeDefinition
);
Map
<
String
,
Object
>
dataModel
=
new
HashMap
<>();
// ParametrizedInput classes are sharing the package with the model classes, so no imports are needed
...
...
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenFieldsResolversTest.java
浏览文件 @
92e276b6
...
...
@@ -50,6 +50,19 @@ class GraphQLCodegenFieldsResolversTest {
getFileByName
(
files
,
"CommitResolver.java"
));
}
@Test
void
generate_ParametrizedFieldsInInterface
()
throws
Exception
{
mappingConfig
.
setGenerateClient
(
true
);
mappingConfig
.
setGenerateApis
(
false
);
new
GraphQLCodegen
(
singletonList
(
"src/test/resources/schemas/parametrized-input-client.graphqls"
),
outputBuildDir
,
mappingConfig
,
TestUtils
.
getStaticGeneratedInfo
()).
generate
();
File
[]
files
=
Objects
.
requireNonNull
(
outputJavaClassesDir
.
listFiles
());
assertSameTrimmedContent
(
new
File
(
"src/test/resources/expected-classes/request/ProductLinkCodeParametrizedInput.java.txt"
),
getFileByName
(
files
,
"ProductLinkCodeParametrizedInput.java"
));
}
@Test
void
generate_CustomFieldsResolvers
()
throws
Exception
{
mappingConfig
.
setModelNamePrefix
(
"Github"
);
...
...
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenModelsForRootTypesTest.java
浏览文件 @
92e276b6
...
...
@@ -70,8 +70,8 @@ class GraphQLCodegenModelsForRootTypesTest {
File
[]
files
=
Objects
.
requireNonNull
(
outputJavaClassesDir
.
listFiles
());
List
<
String
>
generatedFileNames
=
Arrays
.
stream
(
files
).
map
(
File:
:
getName
).
sorted
().
collect
(
toList
());
assertEquals
(
Arrays
.
asList
(
"Event.java"
,
"EventProperty.java"
,
"Event
PropertyResolver.java"
,
"Event
Status.java"
,
"Mutation.java"
,
"
MutationResolver.java"
,
"Query.java"
,
"QueryResolver
.java"
,
"Subscription.java"
),
assertEquals
(
Arrays
.
asList
(
"Event.java"
,
"EventProperty.java"
,
"EventStatus.java"
,
"Mutation.java"
,
"
Query
.java"
,
"Subscription.java"
),
generatedFileNames
);
}
...
...
src/test/resources/expected-classes/request/ProductLinkCodeParametrizedInput.java.txt
0 → 100644
浏览文件 @
92e276b6
package com.github.graphql;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLParametrizedInput;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLRequestSerializer;
import java.util.StringJoiner;
/**
* Parametrized input for field linkCode in type Product
*/
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public class ProductLinkCodeParametrizedInput implements GraphQLParametrizedInput {
@javax.validation.constraints.NotNull
private String pid;
public ProductLinkCodeParametrizedInput() {
}
public ProductLinkCodeParametrizedInput(String pid) {
this.pid = pid;
}
public ProductLinkCodeParametrizedInput pid(String pid) {
this.pid = pid;
return this;
}
@Override
public String toString() {
StringJoiner joiner = new StringJoiner(", ", "(", ")");
if (pid != null) {
joiner.add("pid: " + GraphQLRequestSerializer.getEntry(pid));
}
return joiner.toString();
}
}
\ No newline at end of file
src/test/resources/schemas/parametrized-input-client.graphqls
0 → 100644
浏览文件 @
92e276b6
type Query {
product(
companyId: ID!
): Product!
}
interface Product {
linkCode(
pid: ID!
): LinkCode
}
type LinkCode {
html: String
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录