/** * given a canonical uri (/db/coll) returns the mapped uri (/db/coll) relative to this context * URLs are mapped to mongodb resources by using the mongo-mounts configuration properties * * @param unmappedUri * @return */ public final String mapUri(String unmappedUri) { String ret = URLUtils.removeTrailingSlashes(unmappedUri); if (whatUri.equals("*")) { if (!this.whereUri.equals(SLASH)) { return this.whereUri + unmappedUri; } } else { ret = URLUtils.removeTrailingSlashes(ret.replaceFirst("^" + this.whatUri, this.whereUri)); } if (ret.isEmpty()) { ret = SLASH; } return ret; }
/** * @param exchange the url rewriting feature is implemented by the whatUri and whereUri parameters * <p>the exchange request path is rewritten replacing the whereUri string with the whatUri * string the special whatUri value * means any resource: the whereUri is replaced with / * <p>example 1 * <p>whatUri = /mydb/mycollection whereUri = / * <p>then the requestPath / is rewritten to /mydb/mycollection * <p>example 2 * <p>whatUri = * whereUri = /data * <p>then the requestPath /data is rewritten to / * @param whereUri the uri to map to * @param whatUri the uri to map */ public RequestContext(HttpServerExchange exchange, String whereUri, String whatUri) { this.whereUri = URLUtils.removeTrailingSlashes( whereUri == null ? null : whereUri.startsWith("/") ? whereUri : "/" + whereUri); this.whatUri = URLUtils.removeTrailingSlashes( whatUri == null ? null : whatUri.startsWith("/") || "*".equals(whatUri) ? whatUri : "/" + whatUri); this.unmappedRequestUri = exchange.getRequestPath(); this.mappedRequestUri = unmapUri(exchange.getRequestPath()); // "/db/collection/document" --> { "", "mappedDbName", "collection", "document" } this.pathTokens = this.mappedRequestUri.split(SLASH); this.type = selectRequestType(pathTokens); this.method = selectRequestMethod(exchange.getRequestMethod()); }