diff --git a/src/main/java/com/google/api/generator/gapic/composer/SampleCodeHelperComposer.java b/src/main/java/com/google/api/generator/gapic/composer/SampleCodeHelperComposer.java index b35fc836a5..449a385ba0 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/SampleCodeHelperComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/SampleCodeHelperComposer.java @@ -38,6 +38,7 @@ public final class SampleCodeHelperComposer { private static String RESPONSE_VAR_NAME = "response"; private static String REQUEST_VAR_NAME = "request"; + private static String ASYNC_NAME_PATTERN = "%sAsync"; public static TryCatchStatement composeRpcMethodSampleCode( Method method, @@ -54,7 +55,7 @@ public static TryCatchStatement composeRpcMethodSampleCode( } // Long-running operation Unary RPC method. if (method.hasLro()) { - return composeLroUnaryRpcMethodSampleCode(method, arguments, clientType); + return composeLroUnaryRpcMethodSampleCode(method, arguments, clientType, resourceNames); } // Pure Unary RPC method. return composeUnaryRpcMethodSampleCode(method, arguments, clientType, resourceNames); @@ -97,16 +98,40 @@ private static TryCatchStatement composeUnaryRpcMethodSampleCode( } private static TryCatchStatement composeLroUnaryRpcMethodSampleCode( - Method method, List arguments, TypeNode clientType) { + Method method, + List arguments, + TypeNode clientType, + Map resourceNames) { // TODO(summerji): compose sample code for unary lro rpc method. // TODO(summerji): Add unit tests. VariableExpr clientVarExpr = createVariableExpr(getClientName(clientType), clientType); + // Assign each method arguments with default value. + List bodyExprs = + arguments.stream() + .map(methodArg -> assignMethodArgumentWithDefaultValue(methodArg, resourceNames)) + .collect(Collectors.toList()); + // Assign response variable with get method. + // e.g EchoResponse response = echoClient.waitAsync().get(); + Expr getResponseMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr( + MethodInvocationExpr.builder() + .setExprReferenceExpr(clientVarExpr) + .setMethodName(getLroMethodName(method.name())) + .setArguments(mapMethodArgumentsToVariableExprs(arguments)) + .build()) + .setMethodName("get") + .setReturnType(method.outputType()) + .build(); + bodyExprs.add( + AssignmentExpr.builder() + .setVariableExpr(createVariableDeclExpr(RESPONSE_VAR_NAME, method.outputType())) + .setValueExpr(getResponseMethodExpr) + .build()); return TryCatchStatement.builder() .setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr)) .setTryBody( - Arrays.asList( - createLineCommentStatement( - "Note: Not implemented yet, placeholder for lro Unary rpc method sample code."))) + bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList())) .setIsSampleCode(true) .build(); } @@ -128,8 +153,8 @@ private static TryCatchStatement composePagedUnaryRpcMethodSampleCode( .collect(Collectors.toList()); // For loop client on iterateAll method. // e.g. for (LoggingServiceV2Client loggingServiceV2Client : - // loggingServiceV2Client.ListLogs(parent).iterateAll()) { - // //doThingsWith(element); + // loggingServiceV2Client.ListLogs(parent).iterateAll()) { + // //doThingsWith(element); // } bodyStatements.add( ForStatement.builder() @@ -235,6 +260,10 @@ private static String getClientName(TypeNode clientType) { return JavaStyle.toLowerCamelCase(clientType.reference().name()); } + private static String getLroMethodName(String methodName) { + return JavaStyle.toLowerCamelCase(String.format(ASYNC_NAME_PATTERN, methodName)); + } + private static CommentStatement createLineCommentStatement(String content) { return CommentStatement.withComment(LineComment.withComment(content)); } @@ -250,8 +279,12 @@ private static VariableExpr createVariableDeclExpr(String variableName, TypeNode private static VariableExpr createVariableExpr( String variableName, TypeNode type, boolean isDecl) { return VariableExpr.builder() - .setVariable(Variable.builder().setName(variableName).setType(type).build()) + .setVariable(createVariable(variableName, type)) .setIsDecl(isDecl) .build(); } + + private static Variable createVariable(String varName, TypeNode type) { + return Variable.builder().setName(varName).setType(type).build(); + } } diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden index 34bf7354dd..ef45465448 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden @@ -364,7 +364,8 @@ public class EchoClient implements BackgroundResource { * *
{@code
    * try (EchoClient echoClient = EchoClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   Duration ttl = Duration.newBuilder().build();
+   *   Operation response = echoClient.waitAsync(ttl).get();
    * }
    * }
* @@ -382,7 +383,8 @@ public class EchoClient implements BackgroundResource { * *
{@code
    * try (EchoClient echoClient = EchoClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   Timestamp end_time = Timestamp.newBuilder().build();
+   *   Operation response = echoClient.waitAsync(end_time).get();
    * }
    * }
* diff --git a/test/integration/goldens/redis/CloudRedisClient.java b/test/integration/goldens/redis/CloudRedisClient.java index 59fc10f8c4..3bc1f57628 100644 --- a/test/integration/goldens/redis/CloudRedisClient.java +++ b/test/integration/goldens/redis/CloudRedisClient.java @@ -414,7 +414,11 @@ public final UnaryCallable getInstanceCallable() { * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   LocationName parent = LocationName.of("[PROJECT]", "[LOCATION]");
+   *   String instance_id = "instance_id-2101995259";
+   *   Instance instance = Instance.newBuilder().build();
+   *   Operation response =
+   *       cloudRedisClient.createInstanceAsync(parent, instance_id, instance).get();
    * }
    * }
* @@ -463,7 +467,11 @@ public final OperationFuture createInstanceAsync( * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String parent = "parent-995424086";
+   *   String instance_id = "instance_id-2101995259";
+   *   Instance instance = Instance.newBuilder().build();
+   *   Operation response =
+   *       cloudRedisClient.createInstanceAsync(parent, instance_id, instance).get();
    * }
    * }
* @@ -579,7 +587,9 @@ public final UnaryCallable createInstanceCalla * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   FieldMask update_mask = FieldMask.newBuilder().build();
+   *   Instance instance = Instance.newBuilder().build();
+   *   Operation response = cloudRedisClient.updateInstanceAsync(update_mask, instance).get();
    * }
    * }
