Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ezyhttp-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.tvd12</groupId>
<artifactId>ezyhttp</artifactId>
<version>1.5.2</version>
<version>1.5.3</version>
</parent>

<artifactId>ezyhttp-client</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion ezyhttp-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.tvd12</groupId>
<artifactId>ezyhttp</artifactId>
<version>1.5.2</version>
<version>1.5.3</version>
</parent>

<artifactId>ezyhttp-core</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion ezyhttp-server-boot/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.tvd12</groupId>
<artifactId>ezyhttp</artifactId>
<version>1.5.2</version>
<version>1.5.3</version>
</parent>

<artifactId>ezyhttp-server-boot</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion ezyhttp-server-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.tvd12</groupId>
<artifactId>ezyhttp</artifactId>
<version>1.5.2</version>
<version>1.5.3</version>
</parent>

<artifactId>ezyhttp-server-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -118,7 +119,15 @@ public void addHandlers(Map<RequestURI, List<RequestHandler>> handlers) {
}

public Map<RequestURI, List<RequestHandler>> getHandlerListByURI() {
return Collections.unmodifiableMap(handlerListByURI);
return handlerListByURI
.entrySet()
.stream()
.collect(
Collectors.toMap(
Map.Entry::getKey,
it -> Collections.unmodifiableList(it.getValue())
)
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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 {
Expand All @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion ezyhttp-server-graphql/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.tvd12</groupId>
<artifactId>ezyhttp</artifactId>
<version>1.5.2</version>
<version>1.5.3</version>
</parent>
<artifactId>ezyhttp-server-graphql</artifactId>
<name>ezyhttp-server-graphql</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -32,11 +30,7 @@ default String getQueryGroupName() {
return getQLQueryGroupName(getClass());
}

default List<GraphQLDataSchema> getQueryScheme() {
return null;
}

default GraphQLDataSchema getResponseScheme() {
default GraphQLDataFetcherSchema getSchema() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -17,6 +25,7 @@ public class GraphQLDataFetcherManager {
private final Set<String> paymentQueryNames;
private final Map<String, String> groupNameByQueryName;
private final Map<String, Set<String>> queryNamesByGroupName;
private final GraphQLDataFetcherProvider dataFetcherProvider;

protected GraphQLDataFetcherManager(Builder builder) {
this.dataFetchers = builder.dataFetchers;
Expand All @@ -25,14 +34,45 @@ 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) {
return groupNameByQueryName.get(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<String, List<String>> getQueryNameByGroupName() {
Expand Down Expand Up @@ -74,17 +114,18 @@ public static Builder builder() {

public static class Builder implements EzyBuilder<GraphQLDataFetcherManager> {
private final Map<String, GraphQLDataFetcher> dataFetchers =
new HashMap<>();
new ConcurrentHashMap<>();
private final Set<String> authenticatedQueryNames =
new HashSet<>();
ConcurrentHashMap.newKeySet();
private final Set<String> managementQueryNames =
new HashSet<>();
ConcurrentHashMap.newKeySet();
private final Set<String> paymentQueryNames =
new HashSet<>();
ConcurrentHashMap.newKeySet();
private final Map<String, String> groupNameByQueryName =
new HashMap<>();
new ConcurrentHashMap<>();
private final Map<String, Set<String>> queryNamesByGroupName =
new HashMap<>();
new ConcurrentHashMap<>();
private GraphQLDataFetcherProvider dataFetcherProvider;

public Builder addDataFetcher(GraphQLDataFetcher fetcher) {
return addDataFetcher(fetcher.getQueryName(), fetcher);
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.tvd12.ezyhttp.server.graphql.fetcher;

public interface GraphQLDataFetcherProvider {

GraphQLDataFetcher provide(String queryName);
}
Original file line number Diff line number Diff line change
@@ -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<GraphQLDataSchema> 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<GraphQLDataFetcherSchema> {
protected List<GraphQLDataSchema> queryScheme;
protected GraphQLDataSchema getResponseScheme;

public Builder queryScheme(List<GraphQLDataSchema> queryScheme) {
this.queryScheme = queryScheme;
return this;
}

public Builder getResponseScheme(GraphQLDataSchema getResponseScheme) {
this.getResponseScheme = getResponseScheme;
return this;
}

@Override
public GraphQLDataFetcherSchema build() {
return new GraphQLDataFetcherSchema(this);
}
}
}
Loading
Loading