diff --git a/ezyhttp-client/pom.xml b/ezyhttp-client/pom.xml
index 8168a2a4..0aa02aa4 100644
--- a/ezyhttp-client/pom.xml
+++ b/ezyhttp-client/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-client
diff --git a/ezyhttp-core/pom.xml b/ezyhttp-core/pom.xml
index dc2dc606..c6659cb2 100644
--- a/ezyhttp-core/pom.xml
+++ b/ezyhttp-core/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-core
diff --git a/ezyhttp-server-boot/pom.xml b/ezyhttp-server-boot/pom.xml
index 151868a6..d9791c52 100644
--- a/ezyhttp-server-boot/pom.xml
+++ b/ezyhttp-server-boot/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-boot
diff --git a/ezyhttp-server-core/pom.xml b/ezyhttp-server-core/pom.xml
index 27a2fee0..ef6f578a 100644
--- a/ezyhttp-server-core/pom.xml
+++ b/ezyhttp-server-core/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-core
diff --git a/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/manager/RequestHandlerManager.java b/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/manager/RequestHandlerManager.java
index 3dcf4226..5bb0c421 100644
--- a/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/manager/RequestHandlerManager.java
+++ b/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/manager/RequestHandlerManager.java
@@ -1,13 +1,5 @@
package com.tvd12.ezyhttp.server.core.manager;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import com.tvd12.ezyfox.io.EzyStrings;
import com.tvd12.ezyfox.util.EzyDestroyable;
import com.tvd12.ezyfox.util.EzyLoggable;
@@ -16,10 +8,18 @@
import com.tvd12.ezyhttp.server.core.exception.DuplicateURIMappingHandlerException;
import com.tvd12.ezyhttp.server.core.handler.RequestHandler;
import com.tvd12.ezyhttp.server.core.request.RequestURI;
-
import lombok.Getter;
import lombok.Setter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
public class RequestHandlerManager extends EzyLoggable implements EzyDestroyable {
@Setter
@@ -70,10 +70,11 @@ public RequestHandler getHandler(
}
public void addHandler(RequestURI uri, RequestHandler handler) {
- RequestHandler old = this.handlers.put(uri, handler);
+ RequestHandler old = this.handlers.get(uri);
if (old != null && !allowOverrideURI) {
throw new DuplicateURIMappingHandlerException(uri, old, handler);
}
+ this.handlers.put(uri, handler);
this.handledURIs.add(uri.getUri());
this.logger.info("add mapping uri: {}", uri);
this.handlerListByURI
@@ -118,7 +119,15 @@ public void addHandlers(Map> handlers) {
}
public Map> getHandlerListByURI() {
- return Collections.unmodifiableMap(handlerListByURI);
+ return handlerListByURI
+ .entrySet()
+ .stream()
+ .collect(
+ Collectors.toMap(
+ Map.Entry::getKey,
+ it -> Collections.unmodifiableList(it.getValue())
+ )
+ );
}
@Override
diff --git a/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/servlet/BlockingServlet.java b/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/servlet/BlockingServlet.java
index b3848d1b..ac28a0de 100644
--- a/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/servlet/BlockingServlet.java
+++ b/ezyhttp-server-core/src/main/java/com/tvd12/ezyhttp/server/core/servlet/BlockingServlet.java
@@ -18,7 +18,11 @@
import com.tvd12.ezyhttp.server.core.handler.UncaughtExceptionHandler;
import com.tvd12.ezyhttp.server.core.handler.UnhandledErrorHandler;
import com.tvd12.ezyhttp.server.core.interceptor.RequestInterceptor;
-import com.tvd12.ezyhttp.server.core.manager.*;
+import com.tvd12.ezyhttp.server.core.manager.ComponentManager;
+import com.tvd12.ezyhttp.server.core.manager.ExceptionHandlerManager;
+import com.tvd12.ezyhttp.server.core.manager.InterceptorManager;
+import com.tvd12.ezyhttp.server.core.manager.RequestHandlerManager;
+import com.tvd12.ezyhttp.server.core.manager.RequestURIManager;
import com.tvd12.ezyhttp.server.core.request.RequestArguments;
import com.tvd12.ezyhttp.server.core.request.SimpleRequestArguments;
import com.tvd12.ezyhttp.server.core.view.Redirect;
@@ -29,7 +33,6 @@
import javax.servlet.AsyncContext;
import javax.servlet.AsyncListener;
-import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
@@ -38,7 +41,11 @@
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URLDecoder;
-import java.util.*;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
public class BlockingServlet extends HttpServlet {
@@ -64,7 +71,7 @@ public class BlockingServlet extends HttpServlet {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@Override
- public void init() throws ServletException {
+ public void init() {
this.componentManager = ComponentManager.getInstance();
this.debug = componentManager.isDebug();
this.managementPort = componentManager.getManagementPort();
diff --git a/ezyhttp-server-graphql/pom.xml b/ezyhttp-server-graphql/pom.xml
index d0af9d15..a92e7d76 100644
--- a/ezyhttp-server-graphql/pom.xml
+++ b/ezyhttp-server-graphql/pom.xml
@@ -6,7 +6,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-graphql
ezyhttp-server-graphql
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/config/GraphQLConfiguration.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/config/GraphQLConfiguration.java
index f7aadf2e..23dd66f5 100644
--- a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/config/GraphQLConfiguration.java
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/config/GraphQLConfiguration.java
@@ -10,6 +10,7 @@
import com.tvd12.ezyhttp.server.graphql.data.GraphQLDataFilter;
import com.tvd12.ezyhttp.server.graphql.fetcher.GraphQLDataFetcher;
import com.tvd12.ezyhttp.server.graphql.fetcher.GraphQLDataFetcherManager;
+import com.tvd12.ezyhttp.server.graphql.fetcher.GraphQLDataFetcherProvider;
import com.tvd12.ezyhttp.server.graphql.interceptor.GraphQLInterceptorManager;
import com.tvd12.ezyhttp.server.graphql.json.GraphQLObjectMapperFactory;
import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLSchemaParser;
@@ -52,7 +53,10 @@ public void config() {
for (GraphQLDataFetcher dataFetcher : dataFetchers) {
dataFetcherManagerBuilder.addDataFetcher(dataFetcher);
}
+ GraphQLDataFetcherProvider dataFetcherProvider = singletonFactory
+ .getSingletonCast(GraphQLDataFetcherProvider.class);
GraphQLDataFetcherManager dataFetcherManager = dataFetcherManagerBuilder
+ .dataFetcherProvider(dataFetcherProvider)
.build();
GraphQLInterceptorManager interceptorManager =
new GraphQLInterceptorManager(singletonFactory);
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/data/GraphQLDataFilter.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/data/GraphQLDataFilter.java
index 346a471c..f0a1230c 100644
--- a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/data/GraphQLDataFilter.java
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/data/GraphQLDataFilter.java
@@ -4,7 +4,13 @@
import com.tvd12.ezyhttp.server.graphql.exception.GraphQLInvalidSchemeException;
import lombok.AllArgsConstructor;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import static com.tvd12.ezyhttp.server.graphql.constants.GraphQLConstants.ALL_FIELDS;
@@ -39,6 +45,9 @@ public Map filter(
for (GraphQLField field : entry.field.getFields()) {
String fieldName = field.getName();
+ if (entry.data == null) {
+ continue;
+ }
Object value = entry.data.get(fieldName);
if (value == null) {
continue;
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcher.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcher.java
index 15e8733d..d5218f5e 100644
--- a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcher.java
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcher.java
@@ -3,9 +3,7 @@
import com.tvd12.ezyfox.exception.EzyNotImplementedException;
import com.tvd12.ezyhttp.server.core.request.RequestArguments;
import com.tvd12.ezyhttp.server.graphql.query.GraphQLQueryDefinition;
-import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLDataSchema;
-
-import java.util.List;
+import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLDataFetcherSchema;
import static com.tvd12.ezyhttp.server.graphql.util.GraphQLQueryAnnotations.getQLQueryGroupName;
import static com.tvd12.ezyhttp.server.graphql.util.GraphQLQueryAnnotations.getQLQueryName;
@@ -32,11 +30,7 @@ default String getQueryGroupName() {
return getQLQueryGroupName(getClass());
}
- default List getQueryScheme() {
- return null;
- }
-
- default GraphQLDataSchema getResponseScheme() {
+ default GraphQLDataFetcherSchema getSchema() {
return null;
}
}
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherManager.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherManager.java
index a54a3ab6..3861f85a 100644
--- a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherManager.java
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherManager.java
@@ -2,12 +2,20 @@
import com.tvd12.ezyfox.builder.EzyBuilder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import static com.tvd12.ezyfox.io.EzyStrings.isBlank;
import static com.tvd12.ezyhttp.server.graphql.constants.GraphQLConstants.DEFAULT_QL_GROUP_NAME;
-import static com.tvd12.ezyhttp.server.graphql.util.GraphQLDataFetcherClasses.*;
+import static com.tvd12.ezyhttp.server.graphql.util.GraphQLDataFetcherClasses.isAuthenticatedFetcher;
+import static com.tvd12.ezyhttp.server.graphql.util.GraphQLDataFetcherClasses.isManagementFetcher;
+import static com.tvd12.ezyhttp.server.graphql.util.GraphQLDataFetcherClasses.isPaymentFetcher;
public class GraphQLDataFetcherManager {
@@ -17,6 +25,7 @@ public class GraphQLDataFetcherManager {
private final Set paymentQueryNames;
private final Map groupNameByQueryName;
private final Map> queryNamesByGroupName;
+ private final GraphQLDataFetcherProvider dataFetcherProvider;
protected GraphQLDataFetcherManager(Builder builder) {
this.dataFetchers = builder.dataFetchers;
@@ -25,6 +34,32 @@ protected GraphQLDataFetcherManager(Builder builder) {
this.paymentQueryNames = builder.paymentQueryNames;
this.groupNameByQueryName = builder.groupNameByQueryName;
this.queryNamesByGroupName = builder.queryNamesByGroupName;
+ this.dataFetcherProvider = builder.dataFetcherProvider;
+ }
+
+ public void addDataFetcher(
+ String queryName,
+ GraphQLDataFetcher fetcher
+ ) {
+ this.dataFetchers.put(queryName, fetcher);
+ if (isAuthenticatedFetcher(fetcher)) {
+ this.authenticatedQueryNames.add(queryName);
+ }
+ if (isManagementFetcher(fetcher)) {
+ this.managementQueryNames.add(queryName);
+ }
+ if (isPaymentFetcher(fetcher)) {
+ this.paymentQueryNames.add(queryName);
+ }
+ String groupName = fetcher.getQueryGroupName();
+ if (isBlank(groupName)) {
+ groupName = DEFAULT_QL_GROUP_NAME;
+ }
+ this.groupNameByQueryName.put(queryName, groupName);
+ this.queryNamesByGroupName.computeIfAbsent(
+ groupName,
+ k -> ConcurrentHashMap.newKeySet()
+ ).add(queryName);
}
public String getGroupNameByQueryName(String queryName) {
@@ -32,7 +67,12 @@ public String getGroupNameByQueryName(String queryName) {
}
public GraphQLDataFetcher getDataFetcher(String queryName) {
- return dataFetchers.get(queryName);
+ GraphQLDataFetcher fetcher = dataFetchers
+ .get(queryName);
+ if (fetcher == null && dataFetcherProvider != null) {
+ fetcher = dataFetcherProvider.provide(queryName);
+ }
+ return fetcher;
}
public Map> getQueryNameByGroupName() {
@@ -74,17 +114,18 @@ public static Builder builder() {
public static class Builder implements EzyBuilder {
private final Map dataFetchers =
- new HashMap<>();
+ new ConcurrentHashMap<>();
private final Set authenticatedQueryNames =
- new HashSet<>();
+ ConcurrentHashMap.newKeySet();
private final Set managementQueryNames =
- new HashSet<>();
+ ConcurrentHashMap.newKeySet();
private final Set paymentQueryNames =
- new HashSet<>();
+ ConcurrentHashMap.newKeySet();
private final Map groupNameByQueryName =
- new HashMap<>();
+ new ConcurrentHashMap<>();
private final Map> queryNamesByGroupName =
- new HashMap<>();
+ new ConcurrentHashMap<>();
+ private GraphQLDataFetcherProvider dataFetcherProvider;
public Builder addDataFetcher(GraphQLDataFetcher fetcher) {
return addDataFetcher(fetcher.getQueryName(), fetcher);
@@ -111,11 +152,18 @@ public Builder addDataFetcher(
this.groupNameByQueryName.put(queryName, groupName);
this.queryNamesByGroupName.computeIfAbsent(
groupName,
- k -> new HashSet<>()
+ k -> ConcurrentHashMap.newKeySet()
).add(queryName);
return this;
}
+ public Builder dataFetcherProvider(
+ GraphQLDataFetcherProvider dataFetcherProvider
+ ) {
+ this.dataFetcherProvider = dataFetcherProvider;
+ return this;
+ }
+
@Override
public GraphQLDataFetcherManager build() {
return new GraphQLDataFetcherManager(this);
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherProvider.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherProvider.java
new file mode 100644
index 00000000..ee828d96
--- /dev/null
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/fetcher/GraphQLDataFetcherProvider.java
@@ -0,0 +1,6 @@
+package com.tvd12.ezyhttp.server.graphql.fetcher;
+
+public interface GraphQLDataFetcherProvider {
+
+ GraphQLDataFetcher provide(String queryName);
+}
diff --git a/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/scheme/GraphQLDataFetcherSchema.java b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/scheme/GraphQLDataFetcherSchema.java
new file mode 100644
index 00000000..629600f1
--- /dev/null
+++ b/ezyhttp-server-graphql/src/main/java/com/tvd12/ezyhttp/server/graphql/scheme/GraphQLDataFetcherSchema.java
@@ -0,0 +1,43 @@
+package com.tvd12.ezyhttp.server.graphql.scheme;
+
+import com.tvd12.ezyfox.builder.EzyBuilder;
+import lombok.Getter;
+import lombok.ToString;
+
+import java.util.List;
+
+@Getter
+@ToString
+public class GraphQLDataFetcherSchema {
+ protected final List queryScheme;
+ protected final GraphQLDataSchema getResponseScheme;
+
+ protected GraphQLDataFetcherSchema(Builder builder) {
+ this.queryScheme = builder.queryScheme;
+ this.getResponseScheme = builder.getResponseScheme;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder implements EzyBuilder {
+ protected List queryScheme;
+ protected GraphQLDataSchema getResponseScheme;
+
+ public Builder queryScheme(List queryScheme) {
+ this.queryScheme = queryScheme;
+ return this;
+ }
+
+ public Builder getResponseScheme(GraphQLDataSchema getResponseScheme) {
+ this.getResponseScheme = getResponseScheme;
+ return this;
+ }
+
+ @Override
+ public GraphQLDataFetcherSchema build() {
+ return new GraphQLDataFetcherSchema(this);
+ }
+ }
+}
diff --git a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/data/GraphQLDataFilterTest.java b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/data/GraphQLDataFilterTest.java
new file mode 100644
index 00000000..3dce23cf
--- /dev/null
+++ b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/data/GraphQLDataFilterTest.java
@@ -0,0 +1,32 @@
+package com.tvd12.ezyhttp.server.graphql.test.data;
+
+import com.tvd12.ezyhttp.server.graphql.data.GraphQLDataFilter;
+import com.tvd12.ezyhttp.server.graphql.data.GraphQLField;
+import com.tvd12.test.assertion.Asserts;
+import org.testng.annotations.Test;
+
+import java.util.Collections;
+import java.util.Map;
+
+public class GraphQLDataFilterTest {
+
+ private final GraphQLDataFilter instance = new GraphQLDataFilter();
+
+ @Test
+ public void filterWithNullDataTest() {
+ // given
+ GraphQLField childField = GraphQLField.builder()
+ .name("name")
+ .build();
+ GraphQLField queryDefinition = GraphQLField.builder()
+ .name("user")
+ .addField(childField)
+ .build();
+
+ // when
+ Map result = instance.filter(null, queryDefinition);
+
+ // then
+ Asserts.assertEquals(result, Collections.emptyMap(), false);
+ }
+}
diff --git a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherManagerTest.java b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherManagerTest.java
index 59d05f95..483d1ca6 100644
--- a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherManagerTest.java
+++ b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherManagerTest.java
@@ -2,7 +2,6 @@
import com.tvd12.ezyfox.annotation.EzyManagement;
import com.tvd12.ezyfox.annotation.EzyPayment;
-import com.tvd12.ezyfox.util.EzyMapBuilder;
import com.tvd12.ezyhttp.server.core.annotation.Authenticated;
import com.tvd12.ezyhttp.server.core.handler.AuthenticatedController;
import com.tvd12.ezyhttp.server.core.handler.ManageableController;
@@ -20,6 +19,9 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static com.tvd12.ezyhttp.server.graphql.constants.GraphQLConstants.DEFAULT_QL_GROUP_NAME;
public class GraphQLDataFetcherManagerTest {
@@ -33,29 +35,136 @@ public void test() {
.addDataFetcher(new Fetcher22())
.build();
+ // then
+ assertFetcherManager(instance);
+ }
+
+ @Test
+ public void addDataFetcherTest() {
+ // given
+ Fetcher1 fetcher1 = new Fetcher1();
+ Fetcher11 fetcher11 = new Fetcher11();
+ Fetcher2 fetcher2 = new Fetcher2();
+ Fetcher22 fetcher22 = new Fetcher22();
+ NoGroupFetcher noGroupFetcher = new NoGroupFetcher();
+ GraphQLDataFetcherManager instance = GraphQLDataFetcherManager
+ .builder()
+ .build();
+
+ // when
+ instance.addDataFetcher(fetcher1.getQueryName(), fetcher1);
+ instance.addDataFetcher(fetcher11.getQueryName(), fetcher11);
+ instance.addDataFetcher(fetcher2.getQueryName(), fetcher2);
+ instance.addDataFetcher(fetcher22.getQueryName(), fetcher22);
+ instance.addDataFetcher(noGroupFetcher.getQueryName(), noGroupFetcher);
+
+ // then
+ assertFetcherManager(instance);
+ Asserts.assertEquals(
+ instance.getDataFetcher(fetcher1.getQueryName()),
+ fetcher1
+ );
+ Asserts.assertEquals(
+ instance.getDataFetcher(noGroupFetcher.getQueryName()),
+ noGroupFetcher
+ );
+ Asserts.assertEquals(
+ instance.getGroupNameByQueryName(noGroupFetcher.getQueryName()),
+ DEFAULT_QL_GROUP_NAME
+ );
+ }
+
+ @Test
+ public void getDataFetcherTest() {
+ // given
+ Fetcher1 fetcher1 = new Fetcher1();
+ Fetcher2 fetcher2 = new Fetcher2();
+ GraphQLDataFetcherManager instance = GraphQLDataFetcherManager
+ .builder()
+ .addDataFetcher(fetcher1)
+ .addDataFetcher(fetcher2)
+ .build();
+
// when
+ GraphQLDataFetcher actualFetcher1 = instance.getDataFetcher(
+ fetcher1.getQueryName()
+ );
+ GraphQLDataFetcher actualFetcher2 = instance.getDataFetcher(
+ fetcher2.getQueryName()
+ );
+ GraphQLDataFetcher unknownFetcher = instance.getDataFetcher(
+ "unknown"
+ );
+
+ // then
+ Asserts.assertEquals(actualFetcher1, fetcher1);
+ Asserts.assertEquals(actualFetcher2, fetcher2);
+ Asserts.assertNull(unknownFetcher);
+ }
+
+ @Test
+ public void getDataFetcherWithProviderTest() {
+ // given
+ Fetcher1 fetcher1 = new Fetcher1();
+ Fetcher2 fetcher2 = new Fetcher2();
+ AtomicInteger provideCount = new AtomicInteger();
+ GraphQLDataFetcherManager instance = GraphQLDataFetcherManager
+ .builder()
+ .addDataFetcher(fetcher1)
+ .dataFetcherProvider(queryName -> {
+ provideCount.incrementAndGet();
+ return fetcher2.getQueryName().equals(queryName)
+ ? fetcher2
+ : null;
+ })
+ .build();
+
+ // when
+ GraphQLDataFetcher existingFetcher = instance.getDataFetcher(
+ fetcher1.getQueryName()
+ );
+ int provideCountAfterExistingFetcher = provideCount.get();
+ GraphQLDataFetcher providedFetcher = instance.getDataFetcher(
+ fetcher2.getQueryName()
+ );
+ GraphQLDataFetcher unknownFetcher = instance.getDataFetcher(
+ "unknown"
+ );
+
+ // then
+ Asserts.assertEquals(existingFetcher, fetcher1);
+ Asserts.assertEquals(provideCountAfterExistingFetcher, 0);
+ Asserts.assertEquals(providedFetcher, fetcher2);
+ Asserts.assertNull(unknownFetcher);
+ Asserts.assertEquals(provideCount.get(), 2);
+ }
+
+ private void assertFetcherManager(GraphQLDataFetcherManager instance) {
Map> queryNameByGroupName = instance
.getQueryNameByGroupName();
Map> sortedQueryNameByGroupName = instance
.getSortedQueryNameByGroupName();
- // then
Asserts.assertEquals(
- queryNameByGroupName,
- EzyMapBuilder.mapBuilder()
- .put("core1", new ArrayList<>(Sets.newHashSet("core1_fetcher1", "core1_fetcher11")))
- .put("core2", new ArrayList<>(Sets.newHashSet("core2_fetcher2", "core2_fetcher22")))
- .toMap(),
+ queryNameByGroupName.get("core1"),
+ new ArrayList<>(Sets.newHashSet("core1_fetcher1", "core1_fetcher11")),
+ false
+ );
+ Asserts.assertEquals(
+ queryNameByGroupName.get("core2"),
+ new ArrayList<>(Sets.newHashSet("core2_fetcher2", "core2_fetcher22")),
false
);
Asserts.assertEquals(
- sortedQueryNameByGroupName,
- EzyMapBuilder.mapBuilder()
- .put("core1", Arrays.asList("core1_fetcher1", "core1_fetcher11"))
- .put("core2", Arrays.asList("core2_fetcher2", "core2_fetcher22"))
- .toMap(),
+ sortedQueryNameByGroupName.get("core1"),
+ Arrays.asList("core1_fetcher1", "core1_fetcher11"),
+ false
+ );
+ Asserts.assertEquals(
+ sortedQueryNameByGroupName.get("core2"),
+ Arrays.asList("core2_fetcher2", "core2_fetcher22"),
false
);
@@ -226,4 +335,25 @@ public boolean isManagement() {
return false;
}
}
+
+ private static class NoGroupFetcher implements GraphQLDataFetcher {
+
+ @Override
+ public String getData(
+ RequestArguments arguments,
+ GraphQLQueryDefinition query
+ ) {
+ return null;
+ }
+
+ @Override
+ public String getQueryName() {
+ return "no_group_fetcher";
+ }
+
+ @Override
+ public String getQueryGroupName() {
+ return "";
+ }
+ }
}
diff --git a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherTest.java b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherTest.java
index 6cd7271d..27553995 100644
--- a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherTest.java
+++ b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/fetcher/GraphQLDataFetcherTest.java
@@ -15,8 +15,7 @@ public void test() {
// when
// then
- Asserts.assertNull(instance.getQueryScheme());
- Asserts.assertNull(instance.getResponseScheme());
+ Asserts.assertNull(instance.getSchema());
}
private static class ExGraphQLDataFetcher
diff --git a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLDataFetcherSchemaTest.java b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLDataFetcherSchemaTest.java
new file mode 100644
index 00000000..033f7625
--- /dev/null
+++ b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLDataFetcherSchemaTest.java
@@ -0,0 +1,41 @@
+package com.tvd12.ezyhttp.server.graphql.test.scheme;
+
+import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLDataFetcherSchema;
+import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLDataSchema;
+import com.tvd12.test.assertion.Asserts;
+import com.tvd12.test.util.RandomUtil;
+import org.testng.annotations.Test;
+
+import java.util.Collections;
+import java.util.List;
+
+public class GraphQLDataFetcherSchemaTest {
+
+ @Test
+ public void test() {
+ // given
+ List queryScheme = Collections.singletonList(
+ GraphQLDataSchema.builder()
+ .name(RandomUtil.randomShortAlphabetString())
+ .type(RandomUtil.randomShortAlphabetString())
+ .build()
+ );
+
+ GraphQLDataSchema getResponseScheme = GraphQLDataSchema.builder()
+ .name(RandomUtil.randomShortAlphabetString())
+ .type(RandomUtil.randomShortAlphabetString())
+ .build();
+
+ // when
+ GraphQLDataFetcherSchema instance = GraphQLDataFetcherSchema.builder()
+ .queryScheme(queryScheme)
+ .getResponseScheme(getResponseScheme)
+ .build();
+
+ // then
+ Asserts.assertEquals(instance.getQueryScheme(), queryScheme);
+ Asserts.assertEquals(instance.getGetResponseScheme(), getResponseScheme);
+
+ System.out.println(instance);
+ }
+}
diff --git a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLSchemaTest.java b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLSchemaTest.java
index c3848f44..e32bf0b6 100644
--- a/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLSchemaTest.java
+++ b/ezyhttp-server-graphql/src/test/java/com/tvd12/ezyhttp/server/graphql/test/scheme/GraphQLSchemaTest.java
@@ -1,5 +1,6 @@
package com.tvd12.ezyhttp.server.graphql.test.scheme;
+import com.tvd12.ezyhttp.server.graphql.query.GraphQLQueryDefinition;
import com.tvd12.ezyhttp.server.graphql.scheme.GraphQLSchema;
import com.tvd12.test.assertion.Asserts;
import org.testng.annotations.Test;
@@ -19,4 +20,43 @@ public void test() {
// then
Asserts.assertEquals(schema.getQueryDefinitions(), Collections.emptyList());
}
+
+ @Test
+ public void addQueryDefinitionTest() {
+ // given
+ GraphQLQueryDefinition queryDefinition = GraphQLQueryDefinition.builder()
+ .name("getUser")
+ .build();
+
+ // when
+ GraphQLSchema schema = GraphQLSchema.builder()
+ .addQueryDefinition(queryDefinition)
+ .build();
+
+ // then
+ Asserts.assertEquals(schema.getQueryDefinitions().size(), 1);
+ Asserts.assertEquals(schema.getQueryDefinitions().get(0).getName(), "getUser");
+ }
+
+ @Test
+ public void addMultipleQueryDefinitionsTest() {
+ // given
+ GraphQLQueryDefinition queryDefinition1 = GraphQLQueryDefinition.builder()
+ .name("getUser")
+ .build();
+ GraphQLQueryDefinition queryDefinition2 = GraphQLQueryDefinition.builder()
+ .name("getProduct")
+ .build();
+
+ // when
+ GraphQLSchema schema = GraphQLSchema.builder()
+ .addQueryDefinition(queryDefinition1)
+ .addQueryDefinition(queryDefinition2)
+ .build();
+
+ // then
+ Asserts.assertEquals(schema.getQueryDefinitions().size(), 2);
+ Asserts.assertEquals(schema.getQueryDefinitions().get(0).getName(), "getUser");
+ Asserts.assertEquals(schema.getQueryDefinitions().get(1).getName(), "getProduct");
+ }
}
diff --git a/ezyhttp-server-jetty/pom.xml b/ezyhttp-server-jetty/pom.xml
index 2991b165..98be4033 100644
--- a/ezyhttp-server-jetty/pom.xml
+++ b/ezyhttp-server-jetty/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-jetty
diff --git a/ezyhttp-server-management/pom.xml b/ezyhttp-server-management/pom.xml
index 2ccdecef..1ea72835 100644
--- a/ezyhttp-server-management/pom.xml
+++ b/ezyhttp-server-management/pom.xml
@@ -6,7 +6,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-management
ezyhttp-server-management
diff --git a/ezyhttp-server-thymeleaf/pom.xml b/ezyhttp-server-thymeleaf/pom.xml
index 222cfea7..9c5ea43c 100644
--- a/ezyhttp-server-thymeleaf/pom.xml
+++ b/ezyhttp-server-thymeleaf/pom.xml
@@ -6,7 +6,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-thymeleaf
ezyhttp-server-thymeleaf
diff --git a/ezyhttp-server-tomcat/pom.xml b/ezyhttp-server-tomcat/pom.xml
index 542a1fa1..a6199bbf 100644
--- a/ezyhttp-server-tomcat/pom.xml
+++ b/ezyhttp-server-tomcat/pom.xml
@@ -5,7 +5,7 @@
com.tvd12
ezyhttp
- 1.5.2
+ 1.5.3
ezyhttp-server-tomcat
diff --git a/pom.xml b/pom.xml
index 8489de7c..84c94995 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
1.0.7
ezyhttp
- 1.5.2
+ 1.5.3
pom
ezyhttp