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}