001
002package io.vrap.rmf.base.client;
003
004import java.net.URI;
005import java.util.concurrent.CompletableFuture;
006
007import io.vrap.rmf.base.client.http.HandlerStack;
008
009import org.apache.commons.lang3.builder.EqualsBuilder;
010import org.apache.commons.lang3.builder.HashCodeBuilder;
011
012/**
013 * Default implementation of an {@link ApiHttpClient}
014 */
015public class ApiHttpClientImpl extends AutoCloseableService implements ApiHttpClient {
016
017    private final HandlerStack stack;
018    private final URI baseUri;
019    private final ResponseSerializer serializer;
020
021    public ApiHttpClientImpl(final String baseUri, final HandlerStack stack) {
022        this(URI.create(baseUri), stack, ResponseSerializer.of());
023    }
024
025    public ApiHttpClientImpl(final URI baseUri, final HandlerStack stack) {
026        this(baseUri, stack, ResponseSerializer.of());
027    }
028
029    public ApiHttpClientImpl(final URI baseUri, final HandlerStack stack, final ResponseSerializer serializer) {
030        this.stack = stack;
031        this.baseUri = baseUri;
032        this.serializer = serializer;
033    }
034
035    @Override
036    public CompletableFuture<ApiHttpResponse<byte[]>> execute(final ApiHttpRequest request) {
037        rejectExecutionIfClosed(CLOSED_MESSAGE);
038        return stack.execute(request.resolve(baseUri));
039    }
040
041    @Override
042    public URI getBaseUri() {
043        return baseUri;
044    }
045
046    @Override
047    public ResponseSerializer getSerializerService() {
048        return serializer;
049    }
050
051    @Override
052    protected void internalClose() {
053        closeQuietly(stack);
054    }
055
056    @Override
057    public boolean equals(Object o) {
058        if (this == o)
059            return true;
060
061        if (o == null || getClass() != o.getClass())
062            return false;
063
064        ApiHttpClientImpl that = (ApiHttpClientImpl) o;
065
066        return new EqualsBuilder().append(stack, that.stack)
067                .append(baseUri, that.baseUri)
068                .append(serializer, that.serializer)
069                .isEquals();
070    }
071
072    @Override
073    public int hashCode() {
074        return new HashCodeBuilder(17, 37).append(stack).append(baseUri).append(serializer).toHashCode();
075    }
076}