Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e6dae3f

Browse files
committed
[samplecode] Implement rpc default method sample code (#594)
1 parent ca5cdd4 commit e6dae3f

File tree

10 files changed

+1539
-393
lines changed

10 files changed

+1539
-393
lines changed

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

Lines changed: 132 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
import com.google.api.generator.gapic.model.MethodArgument;
3737
import com.google.api.generator.gapic.model.ResourceName;
3838
import com.google.api.generator.gapic.utils.JavaStyle;
39-
import com.google.common.annotations.VisibleForTesting;
4039
import com.google.common.base.Preconditions;
40+
import java.util.ArrayList;
4141
import java.util.Arrays;
4242
import java.util.List;
4343
import java.util.Map;
@@ -192,121 +192,166 @@ public static String composeRpcMethodHeaderSampleCode(
192192
List<MethodArgument> arguments,
193193
Map<String, ResourceName> resourceNames,
194194
Map<String, Message> messageTypes) {
195-
// TODO(summerji): Add other types RPC methods' sample code.
195+
VariableExpr clientVarExpr =
196+
VariableExpr.withVariable(
197+
Variable.builder()
198+
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
199+
.setType(clientType)
200+
.build());
201+
202+
// Assign method's arguments variable with the default values.
203+
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
204+
List<Expr> rpcMethodArgDefaultValueExprs =
205+
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
206+
List<Expr> rpcMethodArgAssignmentExprs =
207+
createAssignmentsForVarExprsWithValueExprs(
208+
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
209+
210+
List<Expr> bodyExprs = new ArrayList<>();
211+
bodyExprs.addAll(rpcMethodArgAssignmentExprs);
212+
213+
List<Statement> bodyStatements = new ArrayList<>();
196214
if (method.isPaged()) {
197-
// Find the repeated field.
198-
Message methodOutputMessage = messageTypes.get(method.outputType().reference().simpleName());
199-
Field repeatedPagedResultsField = methodOutputMessage.findAndUnwrapFirstRepeatedField();
200-
Preconditions.checkNotNull(
201-
repeatedPagedResultsField,
202-
String.format(
203-
"No repeated field found on message %s for method %s",
204-
methodOutputMessage.name(), method.name()));
205-
206-
TypeNode repeatedResponseType = repeatedPagedResultsField.type();
207-
return SampleCodeWriter.write(
208-
composeUnaryPagedRpcMethodSampleCode(
209-
method, clientType, repeatedResponseType, arguments, resourceNames));
210-
}
211-
if (method.hasLro()) {
212-
return SampleCodeWriter.write(
213-
composeUnaryLroRpcMethodSampleCode(method, clientType, arguments, resourceNames));
215+
bodyStatements.addAll(
216+
composeUnaryPagedRpcMethodSampleCodeBodyStatements(
217+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs, messageTypes));
218+
} else if (method.hasLro()) {
219+
bodyStatements.addAll(
220+
composeUnaryLroRpcMethodSampleCodeBodyStatements(
221+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs));
222+
} else {
223+
bodyStatements.addAll(
224+
composeUnaryRpcMethodSampleCodeBodyStatements(
225+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs));
214226
}
227+
215228
return SampleCodeWriter.write(
216-
composeUnaryRpcMethodSampleCode(method, clientType, arguments, resourceNames));
229+
TryCatchStatement.builder()
230+
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr))
231+
.setTryBody(bodyStatements)
232+
.setIsSampleCode(true)
233+
.build());
217234
}
218235

