package com.xebialabs.restito.semantics; import java.io.IOException; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import org.glassfish.grizzly.http.Method; import org.glassfish.grizzly.http.server.Request; /** * <p>Call that happened to server. Handy wrapper for Request values.</p> */ public class Call { private Method method; private String uri; private String contentType; private String postBody; private String url; private String authorization; private Map<String, String> headers = new HashMap<>(); private Map<String, String[]> parameters = new HashMap<>(); private Request request; private Call() { } /** * Factory method */ public static Call fromRequest(final Request request) { Call call = new Call(); call.request = request; call.method = request.getMethod(); call.authorization = request.getAuthorization(); call.uri = request.getRequestURI(); call.contentType = request.getContentType(); call.url = request.getRequestURL().toString(); for (String s : request.getHeaderNames()) { call.headers.put(s, request.getHeader(s)); } call.parameters = new HashMap<>(request.getParameterMap()); try { call.postBody = request.getPostBody(999999).toStringContent(Charset.defaultCharset()); } catch (IOException e) { throw new RuntimeException("Problem reading Post Body of HTTP call"); } return call; } /** * URI of the call */ public String getUri() { return uri; } /** * Content type of the call */ public String getContentType() { return contentType; } public String getUrl() { return url; } /** * Map of headers */ public Map<String, String> getHeaders() { return headers; } /** * Http method */ public Method getMethod() { return method; } /** * Map of parameters. All parameters considered as if they were multi-valued. */ public Map<String, String[]> getParameters() { return parameters; } /** * In case of POST request - returns post body */ public String getPostBody() { return postBody; } /** * Returns an authorization header, or null if doesn't exist */ public String getAuthorization() { return authorization; } /** * Returns raw HTTP request */ public Request getRequest() { return request; } }