package foundation.route; import java.util.HashMap; import java.util.Map; import java.util.Set; public class URIRouteMap { private Map> nodes; private Map routeMap; public URIRouteMap() { nodes = new HashMap>(); routeMap = new HashMap(); } public void clear() { nodes.clear(); } public Route get(String[] segments) { int idx = segments.length - 1; if (idx < 0) { return null; } FilterNode 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 node = nodes.get(segment); if (node == null) { node = new FilterNode(segment, route); nodes.put(segment, node); } node.add(segments, idx - 1, route); } public Set keySet() { return routeMap.keySet(); } }