Skip to content

Commit

Permalink
abstract functions for reuse
Browse files Browse the repository at this point in the history
  • Loading branch information
summer-ji-eng committed Dec 8, 2020
1 parent 8428f50 commit 5907c4e
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import com.google.api.generator.gapic.utils.JavaStyle;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -226,52 +225,12 @@ static TryCatchStatement composeUnaryRpcMethodSampleCode(
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
.setType(clientType)
.build());
// List of rpc method arguments' variable expressions.
List<VariableExpr> rpcMethodArgVarExprs =
arguments.stream()
.map(
arg ->
VariableExpr.withVariable(
Variable.builder()
.setName(JavaStyle.toLowerCamelCase(arg.name()))
.setType(arg.type())
.build()))
.collect(Collectors.toList());
// List of rpc method arguments' default value expression.
List<ResourceName> resourceNameList =
resourceNames.values().stream().collect(Collectors.toList());
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
List<Expr> rpcMethodArgDefaultValueExprs =
arguments.stream()
.map(
arg ->
!isStringTypedResourceName(arg, resourceNames)
? DefaultValueComposer.createDefaultValue(arg, resourceNames)
: MethodInvocationExpr.builder()
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(
arg.field().resourceReference().resourceTypeString()),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
.setReturnType(TypeNode.STRING)
.build())
.collect(Collectors.toList());

List<Expr> bodyExprs = new ArrayList<>();
Preconditions.checkState(
rpcMethodArgVarExprs.size() == rpcMethodArgDefaultValueExprs.size(),
"Expected the number of method arguments to match the number of default values.");
bodyExprs.addAll(
IntStream.range(0, rpcMethodArgVarExprs.size())
.mapToObj(
i ->
AssignmentExpr.builder()
.setVariableExpr(
(rpcMethodArgVarExprs.get(i)).toBuilder().setIsDecl(true).build())
.setValueExpr(rpcMethodArgDefaultValueExprs.get(i))
.build())
.collect(Collectors.toList()));
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
List<Expr> bodyExprs =
createMethodArgAssignmentWithDefaultValue(
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
// Invoke current method based on return type.
// e.g. if return void, echoClient.echo(..); or,
// e.g. if return other type, EchoResponse response = echoClient.echo(...);
Expand Down Expand Up @@ -325,55 +284,12 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
.setName(JavaStyle.toLowerCamelCase(clientType.reference().name()))
.setType(clientType)
.build());
// List of rpc method arguments' variable expressions.
List<Expr> rpcMethodArgVarExprs =
arguments.stream()
.map(
arg ->
VariableExpr.withVariable(
Variable.builder()
.setName(JavaStyle.toLowerCamelCase(arg.name()))
.setType(arg.type())
.build()))
.collect(Collectors.toList());
// List of rpc method arguments' default value expression.
List<ResourceName> resourceNameList =
resourceNames.values().stream().collect(Collectors.toList());
List<VariableExpr> rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs(arguments);
List<Expr> rpcMethodArgDefaultValueExprs =
arguments.stream()
.map(
arg ->
!isStringTypedResourceName(arg, resourceNames)
? DefaultValueComposer.createDefaultValue(arg, resourceNames)
: MethodInvocationExpr.builder()
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(
arg.field().resourceReference().resourceTypeString()),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
.setReturnType(TypeNode.STRING)
.build())
.collect(Collectors.toList());

