public Router getRouter() { if (router == null) { router = new DefaultRouter(); } return router; }
@Override public String uriFor(String nameOrUriPattern, Map<String, Object> parameters) { // force compile routes compileRoutes(); Route compiledRoute = getCompiledRoute(nameOrUriPattern); if (compiledRoute == null) { return null; } return prefixApplicationPath(uriMatcher.uriFor(compiledRoute.getUriPattern(), parameters)); }
public List<Route> getRoutes(String requestMethod) { List<Route> allRoutes = new ArrayList<>(); // add routes that are not compiled yet if (routesCache.containsKey(requestMethod)) { allRoutes.addAll(routesCache.get(requestMethod)); } // add compiled routes allRoutes.addAll(getCompiledRoutes(requestMethod)); return Collections.unmodifiableList(allRoutes); }
Route compiledRoute = compileRoute(route); for (RouteTransformer transformer : transformers) { compiledRoute = transformer.transform(compiledRoute); addCompiledRoute(compiledRoute);
uriPattern = concatUriPattern(parent.getUriPattern(), uriPattern); route.setAbsoluteUriPattern(concatUriPattern(uriPattern, route.getUriPattern())); addRoute(route); });
@Override public String uriPatternFor(Class<? extends ResourceHandler> resourceHandlerClass) { Route route = getRoute(resourceHandlerClass); return (route != null) ? route.getUriPattern() : null; }
private Route getRoute(Class<? extends ResourceHandler> resourceHandlerClass) { List<Route> routes = getRoutes(); for (Route route : routes) { RouteHandler routeHandler = route.getRouteHandler(); if (resourceHandlerClass.isAssignableFrom(routeHandler.getClass())) { ClasspathResourceHandler resourceHandler = (ClasspathResourceHandler) routeHandler; if (resourceHandlerClass == resourceHandler.getClass()) { return route; } } } return null; }
@Override public List<RouteMatch> findRoutes(String requestMethod, String requestUri) { log.trace("Finding route matches for {} '{}'", requestMethod, requestUri); // force compile routes compileRoutes(); List<RouteMatch> routeMatches = new ArrayList<>(); for (Route route : compiledRoutes) { boolean methodMatches = route.getRequestMethod().equals(requestMethod) || route.getRequestMethod().equals(HttpConstants.Method.ANY); if (methodMatches) { String uriPattern = route.getUriPattern(); Map<String, String> parameters = uriMatcher.match(requestUri, uriPattern); if (parameters != null) { // complete matching => add route match ro returned list routeMatches.add(new RouteMatch(route, parameters)); } } } log.debug("Found {} route matches for {} '{}'", routeMatches.size(), requestMethod, requestUri); return routeMatches; }
private void removeCompiledRoute(Route route) { String nameOrUriPattern = StringUtils.isNullOrEmpty(route.getName()) ? route.getUriPattern() : route.getName(); Route compiledRoute = getCompiledRoute(nameOrUriPattern); if (compiledRoute == null) { // do nothing; probably the route was not yet compiled return; } compiledRoutes.remove(compiledRoute); // update cache List<Route> cacheEntry = compiledRoutesCache.get(route.getRequestMethod()); if (cacheEntry != null) { cacheEntry.remove(compiledRoute); } uriMatcher.removeUriPattern(compiledRoute.getUriPattern()); }