* @@ -658,7 +668,9 @@ public final UnaryCallable updateInstanceCalla * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+   *   String redis_version = "redis_version-685310444";
+   *   Operation response = cloudRedisClient.upgradeInstanceAsync(name, redis_version).get();
    * }
    * }
* @@ -686,7 +698,9 @@ public final OperationFuture upgradeInstanceAsync( * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String name = "name3373707";
+   *   String redis_version = "redis_version-685310444";
+   *   Operation response = cloudRedisClient.upgradeInstanceAsync(name, redis_version).get();
    * }
    * }
* @@ -758,7 +772,9 @@ public final UnaryCallable upgradeInstanceCal * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String name = "name3373707";
+   *   InputConfig input_config = InputConfig.newBuilder().build();
+   *   Operation response = cloudRedisClient.importInstanceAsync(name, input_config).get();
    * }
    * }
* @@ -847,7 +863,9 @@ public final UnaryCallable importInstanceCalla * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String name = "name3373707";
+   *   OutputConfig output_config = OutputConfig.newBuilder().build();
+   *   Operation response = cloudRedisClient.exportInstanceAsync(name, output_config).get();
    * }
    * }
* @@ -929,7 +947,10 @@ public final UnaryCallable exportInstanceCalla * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+   *   FailoverInstanceRequest.DataProtectionMode data_protection_mode =
+   *       FailoverInstanceRequest.DataProtectionMode.forNumber(0);
+   *   Operation response = cloudRedisClient.failoverInstanceAsync(name, data_protection_mode).get();
    * }
    * }
* @@ -959,7 +980,10 @@ public final OperationFuture failoverInstanceAsync( * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String name = "name3373707";
+   *   FailoverInstanceRequest.DataProtectionMode data_protection_mode =
+   *       FailoverInstanceRequest.DataProtectionMode.forNumber(0);
+   *   Operation response = cloudRedisClient.failoverInstanceAsync(name, data_protection_mode).get();
    * }
    * }
* @@ -1032,7 +1056,8 @@ public final UnaryCallable failoverInstanceC * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+   *   Operation response = cloudRedisClient.deleteInstanceAsync(name).get();
    * }
    * }
* @@ -1057,7 +1082,8 @@ public final OperationFuture deleteInstanceAsync(Insta * *
{@code
    * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
-   *   // Note: Not implemented yet, placeholder for lro Unary rpc method sample code.
+   *   String name = "name3373707";
+   *   Operation response = cloudRedisClient.deleteInstanceAsync(name).get();
    * }
    * }
*