Skip to content

Commit 37497db

Browse files
committed
Implement default unary rpc sample code
1 parent 8c42a62 commit 37497db

File tree

9 files changed

+358
-61
lines changed

9 files changed

+358
-61
lines changed

src/main/java/com/google/api/generator/gapic/composer/SampleCodeHelperComposer.java

Lines changed: 101 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.google.api.generator.gapic.model.ResourceName;
3232
import com.google.api.generator.gapic.utils.JavaStyle;
3333
import java.util.Arrays;
34+
import java.util.Collections;
3435
import java.util.List;
3536
import java.util.Map;
3637
import java.util.stream.Collectors;
@@ -47,7 +48,7 @@ public static TryCatchStatement composeRpcMethodSampleCode(
4748
Map<String, ResourceName> resourceNames) {
4849
// Default Unary RPC method.
4950
if (arguments.isEmpty()) {
50-
return composeUnaryRpcDefaultMethodSampleCode(method, clientType);
51+
return composeUnaryRpcDefaultMethodSampleCode(method, clientType, resourceNames);
5152
}
5253
// Paged Unary RPC method.
5354
if (method.isPaged()) {
@@ -174,18 +175,78 @@ private static TryCatchStatement composePagedUnaryRpcMethodSampleCode(
174175
}
175176

176177
private static TryCatchStatement composeUnaryRpcDefaultMethodSampleCode(
177-
Method method, TypeNode clientType) {
178+
Method method, TypeNode clientType, Map<String, ResourceName> resourceNames) {
178179
// TODO(summerji): compose sample code for unary default rpc method.
179180
// TODO(summerji): Add unit tests.
180-
String content =
181-
String.format(
182-
"Note: Not Implement yet, placeholder for unary %s rpc method sample code.",
183-
(!method.hasLro() && !method.isPaged()
184-
? "default"
185-
: (method.hasLro() ? "lro default" : "paged default")));
181+
// If variant method signatures exists, use the first one.
182+
List<MethodArgument> arguments =
183+
!method.methodSignatures().isEmpty()
184+
? method.methodSignatures().get(0)
185+
: Collections.emptyList();
186+
// Assign each method arguments with default value.
187+
List<Statement> bodyStatements =
188+
arguments.stream()
189+
.map(
190+
methodArg ->
191+
ExprStatement.withExpr(
192+
assignMethodArgumentWithDefaultValue(methodArg, resourceNames)))
193+
.collect(Collectors.toList());
194+
// Assign request variables with set argument attributes.
195+
// e.g EchoRequest
196+
bodyStatements.add(
197+
ExprStatement.withExpr(createRequestBuilderExpr(method.inputType(), arguments)));
198+
199+
if (method.isPaged()) {
200+
// For loop on invoke client method's iterator with comment.
201+
// e.g. for (EchoClient echoClient : echoClient.PagedExpand(request).iterateAll()) {//..}
202+
bodyStatements.add(
203+
ForStatement.builder()
204+
.setLocalVariableExpr(createVariableDeclExpr(getClientName(clientType), clientType))
205+
.setCollectionExpr(createIteratorAllMethodExpr(method, clientType, arguments))
206+
.setBody(Arrays.asList(createLineCommentStatement("doThingsWith(element);")))
207+
.build());
208+
} else if (method.hasLro()) {
209+
// Create response variable by invoke client's async method.
210+
// e.g Operation response = EchoClient.waitAsync(request).get();
211+
Expr getResponseMethodExpr =
212+
MethodInvocationExpr.builder()
213+
.setExprReferenceExpr(
214+
MethodInvocationExpr.builder()
215+
.setStaticReferenceType(clientType)
216+
.setMethodName(getLroMethodName(method.name()))
217+
.setArguments(
218+
Arrays.asList(createVariableExpr(REQUEST_VAR_NAME, method.inputType())))
219+
.build())
220+
.setMethodName("get")
221+
.setReturnType(method.outputType())
222+
.build();
223+
bodyStatements.add(
224+
ExprStatement.withExpr(
225+
AssignmentExpr.builder()
226+
.setVariableExpr(createVariableDeclExpr(RESPONSE_VAR_NAME, method.outputType()))
227+
.setValueExpr(getResponseMethodExpr)
228+
.build()));
229+
} else {
230+
// Create response variable by invoke client's method by passing request.
231+
// e.g. EchoResponse response = echoClient.Echo(request);
232+
Expr invokeMethodExpr =
233+
MethodInvocationExpr.builder()
234+
.setExprReferenceExpr(createVariableExpr(getClientName(clientType), clientType))
235+
.setMethodName(method.name())
236+
.setArguments(createVariableExpr("request", method.inputType()))
237+
.setReturnType(method.outputType())
238+
.build();
239+
bodyStatements.add(
240+
ExprStatement.withExpr(
241+
AssignmentExpr.builder()
242+
.setVariableExpr(createVariableDeclExpr(RESPONSE_VAR_NAME, method.outputType()))
243+
.setValueExpr(invokeMethodExpr)
244+
.build()));
245+
}
246+
186247
return TryCatchStatement.builder()
187248
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientType))
188-
.setTryBody(Arrays.asList(createLineCommentStatement(content)))
249+
.setTryBody(bodyStatements)
189250
.setIsSampleCode(true)
190251
.build();
191252
}
@@ -206,6 +267,37 @@ private static AssignmentExpr assignClientVariableWithCreateMethodExpr(TypeNode
206267
.build();
207268
}
208269

