From 570bb33b6df451f5bb2997b66de377e9a1fd7250 Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 17:26:09 +0000 Subject: [PATCH 01/10] fix ServiceStub Goldens --- WORKSPACE | 2 +- .../HttpJsonServiceStubClassComposer.java | 237 +++++++++++++++++- .../v1/stub/HttpJsonAddressesStub.java | 93 +++++++ .../v1/stub/HttpJsonRegionOperationsStub.java | 26 ++ 4 files changed, 356 insertions(+), 2 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 7468b3246d..1b8335256f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -32,7 +32,7 @@ jvm_maven_import_external( # gapic-generator-java dependencies to match the order in googleapis repository, # which in its turn, prioritizes actual generated clients runtime dependencies # over the generator dependencies. -_gax_java_version = "1.65.1" +_gax_java_version = "2.2.0" http_archive( name = "com_google_api_gax_java", diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index 901dceacc6..8b2c2e4635 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -19,26 +19,30 @@ import com.google.api.gax.httpjson.ApiMethodDescriptor; import com.google.api.gax.httpjson.FieldsExtractor; import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.generator.engine.ast.AnnotationNode; import com.google.api.generator.engine.ast.AssignmentExpr; import com.google.api.generator.engine.ast.ConcreteReference; import com.google.api.generator.engine.ast.EnumRefExpr; import com.google.api.generator.engine.ast.Expr; import com.google.api.generator.engine.ast.ExprStatement; -import com.google.api.generator.engine.ast.IfStatement; import com.google.api.generator.engine.ast.LambdaExpr; +import com.google.api.generator.engine.ast.IfStatement; import com.google.api.generator.engine.ast.MethodDefinition; import com.google.api.generator.engine.ast.MethodInvocationExpr; import com.google.api.generator.engine.ast.NewObjectExpr; +import com.google.api.generator.engine.ast.PrimitiveValue; import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.ast.StringObjectValue; import com.google.api.generator.engine.ast.TypeNode; import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.VaporReference; import com.google.api.generator.engine.ast.Variable; import com.google.api.generator.engine.ast.VariableExpr; import com.google.api.generator.gapic.composer.common.AbstractServiceStubClassComposer; @@ -116,6 +120,9 @@ protected Statement createMethodDescriptorVariableDecl( methodMaker.apply("setRequestFormatter", getRequestFormatterExpr(protoMethod)).apply(expr); expr = methodMaker.apply("setResponseParser", setResponseParserExpr(protoMethod)).apply(expr); + expr = methodMaker.apply("setOperationSnapshotFactory", setOperationSnapshotFactoryExpr(protoMethod)).apply(expr); + expr = methodMaker.apply("setPollingRequestFactory", setPollingRequestFactoryExpr(protoMethod)).apply(expr); + expr = MethodInvocationExpr.builder() .setMethodName("build") @@ -356,6 +363,234 @@ private List setResponseParserExpr(Method protoMethod) { return Collections.singletonList(expr); } + private List setOperationSnapshotFactoryExpr(Method protoMethod) { + + BiFunction, Function> + methodMaker = getMethodMaker(); + + // Generate input varibles for create() + VariableExpr requestVarExpr = VariableExpr.withVariable( + Variable.builder().setType(protoMethod.inputType()).setName("request").build()); + VariableExpr responseVarExpr = VariableExpr.withVariable( + Variable.builder().setType(protoMethod.outputType()).setName("response").build()); + + List createBody = new ArrayList(4); + + // Generate opName + TypeNode stringBuilderType = + TypeNode.withReference(ConcreteReference.withClazz(StringBuilder.class)); + VariableExpr opNameVarExpr = + VariableExpr.withVariable( + Variable.builder().setType(stringBuilderType).setName("opName").build()); + MethodInvocationExpr getId = + MethodInvocationExpr.builder() + .setMethodName("getId") + .setExprReferenceExpr(responseVarExpr).build(); + Expr opNameObjectExpr = NewObjectExpr.builder() + .setType(stringBuilderType) + .setArguments(getId) + .build(); + AssignmentExpr opNameAssignExpr = + AssignmentExpr.builder() + .setVariableExpr(opNameVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(opNameObjectExpr) + .build(); + createBody.add(ExprStatement.withExpr(opNameAssignExpr)); + + // Generate changes opName + MethodInvocationExpr requestGetProjectExpr = MethodInvocationExpr.builder() + .setMethodName("getProject") + .setExprReferenceExpr(requestVarExpr) + .build(); + ValueExpr colonValueExpr = + ValueExpr.builder().setValue(StringObjectValue.builder().setValue(":").build()).build(); + MethodInvocationExpr opNameAppendColonProjectExpr = MethodInvocationExpr.builder() + .setMethodName("append") + .setArguments(colonValueExpr) + .setExprReferenceExpr(opNameVarExpr) + .build(); + opNameAppendColonProjectExpr = methodMaker.apply( + "append", Collections.singletonList(requestGetProjectExpr)) + .apply(opNameAppendColonProjectExpr); + createBody.add(ExprStatement.withExpr(opNameAppendColonProjectExpr)); + + // Generate changes to opName + MethodInvocationExpr requestGetRegionExpr = MethodInvocationExpr.builder() + .setMethodName("getRegion") + .setExprReferenceExpr(requestVarExpr) + .build(); + MethodInvocationExpr opNameAppendColonRegionExpr = MethodInvocationExpr.builder() + .setMethodName("append") + .setArguments(colonValueExpr) + .setExprReferenceExpr(opNameVarExpr) + .build(); + opNameAppendColonRegionExpr = methodMaker.apply( + "append", Collections.singletonList(requestGetRegionExpr)) + .apply(opNameAppendColonRegionExpr); + createBody.add(ExprStatement.withExpr(opNameAppendColonRegionExpr)); + + // Generate check status expression + MethodInvocationExpr getStatusExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getStatus") + .build(); + TypeNode statusType = TypeNode.withReference( + VaporReference.builder() + .setName("Status") + .setPakkage("com.google.cloud.compute.v1") + .setIsStaticImport(false) + .build()); + VariableExpr statusDoneExpr = VariableExpr.builder() + .setVariable(Variable.builder().setName("DONE").setType(TypeNode.INT).build()) + .setStaticReferenceType(statusType) + .build(); + MethodInvocationExpr statusEqualsExpr = methodMaker.apply( + "equals", Collections.singletonList(statusDoneExpr)).apply(getStatusExpr); + + // Generate return statement + TypeNode httpJsonOperationSnapshotType = + TypeNode.withReference(ConcreteReference.withClazz(HttpJsonOperationSnapshot.class)); + MethodInvocationExpr newBuilderExpr = MethodInvocationExpr.builder() + .setStaticReferenceType(httpJsonOperationSnapshotType) + .setMethodName("newBuilder") + .build(); + MethodInvocationExpr opNameToStringExpr = MethodInvocationExpr.builder() + .setMethodName("toString") + .setExprReferenceExpr(opNameVarExpr) + .build(); + MethodInvocationExpr getHttpErrorStatusCodeExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getHttpErrorStatusCode") + .build(); + MethodInvocationExpr getHttpErrorMessageExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getHttpErrorMessage") + .build(); + newBuilderExpr = methodMaker.apply( + "setName", Collections.singletonList(opNameToStringExpr)).apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setMetadata", Collections.singletonList(responseVarExpr)).apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setDone", Collections.singletonList(statusEqualsExpr)).apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setResponse", Collections.singletonList(responseVarExpr)).apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setError", Arrays.asList( + getHttpErrorStatusCodeExpr, getHttpErrorMessageExpr)) + .apply(newBuilderExpr); + TypeNode operationSnapshotType = TypeNode.withReference( + ConcreteReference.builder().setClazz(OperationSnapshot.class).build()); + MethodInvocationExpr buildExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderExpr) + .setMethodName("build") + .setReturnType(operationSnapshotType) + .build(); + + // Generate lambda anonymous class + return Collections.singletonList( + LambdaExpr.builder() + .setArguments( + requestVarExpr.toBuilder().setIsDecl(true).build(), + responseVarExpr.toBuilder().setIsDecl(true).build() + ) + .setBody(createBody) + .setReturnExpr(buildExpr) + .build()); + } + + private List setPollingRequestFactoryExpr(Method protoMethod) { + + BiFunction, Function> + methodMaker = getMethodMaker(); + + List createBody = new ArrayList(1); + + // Generate input variables for create + VariableExpr compoundOperationIdVarExpr = VariableExpr.builder() + .setVariable( + Variable.builder().setType(TypeNode.STRING).setName("compoundOperationId").build()) + .build(); + + // Generate idComponenets + TypeNode listStringType = TypeNode.withReference( + ConcreteReference.builder() + .setClazz(List.class) + .setGenerics(ConcreteReference.withClazz(String.class)) + .build()); + TypeNode arrayListStringType = TypeNode.withReference( + ConcreteReference.builder() + .setClazz(ArrayList.class) + .setGenerics(ConcreteReference.withClazz(String.class)) + .build()); + TypeNode arraysType = TypeNode.withReference(ConcreteReference.withClazz(Arrays.class)); + VariableExpr idComponentsVarExpr = VariableExpr.withVariable( + Variable.builder().setName("idComponents").setType(listStringType).build()); + MethodInvocationExpr compoundOperationIdSplitExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(compoundOperationIdVarExpr) + .setMethodName("split") + .setArguments(ValueExpr.withValue(StringObjectValue.withValue(":"))) + .setReturnType(arrayListStringType) + .build(); + MethodInvocationExpr asListExpr = MethodInvocationExpr.builder() + .setStaticReferenceType(arraysType) + .setMethodName("asList") + .setArguments(compoundOperationIdSplitExpr) + .setReturnType(arrayListStringType) + .build(); + AssignmentExpr idComponentsAssignExpr = AssignmentExpr.builder() + .setVariableExpr(idComponentsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(asListExpr) + .build(); + createBody.add(ExprStatement.withExpr(idComponentsAssignExpr)); + + // Generate return statement + TypeNode getRegionOperationRequestType = TypeNode.withReference( + VaporReference.builder() + .setName("GetRegionOperationRequest") + .setPakkage("com.google.cloud.compute.v1") + .setIsStaticImport(false) + .build()); + MethodInvocationExpr newBuilderExpr = MethodInvocationExpr.builder() + .setStaticReferenceType(getRegionOperationRequestType) + .setMethodName("newBuilder") + .build(); + newBuilderExpr = methodMaker.apply( + "setOperation", Collections.singletonList(getExpr(idComponentsVarExpr, "0"))) + .apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setProject", Collections.singletonList(getExpr(idComponentsVarExpr, "1"))) + .apply(newBuilderExpr); + newBuilderExpr = methodMaker.apply( + "setRegion", Collections.singletonList(getExpr(idComponentsVarExpr, "2"))) + .apply(newBuilderExpr); + MethodInvocationExpr buildExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderExpr) + .setMethodName("build") + .setReturnType(getRegionOperationRequestType) + .build(); + + // Return lambda anonymous class + return Collections.singletonList( + LambdaExpr.builder() + .setArguments(compoundOperationIdVarExpr.toBuilder().setIsDecl(true).build()) + .setBody(createBody) + .setReturnExpr(buildExpr) + .build() + ); + } + + // returns var.get(num); + private MethodInvocationExpr getExpr(VariableExpr var, String num) { + return + MethodInvocationExpr.builder() + .setExprReferenceExpr(var) + .setMethodName("get") + .setArguments(ValueExpr.builder(). + setValue( + PrimitiveValue.builder().setValue(num).setType(TypeNode.INT).build()).build()) + .build(); + } + private Expr createFieldsExtractorClassInstance( Method method, TypeNode extractorReturnType, diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java index d8d960d342..8a820610be 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java @@ -26,21 +26,26 @@ import com.google.api.gax.core.BackgroundResourceAggregation; import com.google.api.gax.httpjson.ApiMethodDescriptor; import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.compute.v1.AddressAggregatedList; import com.google.cloud.compute.v1.AddressList; import com.google.cloud.compute.v1.AggregatedListAddressesRequest; import com.google.cloud.compute.v1.DeleteAddressRequest; +import com.google.cloud.compute.v1.GetRegionOperationRequest; import com.google.cloud.compute.v1.InsertAddressRequest; import com.google.cloud.compute.v1.ListAddressesRequest; import com.google.cloud.compute.v1.Operation; +import com.google.cloud.compute.v1.Status; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -102,6 +107,28 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(AddressAggregatedList.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (AggregatedListAddressesRequest request, AddressAggregatedList response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor deleteMethodDescriptor = @@ -137,6 +164,28 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(Operation.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (DeleteAddressRequest request, Operation response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor insertMethodDescriptor = @@ -174,6 +223,28 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(Operation.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (InsertAddressRequest request, Operation response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor listMethodDescriptor = @@ -215,6 +286,28 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(AddressList.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (ListAddressesRequest request, AddressList response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private final UnaryCallable diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java index 9d90915792..47bc6a36a7 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java @@ -23,16 +23,20 @@ import com.google.api.gax.core.BackgroundResourceAggregation; import com.google.api.gax.httpjson.ApiMethodDescriptor; import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.compute.v1.GetRegionOperationRequest; import com.google.cloud.compute.v1.Operation; +import com.google.cloud.compute.v1.Status; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -79,6 +83,28 @@ public class HttpJsonRegionOperationsStub extends RegionOperationsStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(Operation.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (GetRegionOperationRequest request, Operation response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private final UnaryCallable getCallable; From cdb67da68d15870198be0e26eeae2b0ca12c51dc Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 18:32:08 +0000 Subject: [PATCH 02/10] fix Stub golden --- .../goldens/HttpJsonComplianceStub.golden | 160 +++++++++++++++++- 1 file changed, 158 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden index 5324f21655..a24f2dfacf 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden @@ -1,26 +1,72 @@ package com.google.showcase.v1beta1.stub; +import static com.google.cloud.compute.v1.AddressesClient.AggregatedListPagedResponse; +import static com.google.cloud.compute.v1.AddressesClient.ListPagedResponse; + import com.google.api.client.http.HttpMethods; import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.core.BackgroundResourceAggregation; import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.FieldsExtractor; import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; -import com.google.showcase.v1beta1.RepeatRequest; -import com.google.showcase.v1beta1.RepeatResponse; +import com.google.api.generator.engine.ast.AnnotationNode; +import com.google.api.generator.engine.ast.AssignmentExpr; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.EnumRefExpr; +import com.google.api.generator.engine.ast.Expr; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.LambdaExpr; +import com.google.api.generator.engine.ast.IfStatement; +import com.google.api.generator.engine.ast.MethodDefinition; +import com.google.api.generator.engine.ast.MethodInvocationExpr; +import com.google.api.generator.engine.ast.NewObjectExpr; +import com.google.api.generator.engine.ast.PrimitiveValue; +import com.google.api.generator.engine.ast.ScopeNode; +import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.ast.StringObjectValue; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.VaporReference; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; +import com.google.api.generator.gapic.composer.common.AbstractServiceStubClassComposer; +import com.google.api.generator.gapic.composer.store.TypeStore; +import com.google.api.generator.gapic.model.HttpBindings.HttpBinding; +import com.google.api.generator.gapic.model.Method; +import com.google.api.generator.gapic.model.Service; +import com.google.api.generator.gapic.utils.JavaStyle; +import com.google.cloud.compute.v1.AddressAggregatedList; +import com.google.cloud.compute.v1.AddressList; +import com.google.cloud.compute.v1.AggregatedListAddressesRequest; +import com.google.cloud.compute.v1.DeleteAddressRequest; +import com.google.cloud.compute.v1.GetRegionOperationRequest; +import com.google.cloud.compute.v1.InsertAddressRequest; +import com.google.cloud.compute.v1.ListAddressesRequest; +import com.google.cloud.compute.v1.Operation; +import com.google.cloud.compute.v1.Status; +import com.google.common.collect.ImmutableList; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -64,6 +110,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor @@ -98,6 +166,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor @@ -178,6 +268,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor @@ -222,6 +334,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor @@ -263,6 +397,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private final UnaryCallable repeatDataBodyCallable; From 2430989193057c3b2df11997b33975f6cd0959bf Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 19:08:02 +0000 Subject: [PATCH 03/10] fix Stub golden --- .../goldens/HttpJsonComplianceStub.golden | 67 +++++++------------ 1 file changed, 24 insertions(+), 43 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden index a24f2dfacf..5160861d8c 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden @@ -1,15 +1,11 @@ package com.google.showcase.v1beta1.stub; -import static com.google.cloud.compute.v1.AddressesClient.AggregatedListPagedResponse; -import static com.google.cloud.compute.v1.AddressesClient.ListPagedResponse; - import com.google.api.client.http.HttpMethods; import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.core.BackgroundResourceAggregation; import com.google.api.gax.httpjson.ApiMethodDescriptor; -import com.google.api.gax.httpjson.FieldsExtractor; import com.google.api.gax.httpjson.HttpJsonCallSettings; import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; @@ -19,54 +15,17 @@ import com.google.api.gax.httpjson.ProtoRestSerializer; import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; -import com.google.api.generator.engine.ast.AnnotationNode; -import com.google.api.generator.engine.ast.AssignmentExpr; -import com.google.api.generator.engine.ast.ConcreteReference; -import com.google.api.generator.engine.ast.EnumRefExpr; -import com.google.api.generator.engine.ast.Expr; -import com.google.api.generator.engine.ast.ExprStatement; -import com.google.api.generator.engine.ast.LambdaExpr; -import com.google.api.generator.engine.ast.IfStatement; -import com.google.api.generator.engine.ast.MethodDefinition; -import com.google.api.generator.engine.ast.MethodInvocationExpr; -import com.google.api.generator.engine.ast.NewObjectExpr; -import com.google.api.generator.engine.ast.PrimitiveValue; -import com.google.api.generator.engine.ast.ScopeNode; -import com.google.api.generator.engine.ast.Statement; -import com.google.api.generator.engine.ast.StringObjectValue; -import com.google.api.generator.engine.ast.TypeNode; -import com.google.api.generator.engine.ast.ValueExpr; -import com.google.api.generator.engine.ast.VaporReference; -import com.google.api.generator.engine.ast.Variable; -import com.google.api.generator.engine.ast.VariableExpr; -import com.google.api.generator.gapic.composer.common.AbstractServiceStubClassComposer; -import com.google.api.generator.gapic.composer.store.TypeStore; -import com.google.api.generator.gapic.model.HttpBindings.HttpBinding; -import com.google.api.generator.gapic.model.Method; -import com.google.api.generator.gapic.model.Service; -import com.google.api.generator.gapic.utils.JavaStyle; -import com.google.cloud.compute.v1.AddressAggregatedList; -import com.google.cloud.compute.v1.AddressList; -import com.google.cloud.compute.v1.AggregatedListAddressesRequest; -import com.google.cloud.compute.v1.DeleteAddressRequest; import com.google.cloud.compute.v1.GetRegionOperationRequest; -import com.google.cloud.compute.v1.InsertAddressRequest; -import com.google.cloud.compute.v1.ListAddressesRequest; -import com.google.cloud.compute.v1.Operation; import com.google.cloud.compute.v1.Status; -import com.google.common.collect.ImmutableList; +import com.google.showcase.v1beta1.RepeatRequest; +import com.google.showcase.v1beta1.RepeatResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.TimeUnit; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.stream.Collectors; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -222,6 +181,28 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) + .setOperationSnapshotFactory( + (RepeatRequest request, RepeatResponse response) -> { + StringBuilder opName = new StringBuilder(response.getId()); + opName.append(":").append(request.getProject()); + opName.append(":").append(request.getRegion()); + return HttpJsonOperationSnapshot.newBuilder() + .setName(opName.toString()) + .setMetadata(response) + .setDone(response.getStatus().equals(Status.DONE)) + .setResponse(response) + .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) + .build(); + }) + .setPollingRequestFactory( + compoundOperationId -> { + List idComponents = Arrays.asList(compoundOperationId.split(":")); + return GetRegionOperationRequest.newBuilder() + .setOperation(idComponents.get(0)) + .setProject(idComponents.get(1)) + .setRegion(idComponents.get(2)) + .build(); + }) .build(); private static final ApiMethodDescriptor From 6b15e3bb62b6e1c919aa6c7d06bb13184e7c3a46 Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 19:51:03 +0000 Subject: [PATCH 04/10] fix CallableFactory golden --- ...onServiceCallableFactoryClassComposer.java | 111 +++++++++++++++++- .../HttpJsonComplianceCallableFactory.golden | 13 +- .../HttpJsonAddressesCallableFactory.java | 12 +- ...tpJsonRegionOperationsCallableFactory.java | 12 +- 4 files changed, 144 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java index f9c4045cb9..3319487c5c 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java @@ -16,14 +16,28 @@ import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.httpjson.ApiMessage; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.UnaryCallable; import com.google.api.generator.engine.ast.AnnotationNode; +import com.google.api.generator.engine.ast.AssignmentExpr; import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.ExprStatement; import com.google.api.generator.engine.ast.MethodDefinition; +import com.google.api.generator.engine.ast.MethodInvocationExpr; +import com.google.api.generator.engine.ast.NewObjectExpr; +import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.ast.TypeNode; import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.VaporReference; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; import com.google.api.generator.gapic.composer.common.AbstractServiceCallableFactoryClassComposer; import com.google.api.generator.gapic.composer.store.TypeStore; import com.google.api.generator.gapic.model.Service; +import com.google.longrunning.Operation; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -90,6 +104,7 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { "The surface for long-running operations is not stable yet and may change in the" + " future."); + // Generate generic method without the body MethodDefinition method = createGenericCallableMethod( typeStore, @@ -104,6 +119,100 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { .map(n -> (Object) n) .collect(Collectors.toList()), Arrays.asList(betaAnnotation)); - return method.toBuilder().setReturnExpr(ValueExpr.createNullExpr()).build(); + + List createOperationCallableBody = new ArrayList(2); + + List arguments = method.arguments(); + + // Generate innerCallable + VariableExpr innerCallableVarExpr = VariableExpr.builder() + .setVariable( + Variable.builder() + .setName("innerCallable") + .setType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build()) + .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) + .build(); + MethodInvocationExpr getInitialCallSettingsExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(1).variable())) + .setMethodName("getInitialCallSettings") + .build(); + MethodInvocationExpr createBaseUnaryCallableExpr = MethodInvocationExpr.builder() + .setStaticReferenceType(TypeNode.withReference(ConcreteReference.withClazz( + HttpJsonCallableFactory.class))) + .setMethodName("createBaseUnaryCallable") + .setArguments( + VariableExpr.withVariable(arguments.get(0).variable()), + getInitialCallSettingsExpr, + VariableExpr.withVariable(arguments.get(2).variable())) + .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build(); + AssignmentExpr innerCallableAssignExpr = AssignmentExpr.builder() + .setVariableExpr(innerCallableVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(createBaseUnaryCallableExpr) + .build(); + createOperationCallableBody.add(ExprStatement.withExpr(innerCallableAssignExpr)); + + // Generate initialCallable + VariableExpr initialCallableVarExpr = VariableExpr.builder() + .setVariable( + Variable.builder() + .setName("initialCallable") + .setType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build()) + .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) + .build(); + MethodInvocationExpr getMethodDescriptorExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(0).variable())) + .setMethodName("getMethodDescriptor") + .build(); + MethodInvocationExpr getOperationSnapshotFactoryExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(getMethodDescriptorExpr) + .setMethodName("getOperationSnapshotFactory") + .build(); + // This is a temporary solution + VaporReference requestT = VaporReference.builder() + .setName("RequestT") + .setPakkage("com.google.cloud.compute.v1.stub") + .build(); + TypeNode operationSnapshotCallableType = TypeNode.withReference( + ConcreteReference.builder() + .setClazz(HttpJsonOperationSnapshotCallable.class) + .setGenerics(requestT, ConcreteReference.withClazz(Operation.class)) + .build()); + NewObjectExpr initialCallableObject = NewObjectExpr.builder() + .setType(operationSnapshotCallableType) + .setIsGeneric(true) + .setArguments(innerCallableVarExpr, getOperationSnapshotFactoryExpr) + .build(); + AssignmentExpr initialCallableAssignExpr = AssignmentExpr.builder() + .setVariableExpr(initialCallableVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(initialCallableObject) + .build(); + createOperationCallableBody.add(ExprStatement.withExpr(initialCallableAssignExpr)); + + // Generate return statement + MethodInvocationExpr longRunningClient = MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(3).variable())) + .setMethodName("longRunningClient") + .build(); + MethodInvocationExpr createOperationCallable = MethodInvocationExpr.builder() + .setStaticReferenceType( + TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) + .setMethodName("createOperationCallable") + .setArguments( + VariableExpr.withVariable(arguments.get(1).variable()), + VariableExpr.withVariable(arguments.get(2).variable()), + longRunningClient, + initialCallableVarExpr + ) + .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(OperationCallable.class))) + .build(); + + // Add body and return statement to method + return method.toBuilder() + .setBody(createOperationCallableBody) + .setReturnExpr(createOperationCallable) + .build(); } } diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceCallableFactory.golden b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceCallableFactory.golden index 7d6032778d..0b58310417 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceCallableFactory.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceCallableFactory.golden @@ -5,6 +5,7 @@ import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.httpjson.ApiMessage; import com.google.api.gax.httpjson.HttpJsonCallSettings; import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.rpc.BatchingCallSettings; import com.google.api.gax.rpc.ClientContext; @@ -13,6 +14,8 @@ import com.google.api.gax.rpc.OperationCallable; import com.google.api.gax.rpc.PagedCallSettings; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.compute.v1.stub.RequestT; +import com.google.longrunning.Operation; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -63,6 +66,14 @@ public class HttpJsonComplianceCallableFactory OperationCallSettings callSettings, ClientContext clientContext, BackgroundResource operationsStub) { - return null; + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + UnaryCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); } } diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesCallableFactory.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesCallableFactory.java index afa275a6f5..49347e5792 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesCallableFactory.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesCallableFactory.java @@ -21,6 +21,7 @@ import com.google.api.gax.httpjson.ApiMessage; import com.google.api.gax.httpjson.HttpJsonCallSettings; import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.rpc.BatchingCallSettings; import com.google.api.gax.rpc.ClientContext; @@ -29,6 +30,7 @@ import com.google.api.gax.rpc.PagedCallSettings; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -79,6 +81,14 @@ OperationCallable createOperationCallable( OperationCallSettings callSettings, ClientContext clientContext, BackgroundResource operationsStub) { - return null; + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + UnaryCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); } } diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsCallableFactory.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsCallableFactory.java index 6dac14a84e..6113b5f496 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsCallableFactory.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsCallableFactory.java @@ -21,6 +21,7 @@ import com.google.api.gax.httpjson.ApiMessage; import com.google.api.gax.httpjson.HttpJsonCallSettings; import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.rpc.BatchingCallSettings; import com.google.api.gax.rpc.ClientContext; @@ -29,6 +30,7 @@ import com.google.api.gax.rpc.PagedCallSettings; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -79,6 +81,14 @@ OperationCallable createOperationCallable( OperationCallSettings callSettings, ClientContext clientContext, BackgroundResource operationsStub) { - return null; + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + UnaryCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); } } From 9ed928ab3289645b1bd33dca6cd4e50db8829154 Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 20:06:04 +0000 Subject: [PATCH 05/10] fix java format --- ...onServiceCallableFactoryClassComposer.java | 171 +++++---- .../HttpJsonServiceStubClassComposer.java | 351 ++++++++++-------- 2 files changed, 289 insertions(+), 233 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java index 3319487c5c..212ff9e909 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java @@ -29,7 +29,6 @@ import com.google.api.generator.engine.ast.NewObjectExpr; import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.ast.TypeNode; -import com.google.api.generator.engine.ast.ValueExpr; import com.google.api.generator.engine.ast.VaporReference; import com.google.api.generator.engine.ast.Variable; import com.google.api.generator.engine.ast.VariableExpr; @@ -125,92 +124,108 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { List arguments = method.arguments(); // Generate innerCallable - VariableExpr innerCallableVarExpr = VariableExpr.builder() - .setVariable( - Variable.builder() - .setName("innerCallable") - .setType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) - .build()) - .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) - .build(); - MethodInvocationExpr getInitialCallSettingsExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(1).variable())) - .setMethodName("getInitialCallSettings") - .build(); - MethodInvocationExpr createBaseUnaryCallableExpr = MethodInvocationExpr.builder() - .setStaticReferenceType(TypeNode.withReference(ConcreteReference.withClazz( - HttpJsonCallableFactory.class))) - .setMethodName("createBaseUnaryCallable") - .setArguments( - VariableExpr.withVariable(arguments.get(0).variable()), - getInitialCallSettingsExpr, - VariableExpr.withVariable(arguments.get(2).variable())) - .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) - .build(); - AssignmentExpr innerCallableAssignExpr = AssignmentExpr.builder() - .setVariableExpr(innerCallableVarExpr.toBuilder().setIsDecl(true).build()) - .setValueExpr(createBaseUnaryCallableExpr) - .build(); + VariableExpr innerCallableVarExpr = + VariableExpr.builder() + .setVariable( + Variable.builder() + .setName("innerCallable") + .setType( + TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build()) + .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) + .build(); + MethodInvocationExpr getInitialCallSettingsExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(1).variable())) + .setMethodName("getInitialCallSettings") + .build(); + MethodInvocationExpr createBaseUnaryCallableExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType( + TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) + .setMethodName("createBaseUnaryCallable") + .setArguments( + VariableExpr.withVariable(arguments.get(0).variable()), + getInitialCallSettingsExpr, + VariableExpr.withVariable(arguments.get(2).variable())) + .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build(); + AssignmentExpr innerCallableAssignExpr = + AssignmentExpr.builder() + .setVariableExpr(innerCallableVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(createBaseUnaryCallableExpr) + .build(); createOperationCallableBody.add(ExprStatement.withExpr(innerCallableAssignExpr)); // Generate initialCallable - VariableExpr initialCallableVarExpr = VariableExpr.builder() - .setVariable( - Variable.builder() - .setName("initialCallable") - .setType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) - .build()) - .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) - .build(); - MethodInvocationExpr getMethodDescriptorExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(0).variable())) - .setMethodName("getMethodDescriptor") - .build(); - MethodInvocationExpr getOperationSnapshotFactoryExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(getMethodDescriptorExpr) - .setMethodName("getOperationSnapshotFactory") - .build(); + VariableExpr initialCallableVarExpr = + VariableExpr.builder() + .setVariable( + Variable.builder() + .setName("initialCallable") + .setType( + TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) + .build()) + .setTemplateObjects(Arrays.asList(requestTemplateName, methodVariantName)) + .build(); + MethodInvocationExpr getMethodDescriptorExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(0).variable())) + .setMethodName("getMethodDescriptor") + .build(); + MethodInvocationExpr getOperationSnapshotFactoryExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(getMethodDescriptorExpr) + .setMethodName("getOperationSnapshotFactory") + .build(); // This is a temporary solution - VaporReference requestT = VaporReference.builder() - .setName("RequestT") - .setPakkage("com.google.cloud.compute.v1.stub") - .build(); - TypeNode operationSnapshotCallableType = TypeNode.withReference( - ConcreteReference.builder() - .setClazz(HttpJsonOperationSnapshotCallable.class) - .setGenerics(requestT, ConcreteReference.withClazz(Operation.class)) - .build()); - NewObjectExpr initialCallableObject = NewObjectExpr.builder() - .setType(operationSnapshotCallableType) - .setIsGeneric(true) - .setArguments(innerCallableVarExpr, getOperationSnapshotFactoryExpr) - .build(); - AssignmentExpr initialCallableAssignExpr = AssignmentExpr.builder() - .setVariableExpr(initialCallableVarExpr.toBuilder().setIsDecl(true).build()) - .setValueExpr(initialCallableObject) - .build(); + VaporReference requestT = + VaporReference.builder() + .setName("RequestT") + .setPakkage("com.google.cloud.compute.v1.stub") + .build(); + TypeNode operationSnapshotCallableType = + TypeNode.withReference( + ConcreteReference.builder() + .setClazz(HttpJsonOperationSnapshotCallable.class) + .setGenerics(requestT, ConcreteReference.withClazz(Operation.class)) + .build()); + NewObjectExpr initialCallableObject = + NewObjectExpr.builder() + .setType(operationSnapshotCallableType) + .setIsGeneric(true) + .setArguments(innerCallableVarExpr, getOperationSnapshotFactoryExpr) + .build(); + AssignmentExpr initialCallableAssignExpr = + AssignmentExpr.builder() + .setVariableExpr(initialCallableVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(initialCallableObject) + .build(); createOperationCallableBody.add(ExprStatement.withExpr(initialCallableAssignExpr)); // Generate return statement - MethodInvocationExpr longRunningClient = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(3).variable())) - .setMethodName("longRunningClient") - .build(); - MethodInvocationExpr createOperationCallable = MethodInvocationExpr.builder() - .setStaticReferenceType( - TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) - .setMethodName("createOperationCallable") - .setArguments( - VariableExpr.withVariable(arguments.get(1).variable()), - VariableExpr.withVariable(arguments.get(2).variable()), - longRunningClient, - initialCallableVarExpr - ) - .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(OperationCallable.class))) - .build(); + MethodInvocationExpr longRunningClient = + MethodInvocationExpr.builder() + .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(3).variable())) + .setMethodName("longRunningClient") + .build(); + MethodInvocationExpr createOperationCallable = + MethodInvocationExpr.builder() + .setStaticReferenceType( + TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) + .setMethodName("createOperationCallable") + .setArguments( + VariableExpr.withVariable(arguments.get(1).variable()), + VariableExpr.withVariable(arguments.get(2).variable()), + longRunningClient, + initialCallableVarExpr) + .setReturnType( + TypeNode.withReference(ConcreteReference.withClazz(OperationCallable.class))) + .build(); // Add body and return statement to method - return method.toBuilder() + return method + .toBuilder() .setBody(createOperationCallableBody) .setReturnExpr(createOperationCallable) .build(); diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index 8b2c2e4635..fde186bb03 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -31,8 +31,8 @@ import com.google.api.generator.engine.ast.EnumRefExpr; import com.google.api.generator.engine.ast.Expr; import com.google.api.generator.engine.ast.ExprStatement; -import com.google.api.generator.engine.ast.LambdaExpr; import com.google.api.generator.engine.ast.IfStatement; +import com.google.api.generator.engine.ast.LambdaExpr; import com.google.api.generator.engine.ast.MethodDefinition; import com.google.api.generator.engine.ast.MethodInvocationExpr; import com.google.api.generator.engine.ast.NewObjectExpr; @@ -120,8 +120,14 @@ protected Statement createMethodDescriptorVariableDecl( methodMaker.apply("setRequestFormatter", getRequestFormatterExpr(protoMethod)).apply(expr); expr = methodMaker.apply("setResponseParser", setResponseParserExpr(protoMethod)).apply(expr); - expr = methodMaker.apply("setOperationSnapshotFactory", setOperationSnapshotFactoryExpr(protoMethod)).apply(expr); - expr = methodMaker.apply("setPollingRequestFactory", setPollingRequestFactoryExpr(protoMethod)).apply(expr); + expr = + methodMaker + .apply("setOperationSnapshotFactory", setOperationSnapshotFactoryExpr(protoMethod)) + .apply(expr); + expr = + methodMaker + .apply("setPollingRequestFactory", setPollingRequestFactoryExpr(protoMethod)) + .apply(expr); expr = MethodInvocationExpr.builder() @@ -369,10 +375,12 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { methodMaker = getMethodMaker(); // Generate input varibles for create() - VariableExpr requestVarExpr = VariableExpr.withVariable( - Variable.builder().setType(protoMethod.inputType()).setName("request").build()); - VariableExpr responseVarExpr = VariableExpr.withVariable( - Variable.builder().setType(protoMethod.outputType()).setName("response").build()); + VariableExpr requestVarExpr = + VariableExpr.withVariable( + Variable.builder().setType(protoMethod.inputType()).setName("request").build()); + VariableExpr responseVarExpr = + VariableExpr.withVariable( + Variable.builder().setType(protoMethod.outputType()).setName("response").build()); List createBody = new ArrayList(4); @@ -385,11 +393,10 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { MethodInvocationExpr getId = MethodInvocationExpr.builder() .setMethodName("getId") - .setExprReferenceExpr(responseVarExpr).build(); - Expr opNameObjectExpr = NewObjectExpr.builder() - .setType(stringBuilderType) - .setArguments(getId) - .build(); + .setExprReferenceExpr(responseVarExpr) + .build(); + Expr opNameObjectExpr = + NewObjectExpr.builder().setType(stringBuilderType).setArguments(getId).build(); AssignmentExpr opNameAssignExpr = AssignmentExpr.builder() .setVariableExpr(opNameVarExpr.toBuilder().setIsDecl(true).build()) @@ -398,101 +405,123 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { createBody.add(ExprStatement.withExpr(opNameAssignExpr)); // Generate changes opName - MethodInvocationExpr requestGetProjectExpr = MethodInvocationExpr.builder() - .setMethodName("getProject") - .setExprReferenceExpr(requestVarExpr) - .build(); + MethodInvocationExpr requestGetProjectExpr = + MethodInvocationExpr.builder() + .setMethodName("getProject") + .setExprReferenceExpr(requestVarExpr) + .build(); ValueExpr colonValueExpr = ValueExpr.builder().setValue(StringObjectValue.builder().setValue(":").build()).build(); - MethodInvocationExpr opNameAppendColonProjectExpr = MethodInvocationExpr.builder() - .setMethodName("append") - .setArguments(colonValueExpr) - .setExprReferenceExpr(opNameVarExpr) - .build(); - opNameAppendColonProjectExpr = methodMaker.apply( - "append", Collections.singletonList(requestGetProjectExpr)) - .apply(opNameAppendColonProjectExpr); + MethodInvocationExpr opNameAppendColonProjectExpr = + MethodInvocationExpr.builder() + .setMethodName("append") + .setArguments(colonValueExpr) + .setExprReferenceExpr(opNameVarExpr) + .build(); + opNameAppendColonProjectExpr = + methodMaker + .apply("append", Collections.singletonList(requestGetProjectExpr)) + .apply(opNameAppendColonProjectExpr); createBody.add(ExprStatement.withExpr(opNameAppendColonProjectExpr)); // Generate changes to opName - MethodInvocationExpr requestGetRegionExpr = MethodInvocationExpr.builder() - .setMethodName("getRegion") - .setExprReferenceExpr(requestVarExpr) - .build(); - MethodInvocationExpr opNameAppendColonRegionExpr = MethodInvocationExpr.builder() - .setMethodName("append") - .setArguments(colonValueExpr) - .setExprReferenceExpr(opNameVarExpr) - .build(); - opNameAppendColonRegionExpr = methodMaker.apply( - "append", Collections.singletonList(requestGetRegionExpr)) - .apply(opNameAppendColonRegionExpr); + MethodInvocationExpr requestGetRegionExpr = + MethodInvocationExpr.builder() + .setMethodName("getRegion") + .setExprReferenceExpr(requestVarExpr) + .build(); + MethodInvocationExpr opNameAppendColonRegionExpr = + MethodInvocationExpr.builder() + .setMethodName("append") + .setArguments(colonValueExpr) + .setExprReferenceExpr(opNameVarExpr) + .build(); + opNameAppendColonRegionExpr = + methodMaker + .apply("append", Collections.singletonList(requestGetRegionExpr)) + .apply(opNameAppendColonRegionExpr); createBody.add(ExprStatement.withExpr(opNameAppendColonRegionExpr)); // Generate check status expression - MethodInvocationExpr getStatusExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(responseVarExpr) - .setMethodName("getStatus") - .build(); - TypeNode statusType = TypeNode.withReference( - VaporReference.builder() - .setName("Status") - .setPakkage("com.google.cloud.compute.v1") - .setIsStaticImport(false) - .build()); - VariableExpr statusDoneExpr = VariableExpr.builder() - .setVariable(Variable.builder().setName("DONE").setType(TypeNode.INT).build()) - .setStaticReferenceType(statusType) - .build(); - MethodInvocationExpr statusEqualsExpr = methodMaker.apply( - "equals", Collections.singletonList(statusDoneExpr)).apply(getStatusExpr); + MethodInvocationExpr getStatusExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getStatus") + .build(); + TypeNode statusType = + TypeNode.withReference( + VaporReference.builder() + .setName("Status") + .setPakkage("com.google.cloud.compute.v1") + .setIsStaticImport(false) + .build()); + VariableExpr statusDoneExpr = + VariableExpr.builder() + .setVariable(Variable.builder().setName("DONE").setType(TypeNode.INT).build()) + .setStaticReferenceType(statusType) + .build(); + MethodInvocationExpr statusEqualsExpr = + methodMaker.apply("equals", Collections.singletonList(statusDoneExpr)).apply(getStatusExpr); // Generate return statement TypeNode httpJsonOperationSnapshotType = TypeNode.withReference(ConcreteReference.withClazz(HttpJsonOperationSnapshot.class)); - MethodInvocationExpr newBuilderExpr = MethodInvocationExpr.builder() - .setStaticReferenceType(httpJsonOperationSnapshotType) - .setMethodName("newBuilder") - .build(); - MethodInvocationExpr opNameToStringExpr = MethodInvocationExpr.builder() - .setMethodName("toString") - .setExprReferenceExpr(opNameVarExpr) - .build(); - MethodInvocationExpr getHttpErrorStatusCodeExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(responseVarExpr) - .setMethodName("getHttpErrorStatusCode") - .build(); - MethodInvocationExpr getHttpErrorMessageExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(responseVarExpr) - .setMethodName("getHttpErrorMessage") - .build(); - newBuilderExpr = methodMaker.apply( - "setName", Collections.singletonList(opNameToStringExpr)).apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setMetadata", Collections.singletonList(responseVarExpr)).apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setDone", Collections.singletonList(statusEqualsExpr)).apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setResponse", Collections.singletonList(responseVarExpr)).apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setError", Arrays.asList( - getHttpErrorStatusCodeExpr, getHttpErrorMessageExpr)) - .apply(newBuilderExpr); - TypeNode operationSnapshotType = TypeNode.withReference( - ConcreteReference.builder().setClazz(OperationSnapshot.class).build()); - MethodInvocationExpr buildExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(newBuilderExpr) - .setMethodName("build") - .setReturnType(operationSnapshotType) - .build(); + MethodInvocationExpr newBuilderExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(httpJsonOperationSnapshotType) + .setMethodName("newBuilder") + .build(); + MethodInvocationExpr opNameToStringExpr = + MethodInvocationExpr.builder() + .setMethodName("toString") + .setExprReferenceExpr(opNameVarExpr) + .build(); + MethodInvocationExpr getHttpErrorStatusCodeExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getHttpErrorStatusCode") + .build(); + MethodInvocationExpr getHttpErrorMessageExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(responseVarExpr) + .setMethodName("getHttpErrorMessage") + .build(); + newBuilderExpr = + methodMaker + .apply("setName", Collections.singletonList(opNameToStringExpr)) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setMetadata", Collections.singletonList(responseVarExpr)) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setDone", Collections.singletonList(statusEqualsExpr)) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setResponse", Collections.singletonList(responseVarExpr)) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setError", Arrays.asList(getHttpErrorStatusCodeExpr, getHttpErrorMessageExpr)) + .apply(newBuilderExpr); + TypeNode operationSnapshotType = + TypeNode.withReference( + ConcreteReference.builder().setClazz(OperationSnapshot.class).build()); + MethodInvocationExpr buildExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderExpr) + .setMethodName("build") + .setReturnType(operationSnapshotType) + .build(); // Generate lambda anonymous class return Collections.singletonList( LambdaExpr.builder() .setArguments( requestVarExpr.toBuilder().setIsDecl(true).build(), - responseVarExpr.toBuilder().setIsDecl(true).build() - ) + responseVarExpr.toBuilder().setIsDecl(true).build()) .setBody(createBody) .setReturnExpr(buildExpr) .build()); @@ -506,68 +535,81 @@ private List setPollingRequestFactoryExpr(Method protoMethod) { List createBody = new ArrayList(1); // Generate input variables for create - VariableExpr compoundOperationIdVarExpr = VariableExpr.builder() - .setVariable( - Variable.builder().setType(TypeNode.STRING).setName("compoundOperationId").build()) - .build(); + VariableExpr compoundOperationIdVarExpr = + VariableExpr.builder() + .setVariable( + Variable.builder().setType(TypeNode.STRING).setName("compoundOperationId").build()) + .build(); // Generate idComponenets - TypeNode listStringType = TypeNode.withReference( - ConcreteReference.builder() - .setClazz(List.class) - .setGenerics(ConcreteReference.withClazz(String.class)) - .build()); - TypeNode arrayListStringType = TypeNode.withReference( - ConcreteReference.builder() - .setClazz(ArrayList.class) - .setGenerics(ConcreteReference.withClazz(String.class)) - .build()); + TypeNode listStringType = + TypeNode.withReference( + ConcreteReference.builder() + .setClazz(List.class) + .setGenerics(ConcreteReference.withClazz(String.class)) + .build()); + TypeNode arrayListStringType = + TypeNode.withReference( + ConcreteReference.builder() + .setClazz(ArrayList.class) + .setGenerics(ConcreteReference.withClazz(String.class)) + .build()); TypeNode arraysType = TypeNode.withReference(ConcreteReference.withClazz(Arrays.class)); - VariableExpr idComponentsVarExpr = VariableExpr.withVariable( - Variable.builder().setName("idComponents").setType(listStringType).build()); - MethodInvocationExpr compoundOperationIdSplitExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(compoundOperationIdVarExpr) - .setMethodName("split") - .setArguments(ValueExpr.withValue(StringObjectValue.withValue(":"))) - .setReturnType(arrayListStringType) - .build(); - MethodInvocationExpr asListExpr = MethodInvocationExpr.builder() - .setStaticReferenceType(arraysType) - .setMethodName("asList") - .setArguments(compoundOperationIdSplitExpr) - .setReturnType(arrayListStringType) - .build(); - AssignmentExpr idComponentsAssignExpr = AssignmentExpr.builder() - .setVariableExpr(idComponentsVarExpr.toBuilder().setIsDecl(true).build()) - .setValueExpr(asListExpr) - .build(); + VariableExpr idComponentsVarExpr = + VariableExpr.withVariable( + Variable.builder().setName("idComponents").setType(listStringType).build()); + MethodInvocationExpr compoundOperationIdSplitExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(compoundOperationIdVarExpr) + .setMethodName("split") + .setArguments(ValueExpr.withValue(StringObjectValue.withValue(":"))) + .setReturnType(arrayListStringType) + .build(); + MethodInvocationExpr asListExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(arraysType) + .setMethodName("asList") + .setArguments(compoundOperationIdSplitExpr) + .setReturnType(arrayListStringType) + .build(); + AssignmentExpr idComponentsAssignExpr = + AssignmentExpr.builder() + .setVariableExpr(idComponentsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(asListExpr) + .build(); createBody.add(ExprStatement.withExpr(idComponentsAssignExpr)); // Generate return statement - TypeNode getRegionOperationRequestType = TypeNode.withReference( - VaporReference.builder() - .setName("GetRegionOperationRequest") - .setPakkage("com.google.cloud.compute.v1") - .setIsStaticImport(false) - .build()); - MethodInvocationExpr newBuilderExpr = MethodInvocationExpr.builder() - .setStaticReferenceType(getRegionOperationRequestType) - .setMethodName("newBuilder") - .build(); - newBuilderExpr = methodMaker.apply( - "setOperation", Collections.singletonList(getExpr(idComponentsVarExpr, "0"))) - .apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setProject", Collections.singletonList(getExpr(idComponentsVarExpr, "1"))) - .apply(newBuilderExpr); - newBuilderExpr = methodMaker.apply( - "setRegion", Collections.singletonList(getExpr(idComponentsVarExpr, "2"))) - .apply(newBuilderExpr); - MethodInvocationExpr buildExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(newBuilderExpr) - .setMethodName("build") - .setReturnType(getRegionOperationRequestType) - .build(); + TypeNode getRegionOperationRequestType = + TypeNode.withReference( + VaporReference.builder() + .setName("GetRegionOperationRequest") + .setPakkage("com.google.cloud.compute.v1") + .setIsStaticImport(false) + .build()); + MethodInvocationExpr newBuilderExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(getRegionOperationRequestType) + .setMethodName("newBuilder") + .build(); + newBuilderExpr = + methodMaker + .apply("setOperation", Collections.singletonList(getExpr(idComponentsVarExpr, "0"))) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setProject", Collections.singletonList(getExpr(idComponentsVarExpr, "1"))) + .apply(newBuilderExpr); + newBuilderExpr = + methodMaker + .apply("setRegion", Collections.singletonList(getExpr(idComponentsVarExpr, "2"))) + .apply(newBuilderExpr); + MethodInvocationExpr buildExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderExpr) + .setMethodName("build") + .setReturnType(getRegionOperationRequestType) + .build(); // Return lambda anonymous class return Collections.singletonList( @@ -575,20 +617,19 @@ private List setPollingRequestFactoryExpr(Method protoMethod) { .setArguments(compoundOperationIdVarExpr.toBuilder().setIsDecl(true).build()) .setBody(createBody) .setReturnExpr(buildExpr) - .build() - ); + .build()); } // returns var.get(num); private MethodInvocationExpr getExpr(VariableExpr var, String num) { - return - MethodInvocationExpr.builder() - .setExprReferenceExpr(var) - .setMethodName("get") - .setArguments(ValueExpr.builder(). - setValue( - PrimitiveValue.builder().setValue(num).setType(TypeNode.INT).build()).build()) - .build(); + return MethodInvocationExpr.builder() + .setExprReferenceExpr(var) + .setMethodName("get") + .setArguments( + ValueExpr.builder() + .setValue(PrimitiveValue.builder().setValue(num).setType(TypeNode.INT).build()) + .build()) + .build(); } private Expr createFieldsExtractorClassInstance( From edbe1a42127994ae16b2c9e8ec3049d27266cb6d Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Tue, 17 Aug 2021 20:47:23 +0000 Subject: [PATCH 06/10] add annotation placement comments --- .../composer/rest/HttpJsonServiceStubClassComposer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index fde186bb03..73dd168060 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -385,6 +385,7 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { List createBody = new ArrayList(4); // Generate opName + // This will be replaced and edited based on annotations TypeNode stringBuilderType = TypeNode.withReference(ConcreteReference.withClazz(StringBuilder.class)); VariableExpr opNameVarExpr = @@ -405,6 +406,7 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { createBody.add(ExprStatement.withExpr(opNameAssignExpr)); // Generate changes opName + // This will be replaced and edited based on annotations MethodInvocationExpr requestGetProjectExpr = MethodInvocationExpr.builder() .setMethodName("getProject") @@ -443,6 +445,7 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { createBody.add(ExprStatement.withExpr(opNameAppendColonRegionExpr)); // Generate check status expression + // This will be replaced and edited based on annotations MethodInvocationExpr getStatusExpr = MethodInvocationExpr.builder() .setExprReferenceExpr(responseVarExpr) @@ -476,11 +479,13 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { .setMethodName("toString") .setExprReferenceExpr(opNameVarExpr) .build(); + // This will be replaced and edited based on annotations MethodInvocationExpr getHttpErrorStatusCodeExpr = MethodInvocationExpr.builder() .setExprReferenceExpr(responseVarExpr) .setMethodName("getHttpErrorStatusCode") .build(); + // This will be replaced and edited based on annotations MethodInvocationExpr getHttpErrorMessageExpr = MethodInvocationExpr.builder() .setExprReferenceExpr(responseVarExpr) @@ -580,6 +585,7 @@ private List setPollingRequestFactoryExpr(Method protoMethod) { createBody.add(ExprStatement.withExpr(idComponentsAssignExpr)); // Generate return statement + // This will be replaced and edited based on annotations TypeNode getRegionOperationRequestType = TypeNode.withReference( VaporReference.builder() From e1d5e83c0a0f4625af740bd97f17c13696a7e5c4 Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Fri, 20 Aug 2021 22:49:41 +0000 Subject: [PATCH 07/10] only add machinery to methods that return operation --- .../AbstractServiceStubClassComposer.java | 16 ++++--- ...onServiceCallableFactoryClassComposer.java | 19 ++++---- .../HttpJsonServiceStubClassComposer.java | 29 +++++++----- .../v1/stub/HttpJsonAddressesStub.java | 44 ------------------- 4 files changed, 39 insertions(+), 69 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java index 034c94c949..524f8f6361 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java @@ -52,6 +52,7 @@ import com.google.api.generator.gapic.model.GapicClass; import com.google.api.generator.gapic.model.GapicClass.Kind; import com.google.api.generator.gapic.model.GapicContext; +import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; @@ -159,12 +160,14 @@ public GapicClass generate(GapicContext context, Service service) { .setType(getTransportContext().stubCallableFactoryType()) .build())); + Map messageTypes = context.messages(); List classStatements = createClassStatements( service, protoMethodNameToDescriptorVarExprs, callableClassMemberVarExprs, - classMemberVarExprs); + classMemberVarExprs, + messageTypes); StubCommentComposer commentComposer = new StubCommentComposer(getTransportContext().transportName()); @@ -193,7 +196,7 @@ public GapicClass generate(GapicContext context, Service service) { } protected abstract Statement createMethodDescriptorVariableDecl( - Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr); + Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr, Map messageTypes); protected abstract List createOperationsStubGetterMethod( VariableExpr operationsStubVarExpr); @@ -212,10 +215,11 @@ protected List createClassStatements( Service service, Map protoMethodNameToDescriptorVarExprs, Map callableClassMemberVarExprs, - Map classMemberVarExprs) { + Map classMemberVarExprs, + Map messageTypes) { List classStatements = new ArrayList<>(); for (Statement statement : - createMethodDescriptorVariableDecls(service, protoMethodNameToDescriptorVarExprs)) { + createMethodDescriptorVariableDecls(service, protoMethodNameToDescriptorVarExprs, messageTypes)) { classStatements.add(statement); classStatements.add(EMPTY_LINE_STATEMENT); } @@ -228,12 +232,12 @@ protected List createClassStatements( } protected List createMethodDescriptorVariableDecls( - Service service, Map protoMethodNameToDescriptorVarExprs) { + Service service, Map protoMethodNameToDescriptorVarExprs, Map messageTypes) { return service.methods().stream() .map( m -> createMethodDescriptorVariableDecl( - service, m, protoMethodNameToDescriptorVarExprs.get(m.name()))) + service, m, protoMethodNameToDescriptorVarExprs.get(m.name()), messageTypes)) .collect(Collectors.toList()); } diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java index 212ff9e909..b1e2bd4531 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java @@ -122,7 +122,10 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { List createOperationCallableBody = new ArrayList(2); List arguments = method.arguments(); - + Variable httpJsonCallSettingsVar = arguments.get(0).variable(); + Variable callSettingsVar = arguments.get(1).variable(); + Variable clientContextVar = arguments.get(2).variable(); + Variable operationsStub = arguments.get(3).variable(); // Generate innerCallable VariableExpr innerCallableVarExpr = VariableExpr.builder() @@ -136,7 +139,7 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { .build(); MethodInvocationExpr getInitialCallSettingsExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(1).variable())) + .setExprReferenceExpr(VariableExpr.withVariable(callSettingsVar)) .setMethodName("getInitialCallSettings") .build(); MethodInvocationExpr createBaseUnaryCallableExpr = @@ -145,9 +148,9 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) .setMethodName("createBaseUnaryCallable") .setArguments( - VariableExpr.withVariable(arguments.get(0).variable()), + VariableExpr.withVariable(httpJsonCallSettingsVar), getInitialCallSettingsExpr, - VariableExpr.withVariable(arguments.get(2).variable())) + VariableExpr.withVariable(clientContextVar)) .setReturnType(TypeNode.withReference(ConcreteReference.withClazz(UnaryCallable.class))) .build(); AssignmentExpr innerCallableAssignExpr = @@ -170,7 +173,7 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { .build(); MethodInvocationExpr getMethodDescriptorExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(0).variable())) + .setExprReferenceExpr(VariableExpr.withVariable(httpJsonCallSettingsVar)) .setMethodName("getMethodDescriptor") .build(); MethodInvocationExpr getOperationSnapshotFactoryExpr = @@ -206,7 +209,7 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { // Generate return statement MethodInvocationExpr longRunningClient = MethodInvocationExpr.builder() - .setExprReferenceExpr(VariableExpr.withVariable(arguments.get(3).variable())) + .setExprReferenceExpr(VariableExpr.withVariable(operationsStub)) .setMethodName("longRunningClient") .build(); MethodInvocationExpr createOperationCallable = @@ -215,8 +218,8 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { TypeNode.withReference(ConcreteReference.withClazz(HttpJsonCallableFactory.class))) .setMethodName("createOperationCallable") .setArguments( - VariableExpr.withVariable(arguments.get(1).variable()), - VariableExpr.withVariable(arguments.get(2).variable()), + VariableExpr.withVariable(callSettingsVar), + VariableExpr.withVariable(clientContextVar), longRunningClient, initialCallableVarExpr) .setReturnType( diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index 73dd168060..1ad1c3b99f 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -48,10 +48,12 @@ import com.google.api.generator.gapic.composer.common.AbstractServiceStubClassComposer; import com.google.api.generator.gapic.composer.store.TypeStore; import com.google.api.generator.gapic.model.HttpBindings.HttpBinding; +import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.collect.ImmutableList; +import com.google.longrunning.Operation; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -95,7 +97,7 @@ private static TypeStore createStaticTypes() { @Override protected Statement createMethodDescriptorVariableDecl( - Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr) { + Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr, Map messageTypes) { MethodInvocationExpr expr = MethodInvocationExpr.builder() .setMethodName("newBuilder") @@ -120,14 +122,19 @@ protected Statement createMethodDescriptorVariableDecl( methodMaker.apply("setRequestFormatter", getRequestFormatterExpr(protoMethod)).apply(expr); expr = methodMaker.apply("setResponseParser", setResponseParserExpr(protoMethod)).apply(expr); - expr = - methodMaker - .apply("setOperationSnapshotFactory", setOperationSnapshotFactoryExpr(protoMethod)) - .apply(expr); - expr = - methodMaker - .apply("setPollingRequestFactory", setPollingRequestFactoryExpr(protoMethod)) - .apply(expr); + //System.out.println(protoMethod.outputType().reference().simpleName()); + if(protoMethod.outputType().reference().simpleName().equals("Operation")) { + expr = + methodMaker + .apply("setOperationSnapshotFactory", + setOperationSnapshotFactoryExpr(protoMethod, messageTypes)) + .apply(expr); + expr = + methodMaker + .apply("setPollingRequestFactory", + setPollingRequestFactoryExpr(protoMethod, messageTypes)) + .apply(expr); + } expr = MethodInvocationExpr.builder() @@ -369,7 +376,7 @@ private List setResponseParserExpr(Method protoMethod) { return Collections.singletonList(expr); } - private List setOperationSnapshotFactoryExpr(Method protoMethod) { + private List setOperationSnapshotFactoryExpr(Method protoMethod, Map messageTypes) { BiFunction, Function> methodMaker = getMethodMaker(); @@ -532,7 +539,7 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod) { .build()); } - private List setPollingRequestFactoryExpr(Method protoMethod) { + private List setPollingRequestFactoryExpr(Method protoMethod, Map messageTypes) { BiFunction, Function> methodMaker = getMethodMaker(); diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java index 8a820610be..e2d4a26060 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java @@ -107,28 +107,6 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(AddressAggregatedList.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (AggregatedListAddressesRequest request, AddressAggregatedList response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor deleteMethodDescriptor = @@ -286,28 +264,6 @@ public class HttpJsonAddressesStub extends AddressesStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(AddressList.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (ListAddressesRequest request, AddressList response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private final UnaryCallable From 703c123660edd0ad396e3011a478d3851c5402dc Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Fri, 20 Aug 2021 22:59:00 +0000 Subject: [PATCH 08/10] add grpc file that contained method that was edited on abstract class --- .../gapic/composer/grpc/GrpcServiceStubClassComposer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java index f079aba780..97febd3ce3 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java @@ -34,6 +34,7 @@ import com.google.api.generator.gapic.composer.common.AbstractServiceStubClassComposer; import com.google.api.generator.gapic.composer.store.TypeStore; import com.google.api.generator.gapic.model.HttpBindings.HttpBinding; +import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; @@ -85,7 +86,7 @@ private static TypeStore createStaticTypes() { @Override protected Statement createMethodDescriptorVariableDecl( - Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr) { + Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr, Map messageTypes) { MethodInvocationExpr methodDescriptorMaker = MethodInvocationExpr.builder() .setMethodName("newBuilder") From 67b42bde0acfd18c505176f19a3fd7607945eb2e Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Fri, 20 Aug 2021 23:19:42 +0000 Subject: [PATCH 09/10] update HttpJsonComplianceStub.golden --- .../goldens/HttpJsonComplianceStub.golden | 137 ------------------ 1 file changed, 137 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden index 5160861d8c..5324f21655 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden @@ -7,21 +7,16 @@ import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.core.BackgroundResourceAggregation; import com.google.api.gax.httpjson.ApiMethodDescriptor; import com.google.api.gax.httpjson.HttpJsonCallSettings; -import com.google.api.gax.httpjson.HttpJsonOperationSnapshot; import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; -import com.google.api.gax.longrunning.OperationSnapshot; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; -import com.google.cloud.compute.v1.GetRegionOperationRequest; -import com.google.cloud.compute.v1.Status; import com.google.showcase.v1beta1.RepeatRequest; import com.google.showcase.v1beta1.RepeatResponse; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,28 +64,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor @@ -125,28 +98,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor @@ -181,28 +132,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor @@ -249,28 +178,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor @@ -315,28 +222,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private static final ApiMethodDescriptor @@ -378,28 +263,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { ProtoMessageResponseParser.newBuilder() .setDefaultInstance(RepeatResponse.getDefaultInstance()) .build()) - .setOperationSnapshotFactory( - (RepeatRequest request, RepeatResponse response) -> { - StringBuilder opName = new StringBuilder(response.getId()); - opName.append(":").append(request.getProject()); - opName.append(":").append(request.getRegion()); - return HttpJsonOperationSnapshot.newBuilder() - .setName(opName.toString()) - .setMetadata(response) - .setDone(response.getStatus().equals(Status.DONE)) - .setResponse(response) - .setError(response.getHttpErrorStatusCode(), response.getHttpErrorMessage()) - .build(); - }) - .setPollingRequestFactory( - compoundOperationId -> { - List idComponents = Arrays.asList(compoundOperationId.split(":")); - return GetRegionOperationRequest.newBuilder() - .setOperation(idComponents.get(0)) - .setProject(idComponents.get(1)) - .setRegion(idComponents.get(2)) - .build(); - }) .build(); private final UnaryCallable repeatDataBodyCallable; From 703fc379a587fc1dda778ca73acbdfb580646c1d Mon Sep 17 00:00:00 2001 From: GabrielGonzalezDiaz Date: Fri, 20 Aug 2021 23:28:56 +0000 Subject: [PATCH 10/10] java format --- .../grpc/GrpcServiceStubClassComposer.java | 5 ++++- ...onServiceCallableFactoryClassComposer.java | 2 +- .../HttpJsonServiceStubClassComposer.java | 22 ++++++++++++------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java index 97febd3ce3..3fc25a95b2 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java @@ -86,7 +86,10 @@ private static TypeStore createStaticTypes() { @Override protected Statement createMethodDescriptorVariableDecl( - Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr, Map messageTypes) { + Service service, + Method protoMethod, + VariableExpr methodDescriptorVarExpr, + Map messageTypes) { MethodInvocationExpr methodDescriptorMaker = MethodInvocationExpr.builder() .setMethodName("newBuilder") diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java index b1e2bd4531..191c1d15fa 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceCallableFactoryClassComposer.java @@ -124,7 +124,7 @@ protected MethodDefinition createOperationCallableMethod(TypeStore typeStore) { List arguments = method.arguments(); Variable httpJsonCallSettingsVar = arguments.get(0).variable(); Variable callSettingsVar = arguments.get(1).variable(); - Variable clientContextVar = arguments.get(2).variable(); + Variable clientContextVar = arguments.get(2).variable(); Variable operationsStub = arguments.get(3).variable(); // Generate innerCallable VariableExpr innerCallableVarExpr = diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index 1ad1c3b99f..66fdfb2b4e 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -53,7 +53,6 @@ import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.collect.ImmutableList; -import com.google.longrunning.Operation; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -97,7 +96,10 @@ private static TypeStore createStaticTypes() { @Override protected Statement createMethodDescriptorVariableDecl( - Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr, Map messageTypes) { + Service service, + Method protoMethod, + VariableExpr methodDescriptorVarExpr, + Map messageTypes) { MethodInvocationExpr expr = MethodInvocationExpr.builder() .setMethodName("newBuilder") @@ -122,16 +124,18 @@ protected Statement createMethodDescriptorVariableDecl( methodMaker.apply("setRequestFormatter", getRequestFormatterExpr(protoMethod)).apply(expr); expr = methodMaker.apply("setResponseParser", setResponseParserExpr(protoMethod)).apply(expr); - //System.out.println(protoMethod.outputType().reference().simpleName()); - if(protoMethod.outputType().reference().simpleName().equals("Operation")) { + // System.out.println(protoMethod.outputType().reference().simpleName()); + if (protoMethod.outputType().reference().simpleName().equals("Operation")) { expr = methodMaker - .apply("setOperationSnapshotFactory", + .apply( + "setOperationSnapshotFactory", setOperationSnapshotFactoryExpr(protoMethod, messageTypes)) .apply(expr); expr = methodMaker - .apply("setPollingRequestFactory", + .apply( + "setPollingRequestFactory", setPollingRequestFactoryExpr(protoMethod, messageTypes)) .apply(expr); } @@ -376,7 +380,8 @@ private List setResponseParserExpr(Method protoMethod) { return Collections.singletonList(expr); } - private List setOperationSnapshotFactoryExpr(Method protoMethod, Map messageTypes) { + private List setOperationSnapshotFactoryExpr( + Method protoMethod, Map messageTypes) { BiFunction, Function> methodMaker = getMethodMaker(); @@ -539,7 +544,8 @@ private List setOperationSnapshotFactoryExpr(Method protoMethod, Map setPollingRequestFactoryExpr(Method protoMethod, Map messageTypes) { + private List setPollingRequestFactoryExpr( + Method protoMethod, Map messageTypes) { BiFunction, Function> methodMaker = getMethodMaker();