public ResourceHandler(String urlPath) { String normalizedPath = getNormalizedPath(urlPath); if (normalizedPath.length() > 0) { this.uriPattern = String.format("/%s/{%s: .+}", getNormalizedPath(urlPath), PATH_PARAMETER); } else { this.uriPattern = String.format("/{%s: .+}", PATH_PARAMETER); } }
@Override public final void handle(RouteContext routeContext) { String resourcePath = getResourcePath(routeContext); log.trace("Request resource '{}'", resourcePath); if (versioned) { resourcePath = removeVersion(resourcePath); } handleResource(resourcePath, routeContext); routeContext.next(); }
@Override protected String getPathParameterValue(String uriPattern, String parameterName, Object parameterValue) { String value = super.getPathParameterValue(uriPattern, parameterName, parameterValue); // retrieve the compiled route for uriPattern Route compiledRoute = compiledRoutes.stream() .filter(route -> uriPattern.equals(route.getUriPattern())) .findAny() .orElseThrow(() -> new PippoRuntimeException("Cannot find a compiled route for '{}'", uriPattern)); RouteHandler handler = compiledRoute.getRouteHandler(); boolean isResourceRoute = ResourceHandler.class.isAssignableFrom(handler.getClass()); // inject version for resource routes if (isResourceRoute && ResourceHandler.PATH_PARAMETER.equals(parameterName)) { ResourceHandler resourceHandler = (ResourceHandler) compiledRoute.getRouteHandler(); if (resourceHandler.isVersioned()) { value = resourceHandler.injectVersion(value); } } return value; }
default Route addResourceRoute(ResourceHandler resourceHandler) { Route route = Route.GET(resourceHandler.getUriPattern(), resourceHandler); addRoute(route); return route; }
protected String getResourcePath(RouteContext routeContext) { return getNormalizedPath(routeContext.getParameter(PATH_PARAMETER).toString()); }