/sitebricks-client/src/main/java/com/google/sitebricks/client/WebResponseImpl.java
http://github.com/dhanji/sitebricks · Java · 93 lines · 68 code · 14 blank · 11 comment · 6 complexity · d223d82995b52843813c37f93f412d7a MD5 · raw file
- package com.google.sitebricks.client;
- import com.google.inject.Injector;
- import com.google.inject.TypeLiteral;
- import com.ning.http.client.Response;
- import net.jcip.annotations.NotThreadSafe;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Logger;
- /**
- * @author Dhanji R. Prasanna (dhanji@gmail.com)
- * @author Jeanfrancois Arcand (jfarcand@apache.org)
- */
- @NotThreadSafe
- class WebResponseImpl implements WebResponse {
- private final Injector injector;
- private final Response response;
- // memo field
- private Map<String, String> headers;
- public WebResponseImpl(Injector injector, Response response) {
- this.injector = injector;
- this.response = response;
- }
- public Map<String, String> getHeaders() {
- if (null != this.headers)
- return this.headers;
- // translate from ahc http client headers
- final Map<String, String> headers = new HashMap<String, String>();
- for (Map.Entry<String, List<String>> header : response.getHeaders().entrySet()) {
- for (String value : header.getValue()) {
- headers.put(header.getKey(), value);
- }
- }
- return this.headers = headers;
- }
- public <T> ResponseTransportBuilder<T> to(final Class<T> data) {
- TypeLiteral<T> typeLiteral = TypeLiteral.get(data);
- return to(typeLiteral);
- }
- @Override
- public <T> ResponseTransportBuilder<T> to(final TypeLiteral<T> data) {
- return new ResponseTransportBuilder<T>() {
- public T using(Class<? extends Transport> transportKey) {
- InputStream in = null;
- try {
- in = response.getResponseBodyAsStream();
- return injector.getInstance(transportKey).in(in, data);
- } catch (IOException e) {
- throw new TransportException(e);
- //
- // ugly stream closing here, to abstract it away from user code
- //
- } finally {
- try {
- if (null != in)
- in.close();
- } catch (IOException e) {
- // strange, unrecoverable error =(
- Logger.getLogger(WebResponseImpl.class.getName()).severe("Could not close input stream to in-memory byte array: " + e);
- }
- }
- }
- };
- }
- public int status() {
- return response.getStatusCode();
- }
- @Override
- public String toString() {
- try {
- return response.getResponseBody();
- } catch (IOException e) {
- // TODO
- return "";
- }
- }
- }