public HttpReq verb(String verb) { return verb(HttpVerb.from(verb.toUpperCase())); }
@Override public Route find(HttpVerb verb, String path) { return Do.findIn(all()) .first(route -> route.verb().equals(verb) && route.path().equals(path)) .orElse(null); }
@Override public int hashCode() { int result = verb.hashCode(); result = 31 * result + path.hashCode(); return result; }
@SuppressWarnings("unchecked") public Map<String, Object> getAPIDocs() { Map<String, Object> docs = createRoot(); Map<String, Object> paths = (Map<String, Object>) docs.computeIfAbsent("paths", x -> U.map()); Map<String, Object> components = (Map<String, Object>) docs.computeIfAbsent("components", x -> U.map()); Map<String, Object> schemas = (Map<String, Object>) components.computeIfAbsent("schemas", x -> U.map()); schemas.computeIfAbsent("Error", x -> OpenAPIModel.defaultErrorSchema()); Do.group(findPublishableRoutes()).by(Route::path).forEach((path, routes) -> { paths.put(path, Do.map(routes).toMap( route -> route.verb().name().toLowerCase(), route -> descRoute(route, components) )); }); return docs; }
public static HttpVerb from(String verb) { try { return valueOf(verb.toUpperCase()); } catch (IllegalArgumentException e) { throw U.rte("Unsupported HTTP verb: " + verb); } }
@Override public int compare(Route a, Route b) { int cmpByPath = a.path().compareTo(b.path()); return cmpByPath != 0 ? cmpByPath : a.verb().compareTo(b.verb()); }
@Override protected OnRoute addRoute(HttpVerb verb, String uri) { verb = U.or(verb, HttpVerb.GET); return On.route(verb.name(), uri); }
HttpVerb verb = HttpVerb.from(vrb);
private static boolean sameTarget(Route a, Route b) { return !a.verb().equals(b.verb()) && a.path().equals(b.path()) && a.handler() == b.handler() && a.config().equals(b.config()); }
@Override protected OnRoute addRoute(HttpVerb verb, String uri) { if (verb == null) { return On.page(uri); } else { U.must(verb == HttpVerb.GET || verb == HttpVerb.POST, "Only GET and POST verbs are supported for pages!"); return On.route(verb.name(), uri); } }
@Override public int hashCode() { int result = verb.hashCode(); result = 31 * result + path.hashCode(); return result; }
public static <T> Future<T> call(String verb, String uri, Class<T> resultType, Callback<T> callback) { switch (HttpVerb.from(verb)) { case GET: return get(uri, resultType, callback); case POST: return post(uri, resultType, callback); case PUT: return put(uri, resultType, callback); case DELETE: return delete(uri, resultType, callback); case PATCH: return patch(uri, resultType, callback); case OPTIONS: return options(uri, resultType, callback); case HEAD: return head(uri, resultType, callback); case TRACE: return trace(uri, resultType, callback); default: throw Err.notExpected(); } }
@Override public Route find(HttpVerb verb, String path) { for (Route route : all()) { if (route.verb().equals(verb) && route.path().equals(path)) { return route; } } return null; }
public static <T> T call(String verb, String uri, Class<T> resultType) { switch (HttpVerb.from(verb)) { case GET: return get(uri, resultType); case POST: return post(uri, resultType); case PUT: return put(uri, resultType); case DELETE: return delete(uri, resultType); case PATCH: return patch(uri, resultType); case OPTIONS: return options(uri, resultType); case HEAD: return head(uri, resultType); case TRACE: return trace(uri, resultType); default: throw Err.notExpected(); } }
private static boolean sameTarget(Route a, Route b) { return !a.verb().equals(b.verb()) && a.path().equals(b.path()) && a.handler() == b.handler() && a.config().equals(b.config()); }
@Override protected void applyEntry(String key, T config) { String[] verbUri = key.split("\\s+"); final HttpVerb verb; String uri; if (verbUri.length == 1) { verb = null; uri = verbUri[0]; } else if (verbUri.length == 2) { verb = HttpVerb.from(verbUri[0]); uri = verbUri[1]; } else { throw U.rte("Invalid route!"); } addRoute(config, verb, uri); }
HttpVerb verb = HttpVerb.from(vrb);