List<Expr> bodyExprs = new ArrayList<>();
Preconditions.checkState(
rpcMethodArgVarExprs.size() == rpcMethodArgDefaultValueExprs.size(),
"The method arguments' the number of variable expressions should equal to the number of default value expressions.");
bodyExprs.addAll(
IntStream.range(0, rpcMethodArgVarExprs.size())
.mapToObj(
i ->
AssignmentExpr.builder()
.setVariableExpr(
((VariableExpr) rpcMethodArgVarExprs.get(i))
.toBuilder()
.setIsDecl(true)
.build())
.setValueExpr(rpcMethodArgDefaultValueExprs.get(i))
.build())
.collect(Collectors.toList()));
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
List<Expr> bodyExprs =
createMethodArgAssignmentWithDefaultValue(
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
// For loop paged response item on iterateAll method.
// e.g. for (LogEntry element : loggingServiceV2Client.ListLogs(parent).iterateAll()) {
// //doThingsWith(element);
Expand All @@ -382,7 +298,8 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
MethodInvocationExpr.builder()
.setExprReferenceExpr(clientVarExpr)
.setMethodName(JavaStyle.toLowerCamelCase(method.name()))
.setArguments(rpcMethodArgVarExprs)
.setArguments(
rpcMethodArgVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList()))
.build();
Expr clientMethodIteratorAllExpr =
MethodInvocationExpr.builder()
Expand Down Expand Up @@ -415,6 +332,60 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(

// ==================================Helpers===================================================//

// Create a list of RPC method arguments' variable expressions.
private static List<VariableExpr> createRpcMethodArgumentVariableExprs(
List<MethodArgument> arguments) {
return arguments.stream()
.map(
arg ->
VariableExpr.withVariable(
Variable.builder()
.setName(JavaStyle.toLowerCamelCase(arg.name()))
.setType(arg.type())
.build()))
.collect(Collectors.toList());
}

// Create a list of RPC method arguments' default value expression.
private static List<Expr> createRpcMethodArgumentDefaultValueExprs(
List<MethodArgument> arguments, Map<String, ResourceName> resourceNames) {
List<ResourceName> resourceNameList =
resourceNames.values().stream().collect(Collectors.toList());
return arguments.stream()
.map(
arg ->
!isStringTypedResourceName(arg, resourceNames)
? DefaultValueComposer.createDefaultValue(arg, resourceNames)
: MethodInvocationExpr.builder()
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(
arg.field().resourceReference().resourceTypeString()),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
.setReturnType(TypeNode.STRING)
.build())
.collect(Collectors.toList());
}

// Create a list of assignment expressions for method argument with its default value.
private static List<Expr> createMethodArgAssignmentWithDefaultValue(
List<VariableExpr> rpcMethodArgVarExprs, List<Expr> rpcMethodArgDefaultValueExprs) {
Preconditions.checkState(
rpcMethodArgVarExprs.size() == rpcMethodArgDefaultValueExprs.size(),
"Expected the number of method arguments to match the number of default values.");
return IntStream.range(0, rpcMethodArgVarExprs.size())
.mapToObj(
i ->
AssignmentExpr.builder()
.setVariableExpr(
rpcMethodArgVarExprs.get(i).toBuilder().setIsDecl(true).build())
.setValueExpr(rpcMethodArgDefaultValueExprs.get(i))
.build())
.collect(Collectors.toList());
}

// Assign client variable expr with create client.
// e.g EchoClient echoClient = EchoClient.create()
private static AssignmentExpr assignClientVariableWithCreateMethodExpr(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

Expand Down Expand Up @@ -101,18 +100,17 @@ public void validComposeRpcMethodHeaderSampleCode_pagedUnaryRpc() {
.setName("PagedExpandResponse")
.setPakkage(PACKAGE_NAME)
.build());
List<MethodArgument> methodArguments = Collections.emptyList();
Method method =
Method.builder()
.setName("SimplePagedExpand")
.setMethodSignatures(Arrays.asList(methodArguments))
.setMethodSignatures(Collections.emptyList())
.setInputType(inputType)
.setOutputType(outputType)
.setIsPaged(true)
.build();
String results =
ServiceClientSampleCodeComposer.composeRpcMethodHeaderSampleCode(
method, methodArguments, clientType, resourceNames, messageTypes);
method, clientType, Collections.emptyList(), resourceNames, messageTypes);
String expected =
LineFormatter.lines(
"try (EchoClient echoClient = EchoClient.create()) {\n",
Expand Down Expand Up @@ -147,7 +145,7 @@ public void invalidComposeRpcMethodHeaderSampleCode_noMatchedRepeatedResponseTyp
NullPointerException.class,
() ->
ServiceClientSampleCodeComposer.composeRpcMethodHeaderSampleCode(
method, methodArguments, clientType, resourceNames, messageTypes));
method, clientType, methodArguments, resourceNames, messageTypes));
}

@Test
Expand Down Expand Up @@ -195,7 +193,7 @@ public void invalidComposeRpcMethodHeaderSampleCode_noRepeatedResponseTypeInPage
NullPointerException.class,
() ->
ServiceClientSampleCodeComposer.composeRpcMethodHeaderSampleCode(
method, methodArguments, clientType, resourceNames, messageTypes));
method, clientType, methodArguments, resourceNames, messageTypes));
}

// ==========================================Unary RPC Method Sample Code=======================//
Expand Down Expand Up @@ -379,7 +377,7 @@ public void composeUnaryRpcMethodSampleCode_stringWithParentResourceReferenceMet
String results =
SampleCodeWriter.write(
ServiceClientSampleCodeComposer.composeUnaryRpcMethodSampleCode(
unaryMethod, signatures.get(0), clientType, resourceNames));
unaryMethod, clientType, signatures.get(0), resourceNames));
String expected =
LineFormatter.lines(
"try (EchoClient echoClient = EchoClient.create()) {\n",
Expand Down Expand Up @@ -662,7 +660,7 @@ public void composeUnaryRpcMethodSampleCode_methodReturnVoid() {
" String name = \"name3373707\";\n",
" echoClient.delete(name);\n",
"}");
Assert.assertEquals(results, expected);
assertEquals(results, expected);
}

// ===================================Unary Paged RPC Method Sample Code ======================//
Expand Down Expand Up @@ -731,7 +729,7 @@ public void composeUnaryPagedRpcMethodSampleCode_multipleMethodArguments() {
" // doThingsWith(element);\n",
" }\n",
"}");
Assert.assertEquals(results, expected);
assertEquals(results, expected);
}

@Test
Expand Down Expand Up @@ -775,6 +773,6 @@ public void composeUnaryPagedRpcMethodSampleCode_noMethodArguments() {
" // doThingsWith(element);\n",
" }\n",
"}");
Assert.assertEquals(results, expected);
assertEquals(results, expected);
}
}

0 comments on commit 5907c4e

Please sign in to comment.