1package dev.rafex.ether.http.jetty12.exchange;
29import java.util.Collections;
33import java.util.TreeSet;
35import org.eclipse.jetty.server.Request;
36import org.eclipse.jetty.server.Response;
37import org.eclipse.jetty.util.Callback;
39import dev.rafex.ether.http.core.HttpExchange;
40import dev.rafex.ether.http.jetty12.response.JettyApiResponses;
41import dev.rafex.ether.json.JsonCodec;
45 private final Request request;
46 private final Response response;
47 private final Callback callback;
48 private final Map<String, String> pathParams;
49 private final Map<String, List<String>> queryParams;
50 private final Set<String> allowedMethods;
53 public JettyHttpExchange(
final Request request,
final Response response,
final Callback callback,
54 final Map<String, String> pathParams,
final Map<String, List<String>> queryParams,
55 final Set<String> allowedMethods,
final JsonCodec jsonCodec) {
56 this.request = request;
57 this.response = response;
58 this.callback = callback;
59 this.pathParams = pathParams;
60 this.queryParams = queryParams;
61 this.allowedMethods = normalizeMethods(allowedMethods);
79 return request.getMethod();
84 return request.getHttpURI().getPath();
89 return pathParams.get(name);
94 final var values = queryParams.get(name);
95 if (values ==
null || values.isEmpty()) {
103 return queryParams.getOrDefault(name, List.of());
108 return Collections.unmodifiableMap(pathParams);
113 return Collections.unmodifiableMap(queryParams);
118 return Collections.unmodifiableSet(allowedMethods);
122 public void json(
final int status,
final Object body) {
123 apiResponses.json(response, callback, status, body);
127 public void text(
final int status,
final String body) {
128 apiResponses.text(response, callback, status, body);
133 apiResponses.noContent(response, callback, status);
138 response.getHeaders().put(
"Allow", String.join(
", ", allowedMethods));
144 response.getHeaders().put(
"Allow", String.join(
", ", allowedMethods));
148 private static Set<String> normalizeMethods(
final Set<String> methods) {
149 final var out =
new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
150 if (methods !=
null) {
151 for (
final var
method : methods) {
153 out.add(
method.trim().toUpperCase());
void noContent(final int status)
Set< String > allowedMethods()
void text(final int status, final String body)
Map< String, List< String > > queryParams()
Map< String, String > pathParams()
List< String > queryAll(final String name)
String queryFirst(final String name)
void json(final int status, final Object body)
JettyHttpExchange(final Request request, final Response response, final Callback callback, final Map< String, String > pathParams, final Map< String, List< String > > queryParams, final Set< String > allowedMethods, final JsonCodec jsonCodec)
String pathParam(final String name)
default void methodNotAllowed()