From 2106766646d98d8fe18931e1803a3ea4ef35aff1 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 15:46:18 -0700 Subject: [PATCH] add pagedCallable getter in serviceStub --- .../composer/ServiceStubClassComposer.java | 41 +++++++++++++++++-- .../ServiceStubClassComposerTest.java | 8 ++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceStubClassComposer.java index cf849c947b..eefcb890b6 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceStubClassComposer.java @@ -48,6 +48,7 @@ public class ServiceStubClassComposer implements ClassComposer { private static final ServiceStubClassComposer INSTANCE = new ServiceStubClassComposer(); private static final String DOT = "."; + private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse"; private ServiceStubClassComposer() {} @@ -110,6 +111,9 @@ private static List createCallableGetters( if (method.hasLro()) { javaMethods.add(createOperationCallableGetter(method, types)); } + if (method.isPaged()) { + javaMethods.add(createPagedCallableGetter(method, types)); + } javaMethods.add(createCallableGetter(method, types)); } return javaMethods; @@ -117,15 +121,20 @@ private static List createCallableGetters( private static MethodDefinition createOperationCallableGetter( Method method, Map types) { - return createCallableGetterHelper(method, types, true); + return createCallableGetterHelper(method, types, true, false); + } + + private static MethodDefinition createPagedCallableGetter( + Method method, Map types) { + return createCallableGetterHelper(method, types, false, true); } private static MethodDefinition createCallableGetter(Method method, Map types) { - return createCallableGetterHelper(method, types, false); + return createCallableGetterHelper(method, types, false, false); } private static MethodDefinition createCallableGetterHelper( - Method method, Map types, boolean isLroCallable) { + Method method, Map types, boolean isLroCallable, boolean isPaged) { TypeNode returnType; switch (method.stream()) { case CLIENT: @@ -146,12 +155,16 @@ private static MethodDefinition createCallableGetterHelper( String methodName = String.format( "%s%sCallable", - JavaStyle.toLowerCamelCase(method.name()), (isLroCallable ? "Operation" : "")); + JavaStyle.toLowerCamelCase(method.name()), + (isLroCallable ? "Operation" : isPaged ? "Paged" : "")); List genericRefs = new ArrayList<>(); genericRefs.add(method.inputType().reference()); if (method.hasLro()) { genericRefs.add(method.lro().responseType().reference()); genericRefs.add(method.lro().metadataType().reference()); + } else if (isPaged) { + genericRefs.add( + types.get(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, method.name())).reference()); } else { genericRefs.add(method.outputType().reference()); } @@ -237,6 +250,22 @@ private static Map createTypes( .setName("OperationsStub") .setPakkage("com.google.longrunning.stub") .build())); + // Pagination types. + types.putAll( + service.methods().stream() + .filter(m -> m.isPaged()) + .collect( + Collectors.toMap( + m -> String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name()), + m -> + TypeNode.withReference( + VaporReference.builder() + .setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name())) + .setPakkage(service.pakkage()) + .setEnclosingClassName(getClientClassName(service.name())) + .setIsStaticImport(true) + .build())))); + return types; } @@ -249,4 +278,8 @@ private static List createThrowUOEBody( .setMessageExpr(String.format("Not implemented: %s()", methodName)) .build())); } + + private static String getClientClassName(String serviceName) { + return String.format("%sClient", serviceName); + } } diff --git a/src/test/java/com/google/api/generator/gapic/composer/ServiceStubClassComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/ServiceStubClassComposerTest.java index 8ce0fac92c..cd40a257e0 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/ServiceStubClassComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/ServiceStubClassComposerTest.java @@ -62,6 +62,8 @@ public void generateServiceClasses() { // TODO(miraleung): Update this when a file-diffing test mechanism is in place. private static final String EXPECTED_CLASS_STRING = "package com.google.showcase.v1beta1.stub;\n" + + "\n" + + "import static com.google.showcase.v1beta1.EchoClient.PagedExpandPagedResponse;\n" + "\n" + "import com.google.api.gax.core.BackgroundResource;\n" + "import com.google.api.gax.rpc.BidiStreamingCallable;\n" @@ -118,6 +120,12 @@ public void generateServiceClasses() { + " chatAgainCallable()\");\n" + " }\n" + "\n" + + " public UnaryCallable pagedExpandPagedCallable()" + + " {\n" + + " throw new UnsupportedOperationException(\"Not implemented:" + + " pagedExpandPagedCallable()\");\n" + + " }\n" + + "\n" + " public UnaryCallable pagedExpandCallable()" + " {\n" + " throw new UnsupportedOperationException(\"Not implemented:"