package com.firefly.server.http2.router;
import com.firefly.server.http2.router.handler.body.HTTPBodyConfiguration;
import com.firefly.server.http2.router.handler.body.HTTPBodyHandler;
import com.firefly.server.http2.router.handler.error.DefaultErrorResponseHandlerLoader;
import com.firefly.server.http2.router.impl.RouterManagerImpl;
import java.util.Map;
import java.util.NavigableSet;
import java.util.Objects;
import java.util.Set;
/**
* @author Pengtao Qiu
*/
public interface RouterManager extends RequestAcceptor {
class RouterMatchResult implements Comparable<RouterMatchResult> {
private final Router router;
private final Map<String, String> parameters;
private final Set<Matcher.MatchType> matchTypes;
public RouterMatchResult(Router router, Map<String, String> parameters, Set<Matcher.MatchType> matchTypes) {
this.router = router;
this.parameters = parameters;
this.matchTypes = matchTypes;
}
public Router getRouter() {
return router;
}
public Map<String, String> getParameters() {
return parameters;
}
public Set<Matcher.MatchType> getMatchTypes() {
return matchTypes;
}
@Override
public int compareTo(RouterMatchResult o) {
return router.compareTo(o.getRouter());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RouterMatchResult that = (RouterMatchResult) o;
return Objects.equals(router, that.router);
}
@Override
public int hashCode() {
return Objects.hash(router);
}
}
Router register();
NavigableSet<RouterMatchResult> findRouter(String method, String path, String contentType, String accept);
static RouterManager create() {
return create(new HTTPBodyConfiguration());
}
static RouterManager create(HTTPBodyConfiguration configuration) {
RouterManagerImpl routerManager = new RouterManagerImpl();
routerManager.register().path("*").handler(new HTTPBodyHandler(configuration));
routerManager.registerLast().path("*").handler(DefaultErrorResponseHandlerLoader.getInstance().getHandler());
return routerManager;
}
}