Skip to content

Commit 19f9d3a

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents d738f7d + 044e4fb commit 19f9d3a

File tree

3 files changed

+53
-20
lines changed

3 files changed

+53
-20
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[![Build Status](https://travis-ci.org/graphql-java/graphql-java-annotations.svg?branch=master)](https://travis-ci.org/yrashk/graphql-java-annotations)
2-
[![Maven Central](https://img.shields.io/maven-central/v/com.graphql-java/graphql-java-annotations.svg?maxAge=2592000)]()
2+
[![Maven Central](https://img.shields.io/maven-central/v/io.github.graphql-java/graphql-java-annotations.svg?maxAge=2592000)]()
33
# GraphQL Annotations for Java
44

55
[GraphQL-Java](https://github.com/andimarek/graphql-java) is a great library, but its syntax is a little bit verbose. This library offers an annotations-based
@@ -12,7 +12,7 @@ syntax for GraphQL schema definition.
1212

1313
```groovy
1414
dependencies {
15-
compile "com.graphql-java:graphql-java-annotations:3.0.3"
15+
compile "io.github.graphql-java:graphql-java-annotations:5.0.4"
1616
}
1717
```
1818

src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/field/FieldDataFetcherBuilder.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package graphql.annotations.processor.retrievers.fieldBuilders.field;
1616

1717
import graphql.annotations.annotationTypes.GraphQLDataFetcher;
18+
import graphql.annotations.annotationTypes.GraphQLTypeExtension;
1819
import graphql.annotations.connection.GraphQLConnection;
1920
import graphql.annotations.dataFetchers.ExtensionDataFetcherWrapper;
2021
import graphql.annotations.dataFetchers.MethodDataFetcher;
@@ -73,13 +74,13 @@ private DataFetcher handleNullCase(DataFetcher actualDataFetcher) {
7374
if (isaBoolean()) {
7475
actualDataFetcher = getBooleanDataFetcher(actualDataFetcher);
7576
} else if (checkIfPrefixGetterExists(field.getDeclaringClass(), "get", field.getName())) {
76-
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()));
77+
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()), field);
7778
} else{
7879
actualDataFetcher = getDataFetcherWithFluentGetter(actualDataFetcher);
7980
}
8081

8182
if (actualDataFetcher == null) {
82-
actualDataFetcher = wrapExtension(new FieldDataFetcher(field.getName()));
83+
actualDataFetcher = wrapExtension(new FieldDataFetcher(field.getName()), field);
8384
}
8485
return actualDataFetcher;
8586
}
@@ -103,14 +104,17 @@ private DataFetcher getDataFetcherWithFluentGetter(DataFetcher actualDataFetcher
103104
return actualDataFetcher;
104105
}
105106

106-
private ExtensionDataFetcherWrapper wrapExtension(DataFetcher dataFetcher) {
107-
return new ExtensionDataFetcherWrapper(field.getDeclaringClass(), dataFetcher);
107+
private DataFetcher wrapExtension(DataFetcher dataFetcher, Field field) {
108+
if (field.getDeclaringClass().isAnnotationPresent(GraphQLTypeExtension.class)) {
109+
return new ExtensionDataFetcherWrapper(field.getDeclaringClass(), dataFetcher);
110+
}
111+
return dataFetcher;
108112
}
109113

110114
private DataFetcher getBooleanDataFetcher(DataFetcher actualDataFetcher) {
111115
if (checkIfPrefixGetterExists(field.getDeclaringClass(), "is", field.getName()) ||
112116
checkIfPrefixGetterExists(field.getDeclaringClass(), "get", field.getName())) {
113-
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()));
117+
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()), field);
114118
}
115119
return actualDataFetcher;
116120
}

src/test/java/graphql/annotations/GraphQLObjectTest.java

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,14 @@
1818
import graphql.GraphQL;
1919
import graphql.Scalars;
2020
import graphql.annotations.annotationTypes.*;
21-
import graphql.annotations.dataFetchers.ExtensionDataFetcherWrapper;
21+
import graphql.annotations.annotationTypes.GraphQLNonNull;
2222
import graphql.annotations.processor.GraphQLAnnotations;
2323
import graphql.annotations.processor.ProcessingElementsContainer;
2424
import graphql.annotations.processor.retrievers.GraphQLInputObjectRetriever;
2525
import graphql.annotations.processor.retrievers.GraphQLObjectHandler;
2626
import graphql.annotations.processor.typeFunctions.TypeFunction;
27-
import graphql.schema.DataFetcher;
28-
import graphql.schema.DataFetchingEnvironment;
29-
30-
import graphql.schema.GraphQLArgument;
31-
import graphql.schema.GraphQLFieldDefinition;
32-
import graphql.schema.GraphQLInputObjectType;
33-
import graphql.schema.GraphQLInputType;
34-
import graphql.schema.GraphQLList;
35-
import graphql.schema.GraphQLObjectType;
36-
import graphql.schema.GraphQLSchema;
27+
import graphql.schema.*;
28+
3729
import graphql.schema.GraphQLType;
3830
import graphql.schema.idl.SchemaParser;
3931
import graphql.schema.idl.SchemaPrinter;
@@ -141,6 +133,43 @@ public String fieldWithNamedArgs(@GraphQLName("namedArg") String firstArgument)
141133
}
142134
}
143135

136+
public static class TestMappedObject {
137+
@GraphQLField
138+
public String name;
139+
}
140+
141+
public static class TestObjectDB{
142+
public String name;
143+
144+
public TestObjectDB(String name) {
145+
this.name = name;
146+
}
147+
}
148+
149+
public static class TestQuery{
150+
@GraphQLField
151+
@GraphQLDataFetcher(ObjectFetcher.class)
152+
public TestMappedObject object;
153+
}
154+
155+
public static class ObjectFetcher implements DataFetcher<TestObjectDB> {
156+
157+
@Override
158+
public TestObjectDB get(DataFetchingEnvironment environment) {
159+
return new TestObjectDB("test");
160+
}
161+
}
162+
163+
@Test
164+
public void fetchTestMappedObject_assertNameIsMappedFromDBObject(){
165+
GraphQLObjectType object = GraphQLAnnotations.object(TestQuery.class);
166+
GraphQLSchema schema = newSchema().query(object).build();
167+
168+
ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{object {name}}");
169+
assertTrue(result.getErrors().isEmpty());
170+
assertEquals(((LinkedHashMap)(((LinkedHashMap)result.getData()).get("object"))).get("name"), "test");
171+
}
172+
144173
@Test
145174
public void namedFields() {
146175
GraphQLObjectType object = GraphQLAnnotations.object(TestObjectNamedArgs.class);
@@ -214,8 +243,8 @@ public void fields() {
214243
assertEquals(fields.get(5).getName(), "privateTest");
215244
assertEquals(fields.get(6).getName(), "publicTest");
216245

217-
assertEquals(fields.get(5).getDataFetcher().getClass(), ExtensionDataFetcherWrapper.class);
218-
assertEquals(fields.get(6).getDataFetcher().getClass(), ExtensionDataFetcherWrapper.class);
246+
assertEquals(fields.get(5).getDataFetcher().getClass(), PropertyDataFetcher.class);
247+
assertEquals(fields.get(6).getDataFetcher().getClass(), FieldDataFetcher.class);
219248

220249
assertEquals(fields.get(7).getName(), "z_nonOptionalString");
221250
assertTrue(fields.get(7).getType() instanceof graphql.schema.GraphQLNonNull);

0 commit comments

Comments
 (0)