001package io.freefair.spring.okhttp.client;
002
003import io.freefair.spring.okhttp.OkHttpUtils;
004import okhttp3.Response;
005import okhttp3.ResponseBody;
006import org.springframework.http.HttpHeaders;
007import org.springframework.http.HttpStatusCode;
008import org.springframework.http.client.ClientHttpResponse;
009import java.io.InputStream;
010
011/**
012 * OkHttp based {@link ClientHttpResponse} implementation.
013 *
014 * @author Lars Grefer
015 * @see OkHttpClientRequest
016 */
017public class OkHttpClientResponse implements ClientHttpResponse {
018    private final Response okHttpResponse;
019    private HttpHeaders springHeaders;
020
021    @Override
022    public HttpStatusCode getStatusCode() {
023        return HttpStatusCode.valueOf(okHttpResponse.code());
024    }
025
026    @Override
027    public String getStatusText() {
028        return okHttpResponse.message();
029    }
030
031    @Override
032    public void close() {
033        ResponseBody body = okHttpResponse.body();
034        if (body != null) {
035            body.close();
036        }
037    }
038
039    @Override
040    public InputStream getBody() {
041        ResponseBody body = okHttpResponse.body();
042        if (body != null) {
043            return body.byteStream();
044        } else {
045            return InputStream.nullInputStream();
046        }
047    }
048
049    @Override
050    public HttpHeaders getHeaders() {
051        if (springHeaders == null) {
052            springHeaders = OkHttpUtils.toSpringHeaders(okHttpResponse.headers());
053        }
054        return springHeaders;
055    }
056
057    public OkHttpClientResponse(final Response okHttpResponse) {
058        this.okHttpResponse = okHttpResponse;
059    }
060}