package foundation.route;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Set;
|
|
|
public class URIRouteMap {
|
|
private Map<String, FilterNode<Route>> nodes;
|
private Map<String, Route> routeMap;
|
|
|
public URIRouteMap() {
|
nodes = new HashMap<String, FilterNode<Route>>();
|
routeMap = new HashMap<String, Route>();
|
}
|
|
public void clear() {
|
nodes.clear();
|
}
|
|
public Route get(String[] segments) {
|
int idx = segments.length - 1;
|
|
if (idx < 0) {
|
return null;
|
}
|
|
FilterNode<Route> node = nodes.get(segments[idx]);
|
|
if (node == null) {
|
return null;
|
}
|
|
return node.match(segments, idx - 1);
|
}
|
|
public Route get(String key) {
|
return routeMap.get(key);
|
}
|
|
public void add(String uri, Route route) {
|
if (uri == null) {
|
return;
|
}
|
|
//1. add to map
|
routeMap.put(uri, route);
|
|
//2. add add to nodes
|
String[] segments = uri.split("/");
|
|
int idx = segments.length - 1;
|
String segment = segments[idx];
|
|
FilterNode<Route> node = nodes.get(segment);
|
|
if (node == null) {
|
node = new FilterNode<Route>(segment, route);
|
|
nodes.put(segment, node);
|
}
|
|
node.add(segments, idx - 1, route);
|
}
|
|
public Set<String> keySet() {
|
return routeMap.keySet();
|
}
|
}
|