From e4377de2b53e7eb0a984f4f48cefef19479afb5c Mon Sep 17 00:00:00 2001 From: Andrea Lin Date: Fri, 23 Mar 2018 15:57:23 -0700 Subject: [PATCH 1/2] diff --- .../api/gax/httpjson/HttpRequestRunnable.java | 156 ++++++------------ .../gax/httpjson/ManagedHttpJsonChannel.java | 2 +- .../gax/httpjson/HttpRequestRunnableTest.java | 2 + 3 files changed, 56 insertions(+), 104 deletions(-) diff --git a/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java b/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java index 730b27d43..55e6d50e7 100644 --- a/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java +++ b/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java @@ -43,6 +43,7 @@ import com.google.api.gax.rpc.ApiExceptionFactory; import com.google.auth.Credentials; import com.google.auth.http.HttpCredentialsAdapter; +import com.google.auto.value.AutoValue; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import java.io.IOException; @@ -52,62 +53,52 @@ import java.util.Map.Entry; /** A runnable object that creates and executes an HTTP request. */ -// TODO(andrealin): AutoValue this class. -class HttpRequestRunnable implements Runnable { - private final HttpJsonCallOptions callOptions; - private final RequestT request; - private final ApiMethodDescriptor methodDescriptor; - private final HttpTransport httpTransport; - private final String endpoint; - private final JsonFactory jsonFactory; - private final ImmutableList headerEnhancers; - private final SettableApiFuture responseFuture; - - private HttpRequestRunnable( - final HttpJsonCallOptions callOptions, - final RequestT request, - final ApiMethodDescriptor methodDescriptor, - final HttpTransport httpTransport, - String endpoint, - JsonFactory jsonFactory, - List headerEnhancers, - SettableApiFuture responseFuture) { - this.endpoint = endpoint; - this.jsonFactory = jsonFactory; - this.headerEnhancers = ImmutableList.copyOf(headerEnhancers); - this.callOptions = callOptions; - this.request = request; - this.methodDescriptor = methodDescriptor; - this.httpTransport = httpTransport; - this.responseFuture = responseFuture; - } +@AutoValue +abstract class HttpRequestRunnable implements Runnable { + abstract HttpJsonCallOptions getHttpJsonCallOptions(); + + abstract RequestT getRequest(); + + abstract ApiMethodDescriptor getApiMethodDescriptor(); + + abstract HttpTransport getHttpTransport(); + + abstract String getEndpoint(); + + abstract JsonFactory getJsonFactory(); + + abstract ImmutableList getHeaderEnhancers(); + + abstract SettableApiFuture getResponseFuture(); HttpRequest createHttpRequest() throws IOException { GenericData tokenRequest = new GenericData(); - HttpRequestFormatter requestFormatter = methodDescriptor.getRequestFormatter(); + HttpRequestFormatter requestFormatter = + getApiMethodDescriptor().getRequestFormatter(); HttpRequestFactory requestFactory; - Credentials credentials = callOptions.getCredentials(); + Credentials credentials = getHttpJsonCallOptions().getCredentials(); if (credentials != null) { - requestFactory = httpTransport.createRequestFactory(new HttpCredentialsAdapter(credentials)); + requestFactory = + getHttpTransport().createRequestFactory(new HttpCredentialsAdapter(credentials)); } else { - requestFactory = httpTransport.createRequestFactory(); + requestFactory = getHttpTransport().createRequestFactory(); } // Create HTTP request body. - String requestBody = requestFormatter.getRequestBody(request); + String requestBody = requestFormatter.getRequestBody(getRequest()); JsonHttpContent jsonHttpContent = null; if (!Strings.isNullOrEmpty(requestBody)) { - jsonFactory.createJsonParser(requestBody).parse(tokenRequest); + getJsonFactory().createJsonParser(requestBody).parse(tokenRequest); jsonHttpContent = - new JsonHttpContent(jsonFactory, tokenRequest) + new JsonHttpContent(getJsonFactory(), tokenRequest) .setMediaType((new HttpMediaType("application/json"))); } // Populate URL path and query parameters. - GenericUrl url = new GenericUrl(endpoint + requestFormatter.getPath(request)); - Map> queryParams = requestFormatter.getQueryParamNames(request); + GenericUrl url = new GenericUrl(getEndpoint() + requestFormatter.getPath(getRequest())); + Map> queryParams = requestFormatter.getQueryParamNames(getRequest()); for (Entry> queryParam : queryParams.entrySet()) { if (queryParam.getValue() != null) { url.set(queryParam.getKey(), queryParam.getValue()); @@ -115,11 +106,11 @@ HttpRequest createHttpRequest() throws IOException { } HttpRequest httpRequest = - requestFactory.buildRequest(methodDescriptor.getHttpMethod(), url, jsonHttpContent); - for (HttpJsonHeaderEnhancer enhancer : headerEnhancers) { + requestFactory.buildRequest(getApiMethodDescriptor().getHttpMethod(), url, jsonHttpContent); + for (HttpJsonHeaderEnhancer enhancer : getHeaderEnhancers()) { enhancer.enhance(httpRequest.getHeaders()); } - httpRequest.setParser(new JsonObjectParser(jsonFactory)); + httpRequest.setParser(new JsonObjectParser(getJsonFactory())); return httpRequest; } @@ -135,85 +126,44 @@ public void run() { HttpJsonStatusCode.of(httpResponse.getStatusCode(), httpResponse.getStatusMessage()), false); } - if (methodDescriptor.getResponseParser() != null) { - ResponseT response = methodDescriptor.getResponseParser().parse(httpResponse.getContent()); - responseFuture.set(response); + if (getApiMethodDescriptor().getResponseParser() != null) { + ResponseT response = + getApiMethodDescriptor().getResponseParser().parse(httpResponse.getContent()); + getResponseFuture().set(response); } else { - responseFuture.set(null); + getResponseFuture().set(null); } } catch (Exception e) { - responseFuture.setException(e); + getResponseFuture().setException(e); } } static Builder newBuilder() { - return new Builder() + return new AutoValue_HttpRequestRunnable.Builder() .setHeaderEnhancers(new LinkedList()); } - static class Builder { - private HttpJsonCallOptions callOptions; - private RequestT request; - private ApiMethodDescriptor methodDescriptor; - private HttpTransport httpTransport; - private String endpoint; - private JsonFactory jsonFactory; - private List headerEnhancers; - private SettableApiFuture responseFuture; - - private Builder() {} - - Builder setHttpJsonCallOptions(HttpJsonCallOptions callOptions) { - this.callOptions = callOptions; - return this; - } + @AutoValue.Builder + abstract static class Builder { + abstract Builder setHttpJsonCallOptions(HttpJsonCallOptions callOptions); - Builder setRequest(RequestT request) { - this.request = request; - return this; - } + abstract Builder setRequest(RequestT request); - Builder setApiMethodDescriptor( - ApiMethodDescriptor methodDescriptor) { - this.methodDescriptor = methodDescriptor; - return this; - } + abstract Builder setApiMethodDescriptor( + ApiMethodDescriptor methodDescriptor); - Builder setHttpTransport(HttpTransport httpTransport) { - this.httpTransport = httpTransport; - return this; - } + abstract Builder setHttpTransport(HttpTransport httpTransport); - Builder setEndpoint(String endpoint) { - this.endpoint = endpoint; - return this; - } + abstract Builder setEndpoint(String endpoint); - Builder setJsonFactory(JsonFactory jsonFactory) { - this.jsonFactory = jsonFactory; - return this; - } + abstract Builder setJsonFactory(JsonFactory jsonFactory); - Builder setHeaderEnhancers(List headerEnhancers) { - this.headerEnhancers = headerEnhancers; - return this; - } + abstract Builder setHeaderEnhancers( + List headerEnhancers); - Builder setApiFuture(SettableApiFuture responseFuture) { - this.responseFuture = responseFuture; - return this; - } + abstract Builder setResponseFuture( + SettableApiFuture responseFuture); - HttpRequestRunnable build() { - return new HttpRequestRunnable<>( - callOptions, - request, - methodDescriptor, - httpTransport, - endpoint, - jsonFactory, - headerEnhancers, - responseFuture); - } + abstract HttpRequestRunnable build(); } } diff --git a/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java b/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java index 61f1da580..3949d83b5 100644 --- a/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java +++ b/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java @@ -81,7 +81,7 @@ public ApiFuture issueFutureUnaryCall( HttpRequestRunnable runnable = HttpRequestRunnable.newBuilder() - .setApiFuture(responseFuture) + .setResponseFuture(responseFuture) .setApiMethodDescriptor(methodDescriptor) .setHeaderEnhancers(headerEnhancers) .setHttpJsonCallOptions(callOptions) diff --git a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/HttpRequestRunnableTest.java b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/HttpRequestRunnableTest.java index f79cda898..2bfe575c2 100644 --- a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/HttpRequestRunnableTest.java +++ b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/HttpRequestRunnableTest.java @@ -32,6 +32,7 @@ import com.google.api.client.http.HttpRequest; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.testing.http.MockHttpTransport; +import com.google.api.core.SettableApiFuture; import com.google.api.gax.httpjson.testing.FakeApiMessage; import com.google.api.pathtemplate.PathTemplate; import com.google.auth.Credentials; @@ -138,6 +139,7 @@ public String serialize(Void response) { .setApiMethodDescriptor(methodDescriptor) .setHttpTransport(new MockHttpTransport()) .setJsonFactory(new JacksonFactory()) + .setResponseFuture(SettableApiFuture.create()) .build(); } From 4ec6e4138cbc714847430d6cd2766a88ce227175 Mon Sep 17 00:00:00 2001 From: Andrea Lin Date: Wed, 23 Jan 2019 10:51:37 -0800 Subject: [PATCH 2/2] make test file work --- .../com/google/api/gax/httpjson/ApiMessageHttpRequestTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ApiMessageHttpRequestTest.java b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ApiMessageHttpRequestTest.java index 6c7eb9b47..05e99fbe4 100644 --- a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ApiMessageHttpRequestTest.java +++ b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ApiMessageHttpRequestTest.java @@ -32,6 +32,7 @@ import com.google.api.client.http.HttpRequest; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.testing.http.MockHttpTransport; +import com.google.api.core.SettableApiFuture; import com.google.api.pathtemplate.PathTemplate; import com.google.api.resourcenames.ResourceName; import com.google.api.resourcenames.ResourceNameFactory; @@ -136,6 +137,7 @@ public String getFieldValue(String s) { .setApiMethodDescriptor(apiMethodDescriptor) .setHttpTransport(new MockHttpTransport()) .setJsonFactory(new JacksonFactory()) + .setResponseFuture(SettableApiFuture.create()) .build(); HttpRequest httpRequest = httpRequestRunnable.createHttpRequest();