001package io.freefair.spring.okhttp;
002
003import okhttp3.Response;
004import org.springframework.http.ContentDisposition;
005import org.springframework.http.HttpHeaders;
006import org.springframework.http.HttpMessage;
007import org.springframework.lang.NonNull;
008import org.springframework.lang.Nullable;
009import org.springframework.util.StringUtils;
010
011import java.net.URI;
012import java.net.URL;
013
014public class OkHttpResponseResource extends OkHttpResponseBodyResource implements HttpMessage {
015
016    private final Response response;
017
018    public OkHttpResponseResource(Response response) {
019        super(response.body());
020        this.response = response;
021    }
022
023    @Override
024    @NonNull
025    public String getDescription() {
026        return "OkHttpResponse [ " + response + " ]";
027    }
028
029    @Override
030    @Nullable
031    public String getFilename() {
032
033        String contentDisposition = response.header("Content-Disposition");
034        if (StringUtils.hasText(contentDisposition)) {
035            return ContentDisposition.parse(contentDisposition).getFilename();
036        }
037
038        return super.getFilename();
039    }
040
041    @Override
042    @NonNull
043    public URL getURL() {
044        return response.request().url().url();
045    }
046
047    @Override
048    @NonNull
049    public URI getURI() {
050        return response.request().url().uri();
051    }
052
053    @Override
054    @NonNull
055    public HttpHeaders getHeaders() {
056        return OkHttpUtils.toSpringHeaders(response.headers());
057    }
058}