270+
// Create request variable by set attributes.
271+
// e.g. EchoRequest request = EchoRequest.newBuilder().setParent(parent).build();
272+
private static Expr createRequestBuilderExpr(
273+
TypeNode requestType, List<MethodArgument> arguments) {
274+
MethodInvocationExpr newBuilderExpr =
275+
MethodInvocationExpr.builder()
276+
.setStaticReferenceType(requestType)
277+
.setMethodName("newBuilder")
278+
.build();
279+
for (MethodArgument arg : arguments) {
280+
newBuilderExpr =
281+
MethodInvocationExpr.builder()
282+
.setExprReferenceExpr(newBuilderExpr)
283+
.setMethodName(String.format("set%s", JavaStyle.toUpperCamelCase(arg.name())))
284+
.setArguments(
285+
VariableExpr.withVariable(
286+
Variable.builder().setName(arg.name()).setType(arg.type()).build()))
287+
.build();
288+
}
289+
MethodInvocationExpr requestBuildExpr =
290+
MethodInvocationExpr.builder()
291+
.setExprReferenceExpr(newBuilderExpr)
292+
.setMethodName("build")
293+
.setReturnType(requestType)
294+
.build();
295+
return AssignmentExpr.builder()
296+
.setVariableExpr(createVariableDeclExpr("request", requestType))
297+
.setValueExpr(requestBuildExpr)
298+
.build();
299+
}
300+
209301
private static Expr assignMethodArgumentWithDefaultValue(
210302
MethodArgument argument, Map<String, ResourceName> resourceNames) {
211303
return AssignmentExpr.builder()

src/main/java/com/google/api/generator/gapic/composer/ServiceClientSampleCodeComposer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
public class ServiceClientSampleCodeComposer {
4242
// TODO(summerji): Add unit tests for ServiceClientSampleCodeComposer.
43+
// TODO(summerji): Refactor signatures as sample code context.
4344

4445
public static String composeClassHeaderCredentialsSampleCode(
4546
TypeNode clientType, TypeNode settingsType) {

src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,9 @@ public class EchoClient implements BackgroundResource {
287287
*
288288
* <pre>{@code
289289
* try (EchoClient echoClient = EchoClient.create()) {
290-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
290+
* ResourceName parent = FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]");
291+
* EchoRequest request = EchoRequest.newBuilder().setParent(parent).build();
292+
* EchoResponse response = echoClient.Echo(request);
291293
* }
292294
* }</pre>
293295
*
@@ -334,7 +336,10 @@ public class EchoClient implements BackgroundResource {
334336
*
335337
* <pre>{@code
336338
* try (EchoClient echoClient = EchoClient.create()) {
337-
* // Note: Not Implement yet, placeholder for unary paged default rpc method sample code.
339+
* PagedExpandRequest request = PagedExpandRequest.newBuilder().build();
340+
* for (EchoClient echoClient : echoClient.PagedExpand(request).iterateAll()) {
341+
* // doThingsWith(element);
342+
* }
338343
* }
339344
* }</pre>
340345
*
@@ -402,7 +407,9 @@ public class EchoClient implements BackgroundResource {
402407
*
403408
* <pre>{@code
404409
* try (EchoClient echoClient = EchoClient.create()) {
405-
* // Note: Not Implement yet, placeholder for unary lro default rpc method sample code.
410+
* Duration ttl = Duration.newBuilder().build();
411+
* WaitRequest request = WaitRequest.newBuilder().setTtl(ttl).build();
412+
* Operation response = EchoClient.waitAsync(request).get();
406413
* }
407414
* }</pre>
408415
*
@@ -431,7 +438,8 @@ public class EchoClient implements BackgroundResource {
431438
*
432439
* <pre>{@code
433440
* try (EchoClient echoClient = EchoClient.create()) {
434-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
441+
* BlockRequest request = BlockRequest.newBuilder().build();
442+
* BlockResponse response = echoClient.Block(request);
435443
* }
436444
* }</pre>
437445
*

src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,16 @@ public class IdentityClient implements BackgroundResource {
204204
*
205205
* <pre>{@code
206206
* try (IdentityClient identityClient = IdentityClient.create()) {
207-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
207+
* String parent = "parent-995424086";
208+
* String display_name = "display_name1615086568";
209+
* String email = "email96619420";
210+
* CreateUserRequest request =
211+
* CreateUserRequest.newBuilder()
212+
* .setParent(parent)
213+
* .setDisplayName(display_name)
214+
* .setEmail(email)
215+
* .build();
216+
* User response = identityClient.CreateUser(request);
208217
* }
209218
* }</pre>
210219
*
@@ -266,7 +275,9 @@ public class IdentityClient implements BackgroundResource {
266275
*
267276
* <pre>{@code
268277
* try (IdentityClient identityClient = IdentityClient.create()) {
269-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
278+
* UserName name = UserName.of("[USER]");
279+
* GetUserRequest request = GetUserRequest.newBuilder().setName(name).build();
280+
* User response = identityClient.GetUser(request);
270281
* }
271282
* }</pre>
272283
*
@@ -289,7 +300,8 @@ public class IdentityClient implements BackgroundResource {
289300
*
290301
* <pre>{@code
291302
* try (IdentityClient identityClient = IdentityClient.create()) {
292-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
303+
* UpdateUserRequest request = UpdateUserRequest.newBuilder().build();
304+
* User response = identityClient.UpdateUser(request);
293305
* }
294306
* }</pre>
295307
*
@@ -353,7 +365,9 @@ public class IdentityClient implements BackgroundResource {
353365
*
354366
* <pre>{@code
355367
* try (IdentityClient identityClient = IdentityClient.create()) {
356-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
368+
* UserName name = UserName.of("[USER]");
369+
* DeleteUserRequest request = DeleteUserRequest.newBuilder().setName(name).build();
370+
* Empty response = identityClient.DeleteUser(request);
357371
* }
358372
* }</pre>
359373
*
@@ -376,7 +390,10 @@ public class IdentityClient implements BackgroundResource {
376390
*
377391
* <pre>{@code
378392
* try (IdentityClient identityClient = IdentityClient.create()) {
379-
* // Note: Not Implement yet, placeholder for unary paged default rpc method sample code.
393+
* ListUsersRequest request = ListUsersRequest.newBuilder().build();
394+
* for (IdentityClient identityClient : identityClient.ListUsers(request).iterateAll()) {
395+
* // doThingsWith(element);
396+
* }
380397
* }
381398
* }</pre>
382399
*

test/integration/goldens/asset/AssetServiceClient.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ public final OperationsClient getOperationsClient() {
170170
*
171171
* <pre>{@code
172172
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
173-
* // Note: Not Implement yet, placeholder for unary lro default rpc method sample code.
173+
* ExportAssetsRequest request = ExportAssetsRequest.newBuilder().build();
174+
* Operation response = AssetServiceClient.exportAssetsAsync(request).get();
174175
* }
175176
* }</pre>
176177
*
@@ -229,7 +230,8 @@ public final UnaryCallable<ExportAssetsRequest, Operation> exportAssetsCallable(
229230
*
230231
* <pre>{@code
231232
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
232-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
233+
* BatchGetAssetsHistoryRequest request = BatchGetAssetsHistoryRequest.newBuilder().build();
234+
* BatchGetAssetsHistoryResponse response = assetServiceClient.BatchGetAssetsHistory(request);
233235
* }
234236
* }</pre>
235237
*
@@ -288,7 +290,9 @@ public final Feed createFeed(String parent) {
288290
*
289291
* <pre>{@code
290292
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
291-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
293+
* String parent = "parent-995424086";
294+
* CreateFeedRequest request = CreateFeedRequest.newBuilder().setParent(parent).build();
295+
* Feed response = assetServiceClient.CreateFeed(request);
292296
* }
293297
* }</pre>
294298
*
@@ -364,7 +368,9 @@ public final Feed getFeed(String name) {
364368
*
365369
* <pre>{@code
366370
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
367-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
371+
* FeedName name = FeedName.ofProjectFeedName("[PROJECT]", "[FEED]");
372+
* GetFeedRequest request = GetFeedRequest.newBuilder().setName(name).build();
373+
* Feed response = assetServiceClient.GetFeed(request);
368374
* }
369375
* }</pre>
370376
*
@@ -416,7 +422,9 @@ public final ListFeedsResponse listFeeds(String parent) {
416422
*
417423
* <pre>{@code
418424
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
419-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
425+
* String parent = "parent-995424086";
426+
* ListFeedsRequest request = ListFeedsRequest.newBuilder().setParent(parent).build();
427+
* ListFeedsResponse response = assetServiceClient.ListFeeds(request);
420428
* }
421429
* }</pre>
422430
*
@@ -468,7 +476,9 @@ public final Feed updateFeed(Feed feed) {
468476
*
469477
* <pre>{@code
470478
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
471-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
479+
* Feed feed = Feed.newBuilder().build();
480+
* UpdateFeedRequest request = UpdateFeedRequest.newBuilder().setFeed(feed).build();
481+
* Feed response = assetServiceClient.UpdateFeed(request);
472482
* }
473483
* }</pre>
474484
*
@@ -546,7 +556,9 @@ public final Empty deleteFeed(String name) {
546556
*
547557
* <pre>{@code
548558
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
549-
* // Note: Not Implement yet, placeholder for unary default rpc method sample code.
559+
* FeedName name = FeedName.ofProjectFeedName("[PROJECT]", "[FEED]");
560+
* DeleteFeedRequest request = DeleteFeedRequest.newBuilder().setName(name).build();
561+
* Empty response = assetServiceClient.DeleteFeed(request);
550562
* }
551563
* }</pre>
552564
*
@@ -657,7 +669,19 @@ public final SearchAllResourcesPagedResponse searchAllResources(
657669
*
658670
* <pre>{@code
659671
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
660-
* // Note: Not Implement yet, placeholder for unary paged default rpc method sample code.
672+
* String scope = "scope109264468";
673+
* String query = "query107944136";
674+
* List<String> asset_types = new ArrayList<>();
675+
* SearchAllResourcesRequest request =
676+
* SearchAllResourcesRequest.newBuilder()
677+
* .setScope(scope)
678+
* .setQuery(query)
679+
* .setAssetTypes(asset_types)
680+
* .build();
681+
* for (AssetServiceClient assetServiceClient :
682+
* assetServiceClient.SearchAllResources(scope, query, asset_types).iterateAll()) {
683+
* // doThingsWith(element);
684+
* }
661685
* }
662686
* }</pre>
663687
*
@@ -768,7 +792,14 @@ public final SearchAllIamPoliciesPagedResponse searchAllIamPolicies(String scope
768792
*
769793
* <pre>{@code
770794
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
771-
* // Note: Not Implement yet, placeholder for unary paged default rpc method sample code.
795+
* String scope = "scope109264468";
796+
* String query = "query107944136";
797+
* SearchAllIamPoliciesRequest request =
798+
* SearchAllIamPoliciesRequest.newBuilder().setScope(scope).setQuery(query).build();
799+
* for (AssetServiceClient assetServiceClient :
800+
* assetServiceClient.SearchAllIamPolicies(scope, query).iterateAll()) {
801+
* // doThingsWith(element);
802+
* }
772803
* }
773804
* }</pre>
774805
*

0 commit comments

Comments
 (0)