/** * checks, if this {@link URLPath} ends with a slash * * @return {@code true} if it contains a trailing slash, otherwise * {@code false} */ public boolean hasTrailingSlash() { if (isEmpty()) { return false; } return getSegment(size() - 1).isEmpty(); }
@Override public String getEnforcementPointId() { URLPath path = getPath(); return path.isEmpty() ? "" : urlPath.getSegment(0); }
/** * Appends the given url path to this path. */ public URLPath append(URLPath toAppend) { if (toAppend == null || toAppend.isEmpty()) { return this; } if (this.isEmpty()) { return toAppend; } if (this.isRoot() && toAppend.isRoot()) { return ROOT; } ArrayList newParts = new ArrayList(removeTrailingSlash().segments); newParts.addAll(toAppend.segments); return new URLPath(newParts); }
/** * gives an {@link URLPath}, which contains all elements in the given range. * * @param start index (including) * @param end index (excluding) * @return the {@link URLPath} with the sub elements */ public URLPath getSubPath(int start, int end) { List<String> parts = getSegments(); List<String> newSegments = parts.subList(start, end); URLPath newPath = new URLPath(newSegments); if (newPath.isEmpty()) { return EMPTY; } if (newPath.isRoot()) { return ROOT; } return newPath; }
public static String buildSubUrl(String url, String... subpaths) { URLPath urlPath = URLPath.fromString(subpaths); if (urlPath.isEmpty()) { return url; } String query = URLUtils.getQueryStringFromUrl(url); url = URLUtils.removeQueryStringFromUrl(url); if (!(url == null || url.isEmpty()) && !(url.endsWith("/"))) { url += "/"; } url += urlPath.asString(); url = URLUtils.appendQueryToUrl(url, query); return url; }
@Override public String getEffectivePathInfo() { int start = 1; if (!isAuthenticationSchemeInServletPath()) { start = 2; } URLPath path = getPath().getSubPath(start); if (path.isEmpty()) { return ""; } return "/" + path.removeTrailingSlash().asString(); }