219-
@VisibleForTesting
220-
static TryCatchStatement composeUnaryRpcMethodSampleCode(
236+
public static String composeRpcDefaultMethodHeaderSampleCode(
221237
Method method,
222238
TypeNode clientType,
223-
List<MethodArgument> arguments,
224-
Map<String, ResourceName> resourceNames) {
239+
Map<String, ResourceName> resourceNames,
240+
Map<String, Message> messageTypes) {
225241
VariableExpr clientVarExpr =
226242
VariableExpr.withVariable(
227243
Variable.builder()
228244
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
229245
.setType(clientType)
230246
.build());
231-
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
232-
List<Expr> rpcMethodArgDefaultValueExprs =
233-
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
234-
List<Expr> bodyExprs =
235-
createAssignmentsForVarExprsWithValueExprs(
236-
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
247+
248+
// Create request variable expression and assign with its default value.
249+
VariableExpr requestVarExpr =
250+
VariableExpr.withVariable(
251+
Variable.builder().setName("request").setType(method.inputType()).build());
252+
List<VariableExpr> rpcMethodArgVarExprs = Arrays.asList(requestVarExpr);
253+
Message requestMessage = messageTypes.get(method.inputType().reference().simpleName());
254+
Preconditions.checkNotNull(requestMessage);
255+
Expr requestBuilderExpr =
256+
DefaultValueComposer.createSimpleMessageBuilderExpr(
257+
requestMessage, resourceNames, messageTypes);
258+
AssignmentExpr requestAssignmentExpr =
259+
AssignmentExpr.builder()
260+
.setVariableExpr(requestVarExpr.toBuilder().setIsDecl(true).build())
261+
.setValueExpr(requestBuilderExpr)
262+
.build();
263+
264+
List<Expr> bodyExprs = new ArrayList<>();
265+
bodyExprs.add(requestAssignmentExpr);
266+
267+
List<Statement> bodyStatements = new ArrayList<>();
268+
if (method.isPaged()) {
269+
bodyStatements.addAll(
270+
composeUnaryPagedRpcMethodSampleCodeBodyStatements(
271+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs, messageTypes));
272+
} else if (method.hasLro()) {
273+
bodyStatements.addAll(
274+
composeUnaryLroRpcMethodSampleCodeBodyStatements(
275+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs));
276+
} else {
277+
bodyStatements.addAll(
278+
composeUnaryRpcMethodSampleCodeBodyStatements(
279+
method, clientVarExpr, rpcMethodArgVarExprs, bodyExprs));
280+
}
281+
282+
return SampleCodeWriter.write(
283+
TryCatchStatement.builder()
284+
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr))
285+
.setTryBody(bodyStatements)
286+
.setIsSampleCode(true)
287+
.build());
288+
}
289+
290+
private static List<Statement> composeUnaryRpcMethodSampleCodeBodyStatements(
291+
Method method,
292+
VariableExpr clientVarExpr,
293+
List<VariableExpr> rpcMethodArgVarExprs,
294+
List<Expr> bodyExprs) {
295+
237296
// Invoke current method based on return type.
238297
// e.g. if return void, echoClient.echo(..); or,
239298
// e.g. if return other type, EchoResponse response = echoClient.echo(...);
240299
boolean returnsVoid = isProtoEmptyType(method.outputType());
300+
MethodInvocationExpr clientRpcMethodInvocationExpr =
301+
MethodInvocationExpr.builder()
302+
.setExprReferenceExpr(clientVarExpr)
303+
.setMethodName(JavaStyle.toLowerCamelCase(method.name()))
304+
.setArguments(
305+
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
306+
.setReturnType(method.outputType())
307+
.build();
241308
if (returnsVoid) {
242-
bodyExprs.add(
243-
MethodInvocationExpr.builder()
244-
.setExprReferenceExpr(clientVarExpr)
245-
.setMethodName(JavaStyle.toLowerCamelCase(method.name()))
246-
.setArguments(
247-
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
248-
.setReturnType(clientType)
249-
.build());
309+
bodyExprs.add(clientRpcMethodInvocationExpr);
250310
} else {
251311
VariableExpr responseVarExpr =
252312
VariableExpr.withVariable(
253313
Variable.builder().setName("response").setType(method.outputType()).build());
254-
MethodInvocationExpr clientMethodInvocationExpr =
255-
MethodInvocationExpr.builder()
256-
.setExprReferenceExpr(clientVarExpr)
257-
.setMethodName(JavaStyle.toLowerCamelCase(method.name()))
258-
.setArguments(
259-
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
260-
.setReturnType(responseVarExpr.variable().type())
261-
.build();
262314
bodyExprs.add(
263315
AssignmentExpr.builder()
264316
.setVariableExpr(responseVarExpr.toBuilder().setIsDecl(true).build())
265-
.setValueExpr(clientMethodInvocationExpr)
317+
.setValueExpr(clientRpcMethodInvocationExpr)
266318
.build());
267319
}
268320

269-
return TryCatchStatement.builder()
270-
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr))
271-
.setTryBody(
272-
bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
273-
.setIsSampleCode(true)
274-
.build();
321+
return bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList());
275322
}
276323

277-
@VisibleForTesting
278-
static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
324+
private static List<Statement> composeUnaryPagedRpcMethodSampleCodeBodyStatements(
279325
Method method,
280-
TypeNode clientType,
281-
TypeNode repeatedResponseType,
282-
List<MethodArgument> arguments,
283-
Map<String, ResourceName> resourceNames) {
284-
VariableExpr clientVarExpr =
285-
VariableExpr.withVariable(
286-
Variable.builder()
287-
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
288-
.setType(clientType)
289-
.build());
290-
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
291-
List<Expr> rpcMethodArgDefaultValueExprs =
292-
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
293-
List<Expr> bodyExprs =
294-
createAssignmentsForVarExprsWithValueExprs(
295-
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
326+
VariableExpr clientVarExpr,
327+
List<VariableExpr> rpcMethodArgVarExprs,
328+
List<Expr> bodyExprs,
329+
Map<String, Message> messageTypes) {
330+
331+
// Find the repeated field.
332+
Message methodOutputMessage = messageTypes.get(method.outputType().reference().simpleName());
333+
Field repeatedPagedResultsField = methodOutputMessage.findAndUnwrapFirstRepeatedField();
334+
Preconditions.checkNotNull(
335+
repeatedPagedResultsField,
336+
String.format(
337+
"No repeated field found on message %s for method %s",
338+
methodOutputMessage.name(), method.name()));
339+
TypeNode repeatedResponseType = repeatedPagedResultsField.type();
340+
296341
// For loop paged response item on iterateAll method.
297342
// e.g. for (LogEntry element : loggingServiceV2Client.ListLogs(parent).iterateAll()) {
298343
// //doThingsWith(element);
299344
// }
300-
MethodInvocationExpr clientMethodExpr =
345+
MethodInvocationExpr clientMethodIterateAllExpr =
301346
MethodInvocationExpr.builder()
302347
.setExprReferenceExpr(clientVarExpr)
303348
.setMethodName(JavaStyle.toLowerCamelCase(method.name()))
304349
.setArguments(
305350
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
306351
.build();
307-
Expr clientMethodIteratorAllExpr =
352+
clientMethodIterateAllExpr =
308353
MethodInvocationExpr.builder()
309-
.setExprReferenceExpr(clientMethodExpr)
354+
.setExprReferenceExpr(clientMethodIterateAllExpr)
310355
.setMethodName("iterateAll")
311356
.setReturnType(repeatedResponseType)
312357
.build();
@@ -318,7 +363,7 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
318363
Variable.builder().setName("element").setType(repeatedResponseType).build())
319364
.setIsDecl(true)
320365
.build())
321-
.setCollectionExpr(clientMethodIteratorAllExpr)
366+
.setCollectionExpr(clientMethodIterateAllExpr)
322367
.setBody(
323368
Arrays.asList(
324369
CommentStatement.withComment(
@@ -327,52 +372,36 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
327372

328373
List<Statement> bodyStatements =
329374
bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList());
375+
bodyExprs.clear();
330376
bodyStatements.add(loopIteratorStatement);
331377

332-
return TryCatchStatement.builder()
333-
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr))
334-
.setTryBody(bodyStatements)
335-
.setIsSampleCode(true)
336-
.build();
378+
return bodyStatements;
337379
}
338380

339-
@VisibleForTesting
340-
static TryCatchStatement composeUnaryLroRpcMethodSampleCode(
381+
private static List<Statement> composeUnaryLroRpcMethodSampleCodeBodyStatements(
341382
Method method,
342-
TypeNode clientType,
343-
List<MethodArgument> arguments,
344-
Map<String, ResourceName> resourceNames) {
345-
VariableExpr clientVarExpr =
346-
VariableExpr.withVariable(
347-
Variable.builder()
348-
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
349-
.setType(clientType)
350-
.build());
351-
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
352-
List<Expr> rpcMethodArgDefaultValueExprs =
353-
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
354-
List<Expr> bodyExprs =
355-
createAssignmentsForVarExprsWithValueExprs(
356-
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
383+
VariableExpr clientVarExpr,
384+
List<VariableExpr> rpcMethodArgVarExprs,
385+
List<Expr> bodyExprs) {
357386
// Assign response variable with invoking client's lro method.
358387
// e.g. if return void, echoClient.waitAsync(ttl).get(); or,
359388
// e.g. if return other type, WaitResponse response = echoClient.waitAsync(ttl).get();
360-
Expr invokeLroMethodExpr =
389+
Expr invokeLroGetMethodExpr =
361390
MethodInvocationExpr.builder()
362391
.setExprReferenceExpr(clientVarExpr)
363392
.setMethodName(String.format("%sAsync", JavaStyle.toLowerCamelCase(method.name())))
364393
.setArguments(
365394
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
366395
.build();
367-
Expr getResponseMethodExpr =
396+
invokeLroGetMethodExpr =
368397
MethodInvocationExpr.builder()
369-
.setExprReferenceExpr(invokeLroMethodExpr)
398+
.setExprReferenceExpr(invokeLroGetMethodExpr)
370399
.setMethodName("get")
371400
.setReturnType(method.lro().responseType())
372401
.build();
373402
boolean returnsVoid = isProtoEmptyType(method.lro().responseType());
374403
if (returnsVoid) {
375-
bodyExprs.add(getResponseMethodExpr);
404+
bodyExprs.add(invokeLroGetMethodExpr);
376405
} else {
377406
VariableExpr responseVarExpr =
378407
VariableExpr.builder()
@@ -386,16 +415,11 @@ static TryCatchStatement composeUnaryLroRpcMethodSampleCode(
386415
bodyExprs.add(
387416
AssignmentExpr.builder()
388417
.setVariableExpr(responseVarExpr)
389-
.setValueExpr(getResponseMethodExpr)
418+
.setValueExpr(invokeLroGetMethodExpr)
390419
.build());
391420
}
392421

393-
return TryCatchStatement.builder()
394-
.setTryResourceExpr(assignClientVariableWithCreateMethodExpr(clientVarExpr))
395-
.setTryBody(
396-
bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
397-
.setIsSampleCode(true)
398-
.build();
422+
return bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList());
399423
}
400424

401425
// ==================================Helpers===================================================//

0 commit comments

Comments
 (0)