package com.github.scribejava.core.model; import java.io.IOException; import java.io.InputStream; import java.util.Map; import com.github.scribejava.core.utils.StreamUtils; public class Response { private final int code; private final String message; private final Map<String, String> headers; private String body; private InputStream stream; private Response(int code, String message, Map<String, String> headers) { this.code = code; this.message = message; this.headers = headers; } public Response(int code, String message, Map<String, String> headers, InputStream stream) { this(code, message, headers); this.stream = stream; } public Response(int code, String message, Map<String, String> headers, String body) { this(code, message, headers); this.body = body; } private String parseBodyContents() throws IOException { if (stream == null) { return null; } if ("gzip".equals(getHeader("Content-Encoding"))) { body = StreamUtils.getGzipStreamContents(stream); } else { body = StreamUtils.getStreamContents(stream); } return body; } public final boolean isSuccessful() { return code >= 200 && code < 400; } public String getBody() throws IOException { return body == null ? parseBodyContents() : body; } /** * Obtains the meaningful stream of the HttpUrlConnection, either inputStream or errorInputStream, depending on the * status code * * @return input stream / error stream */ public InputStream getStream() { return stream; } /** * Obtains the HTTP status code * * @return the status code */ public final int getCode() { return code; } /** * Obtains the HTTP status message. Returns <code>null</code> if the message can not be discerned from the response * (not valid HTTP) * * @return the status message */ public String getMessage() { return message; } /** * Obtains a {@link Map} containing the HTTP Response Headers * * @return headers */ public Map<String, String> getHeaders() { return headers; } /** * Obtains a single HTTP Header value, or null if undefined * * @param name the header name. * * @return header value or null. */ public String getHeader(String name) { return headers.get(name); } @Override public String toString() { return "Response{" + "code=" + code + ", message='" + message + '\'' + ", body='" + body + '\'' + ", headers=" + headers + '}'; } }