/** * Extract a sub-path from the given offset into the elements list. * @param index the start element index (inclusive) * @return the sub-path */ default PathContainer subPath(int index) { return subPath(index, elements().size()); }
private static PathContainer extractPathWithinApplication(PathContainer fullPath, PathContainer contextPath) { return fullPath.subPath(contextPath.elements().size()); }
/** * Extract a sub-path from the given offset into the elements list. * @param index the start element index (inclusive) * @return the sub-path */ default PathContainer subPath(int index) { return subPath(index, elements().size()); }
private static PathContainer extractPathWithinApplication(PathContainer fullPath, PathContainer contextPath) { return fullPath.subPath(contextPath.elements().size()); }
private Mono<String> resolveResourceUrl(ServerWebExchange exchange, PathContainer lookupPath) { return this.handlerMap.entrySet().stream() .filter(entry -> entry.getKey().matches(lookupPath)) .min((entry1, entry2) -> PathPattern.SPECIFICITY_COMPARATOR.compare(entry1.getKey(), entry2.getKey())) .map(entry -> { PathContainer path = entry.getKey().extractPathWithinPattern(lookupPath); int endIndex = lookupPath.elements().size() - path.elements().size(); PathContainer mapping = lookupPath.subPath(0, endIndex); ResourceWebHandler handler = entry.getValue(); List<ResourceResolver> resolvers = handler.getResourceResolvers(); ResourceResolverChain chain = new DefaultResourceResolverChain(resolvers); return chain.resolveUrlPath(path.value(), handler.getLocations()) .map(resolvedPath -> mapping.value() + resolvedPath); }) .orElseGet(() ->{ if (logger.isTraceEnabled()) { logger.trace(exchange.getLogPrefix() + "No match for \"" + lookupPath + "\""); } return Mono.empty(); }); }
private static PathContainer initContextPath(PathContainer path, @Nullable String contextPath) { if (!StringUtils.hasText(contextPath) || "/".equals(contextPath)) { return PathContainer.parsePath(""); } validateContextPath(path.value(), contextPath); int length = contextPath.length(); int counter = 0; for (int i=0; i < path.elements().size(); i++) { PathContainer.Element element = path.elements().get(i); counter += element.value().length(); if (length == counter) { return path.subPath(0, i + 1); } } // Should not happen.. throw new IllegalStateException("Failed to initialize contextPath '" + contextPath + "'" + " for requestPath '" + path.value() + "'"); }
resultPath = path.subPath(startIndex, endIndex);
private static PathContainer initContextPath(PathContainer path, @Nullable String contextPath) { if (!StringUtils.hasText(contextPath) || "/".equals(contextPath)) { return PathContainer.parsePath(""); } validateContextPath(path.value(), contextPath); int length = contextPath.length(); int counter = 0; for (int i=0; i < path.elements().size(); i++) { PathContainer.Element element = path.elements().get(i); counter += element.value().length(); if (length == counter) { return path.subPath(0, i + 1); } } // Should not happen.. throw new IllegalStateException("Failed to initialize contextPath '" + contextPath + "'" + " for requestPath '" + path.value() + "'"); }
@Test public void subPath() throws Exception { // basic PathContainer path = PathContainer.parsePath("/a/b/c"); assertSame(path, path.subPath(0)); assertEquals("/b/c", path.subPath(2).value()); assertEquals("/c", path.subPath(4).value()); // root path path = PathContainer.parsePath("/"); assertEquals("/", path.subPath(0).value()); // trailing slash path = PathContainer.parsePath("/a/b/"); assertEquals("/b/", path.subPath(2).value()); }
resultPath = path.subPath(startIndex, endIndex);
info = new PathRemainingMatchInfo(pathContainer.subPath(matchingContext.remainingPathIndex), matchingContext.getPathMatchResult());
info = new PathRemainingMatchInfo(pathContainer.subPath(matchingContext.remainingPathIndex), matchingContext.getPathMatchResult());
/** * Extract a sub-path from the given offset into the elements list. * @param index the start element index (inclusive) * @return the sub-path */ default PathContainer subPath(int index) { return subPath(index, elements().size()); }
/** * Extract a sub-path from the given offset into the elements list. * @param index the start element index (inclusive) * @return the sub-path */ default PathContainer subPath(int index) { return subPath(index, elements().size()); }
private static PathContainer extractPathWithinApplication(PathContainer fullPath, PathContainer contextPath) { return fullPath.subPath(contextPath.elements().size()); }
private static PathContainer extractPathWithinApplication(PathContainer fullPath, PathContainer contextPath) { return fullPath.subPath(contextPath.elements().size()); }
private static PathContainer initContextPath(PathContainer path, @Nullable String contextPath) { if (!StringUtils.hasText(contextPath) || "/".equals(contextPath)) { return PathContainer.parsePath(""); } validateContextPath(path.value(), contextPath); int length = contextPath.length(); int counter = 0; for (int i=0; i < path.elements().size(); i++) { PathContainer.Element element = path.elements().get(i); counter += element.value().length(); if (length == counter) { return path.subPath(0, i + 1); } } // Should not happen.. throw new IllegalStateException("Failed to initialize contextPath '" + contextPath + "'" + " for requestPath '" + path.value() + "'"); }
private static PathContainer initContextPath(PathContainer path, @Nullable String contextPath) { if (!StringUtils.hasText(contextPath) || "/".equals(contextPath)) { return PathContainer.parsePath(""); } validateContextPath(path.value(), contextPath); int length = contextPath.length(); int counter = 0; for (int i=0; i < path.elements().size(); i++) { PathContainer.Element element = path.elements().get(i); counter += element.value().length(); if (length == counter) { return path.subPath(0, i + 1); } } // Should not happen.. throw new IllegalStateException("Failed to initialize contextPath '" + contextPath + "'" + " for requestPath '" + path.value() + "'"); }
resultPath = path.subPath(startIndex, endIndex);
info = new PathRemainingMatchInfo(pathContainer.subPath(matchingContext.remainingPathIndex), matchingContext.getPathMatchResult());