Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
7840203
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
92722b7
rebase master
summer-ji-eng Dec 9, 2020
2bc28ca
[samplecode][2/3]Implemente Unary Paged RPC method's sample code (#576)
summer-ji-eng Dec 10, 2020
9f58ef3
[SampleCode][3/3]Implement LRO unary rpc method's sample code (#587)
summer-ji-eng Dec 10, 2020
717ae88
[samplecode] Implement rpc default method sample code (#594)
summer-ji-eng Dec 17, 2020
53153cf
Flattern the createVariableExpr wrapper (#581)
summer-ji-eng Dec 3, 2020
16ad6de
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
56dc653
rebase master
summer-ji-eng Dec 9, 2020
3b70f40
[samplecode][2/3]Implemente Unary Paged RPC method's sample code (#576)
summer-ji-eng Dec 10, 2020
9417509
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
f5d2f8f
rebase master
summer-ji-eng Dec 9, 2020
5dae382
[samplecode][2/3]Implemente Unary Paged RPC method's sample code (#576)
summer-ji-eng Dec 10, 2020
5342b40
[samplecode] Implement rpc default method sample code (#594)
summer-ji-eng Dec 17, 2020
435984e
Merge with master change, add credentials for integration test
summer-ji-eng Dec 17, 2020
54e4c35
[1/3]Implemente LRO Operation Callable Method sample code (#598)
summer-ji-eng Dec 21, 2020
6aca5b0
[2/3]Implement Paged Callable Method (#608)
summer-ji-eng Dec 22, 2020
43b05af
12/22 rebase master
summer-ji-eng Dec 22, 2020
a0c626c
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
5203ef3
rebase master
summer-ji-eng Dec 9, 2020
18f9a63
Flattern the createVariableExpr wrapper (#581)
summer-ji-eng Dec 3, 2020
aada00d
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
b1aab99
rebase master
summer-ji-eng Dec 9, 2020
4585dc1
[samplecode][2/3]Implemente Unary Paged RPC method's sample code (#576)
summer-ji-eng Dec 10, 2020
8807dc0
[samplecode][1/3]Implement Pure Unary RPC sample code (#573)
summer-ji-eng Dec 9, 2020
5c5cf0d
rebase master
summer-ji-eng Dec 9, 2020
4792352
[samplecode][2/3]Implemente Unary Paged RPC method's sample code (#576)
summer-ji-eng Dec 10, 2020
1fbc63c
[samplecode] Implement rpc default method sample code (#594)
summer-ji-eng Dec 17, 2020
f401434
12/22 rebase master
summer-ji-eng Dec 22, 2020
725930c
rebase dev_composer branch of splitting defaultvalue
summer-ji-eng Jan 5, 2021
0e32cf4
[rebase][samplecode] rebase dev_composer and correct samplecode test …
summer-ji-eng Jan 6, 2021
4198b79
[samplecode][1/3]Implement Stream.Server sample code (#631)
summer-ji-eng Jan 11, 2021
327a508
[samplecode][2/3]Implement Stream.Bidi sample code (#632)
summer-ji-eng Jan 12, 2021
54c816d
[samplecode][3/3]Implement Stream.Client sample code (#635)
summer-ji-eng Jan 14, 2021
4f08178
[samplecode][1/3]Implement unary callable sample code (#636)
summer-ji-eng Jan 14, 2021
f1fd5fe
update_redis_IT (#641)
summer-ji-eng Jan 16, 2021
b193f6a
[samplecode][3/3]Implement regular paged callable sample code (#638)
summer-ji-eng Jan 21, 2021
6724542
Add unit test for class header sample code (#640)
summer-ji-eng Jan 21, 2021
f927a72
[samplecode]Implement class header method sample code (#642)
summer-ji-eng Jan 21, 2021
63cd4b1
[samplecode]Add package info sample code (#643)
summer-ji-eng Jan 21, 2021
e8dc9c3
[samplecode]Move replace in samplecodewriter (#644)
summer-ji-eng Jan 21, 2021
7320293
[samplecode]Refactor settings sample code and add unit test (#646)
summer-ji-eng Jan 26, 2021
2a6eb88
[samplecode]Refactor callable method sample code (#647)
summer-ji-eng Jan 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import com.google.api.generator.engine.ast.JavaDocComment;
import com.google.api.generator.engine.ast.PackageInfoDefinition;
import com.google.api.generator.engine.ast.TypeNode;
import com.google.api.generator.engine.ast.VaporReference;
import com.google.api.generator.gapic.composer.samplecode.ServiceClientSampleCodeComposer;
import com.google.api.generator.gapic.composer.utils.ClassNames;
import com.google.api.generator.gapic.model.GapicContext;
import com.google.api.generator.gapic.model.GapicPackageInfo;
Expand Down Expand Up @@ -111,7 +113,16 @@ private static CommentStatement createPackageInfoJavadoc(GapicContext context) {
javaDocCommentBuilder =
javaDocCommentBuilder.addParagraph(
String.format(SAMPLE_CODE_HEADER_PATTERN, javaClientName));
// TODO(summerji): Add package-info.java sample code here.
TypeNode clientType =
TypeNode.withReference(
VaporReference.builder()
.setPakkage(service.pakkage())
.setName(ClassNames.getServiceClientClassName(service))
.build());
String packageInfoSampleCode =
ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(
service, clientType, context.resourceNames(), context.messages());
javaDocCommentBuilder.addSampleCode(packageInfoSampleCode);
}

return CommentStatement.withComment(javaDocCommentBuilder.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ public static List<GapicClass> generateServiceClasses(
@Nonnull Map<String, ResourceName> resourceNames,
@Nonnull Map<String, Message> messageTypes) {
List<GapicClass> clazzes = new ArrayList<>();
clazzes.addAll(generateStubClasses(service, serviceConfig, messageTypes));
clazzes.addAll(generateClientSettingsClasses(service, messageTypes));
clazzes.addAll(generateStubClasses(service, serviceConfig, messageTypes, resourceNames));
clazzes.addAll(generateClientSettingsClasses(service, messageTypes, resourceNames));
clazzes.addAll(generateMocksAndTestClasses(service, resourceNames, messageTypes));
// TODO(miraleung): Generate test classes.
return clazzes;
Expand All @@ -78,7 +78,10 @@ public static List<GapicClass> generateResourceNameHelperClasses(
}

public static List<GapicClass> generateStubClasses(
Service service, GapicServiceConfig serviceConfig, Map<String, Message> messageTypes) {
Service service,
GapicServiceConfig serviceConfig,
Map<String, Message> messageTypes,
Map<String, ResourceName> resourceNames) {
List<GapicClass> clazzes = new ArrayList<>();
clazzes.add(ServiceStubClassComposer.instance().generate(service, messageTypes));
clazzes.add(
Expand All @@ -89,9 +92,10 @@ public static List<GapicClass> generateStubClasses(
}

public static List<GapicClass> generateClientSettingsClasses(
Service service, Map<String, Message> messageTypes) {
Service service, Map<String, Message> messageTypes, Map<String, ResourceName> resourceNames) {
List<GapicClass> clazzes = new ArrayList<>();
clazzes.add(ServiceClientClassComposer.instance().generate(service, messageTypes));
clazzes.add(
ServiceClientClassComposer.instance().generate(service, messageTypes, resourceNames));
clazzes.add(ServiceSettingsClassComposer.instance().generate(service, messageTypes));
return clazzes;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import com.google.api.generator.gapic.model.Method;
import com.google.api.generator.gapic.model.Method.Stream;
import com.google.api.generator.gapic.model.MethodArgument;
import com.google.api.generator.gapic.model.ResourceName;
import com.google.api.generator.gapic.model.Service;
import com.google.api.generator.gapic.utils.JavaStyle;
import com.google.api.generator.util.TriFunction;
Expand All @@ -86,13 +87,14 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Generated;

public class ServiceClientClassComposer implements ClassComposer {
public class ServiceClientClassComposer {
private static final ServiceClientClassComposer INSTANCE = new ServiceClientClassComposer();
private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse";
private static final String CALLABLE_NAME_PATTERN = "%sCallable";
Expand All @@ -117,8 +119,8 @@ public static ServiceClientClassComposer instance() {
return INSTANCE;
}

@Override
public GapicClass generate(Service service, Map<String, Message> messageTypes) {
public GapicClass generate(
Service service, Map<String, Message> messageTypes, Map<String, ResourceName> resourceNames) {
TypeStore typeStore = createTypes(service, messageTypes);
String className = ClassNames.getServiceClientClassName(service);
GapicClass.Kind kind = Kind.MAIN;
Expand All @@ -127,14 +129,16 @@ public GapicClass generate(Service service, Map<String, Message> messageTypes) {

ClassDefinition classDef =
ClassDefinition.builder()
.setHeaderCommentStatements(createClassHeaderComments(service, typeStore))
.setHeaderCommentStatements(
createClassHeaderComments(service, typeStore, resourceNames, messageTypes))
.setPackageString(pakkage)
.setAnnotations(createClassAnnotations(pakkage, typeStore))
.setScope(ScopeNode.PUBLIC)
.setName(className)
.setImplementsTypes(createClassImplements(typeStore))
.setStatements(createFieldDeclarations(service, typeStore, hasLroClient))
.setMethods(createClassMethods(service, messageTypes, typeStore, hasLroClient))
.setMethods(
createClassMethods(service, messageTypes, typeStore, resourceNames, hasLroClient))
.setNestedClasses(createNestedPagingClasses(service, messageTypes, typeStore))
.build();
return GapicClass.create(kind, classDef);
Expand All @@ -158,29 +162,36 @@ private static List<TypeNode> createClassImplements(TypeStore typeStore) {
}

private static List<CommentStatement> createClassHeaderComments(
Service service, TypeStore typeStore) {
Service service,
TypeStore typeStore,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
TypeNode clientType = typeStore.get(ClassNames.getServiceClientClassName(service));
TypeNode settingsType = typeStore.get(ClassNames.getServiceSettingsClassName(service));
String classMethodSampleCode =
ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(
service, clientType, resourceNames, messageTypes);
String credentialsSampleCode =
ServiceClientSampleCodeComposer.composeClassHeaderCredentialsSampleCode(
clientType, settingsType);
String endpointSampleCode =
ServiceClientSampleCodeComposer.composeClassHeaderEndpointSampleCode(
clientType, settingsType);
return ServiceClientCommentComposer.createClassHeaderComments(
service, credentialsSampleCode, endpointSampleCode);
service, classMethodSampleCode, credentialsSampleCode, endpointSampleCode);
}

private static List<MethodDefinition> createClassMethods(
Service service,
Map<String, Message> messageTypes,
TypeStore typeStore,
Map<String, ResourceName> resourceNames,
boolean hasLroClient) {
List<MethodDefinition> methods = new ArrayList<>();
methods.addAll(createStaticCreatorMethods(service, typeStore));
methods.addAll(createConstructorMethods(service, typeStore, hasLroClient));
methods.addAll(createGetterMethods(service, typeStore, hasLroClient));
methods.addAll(createServiceMethods(service, messageTypes, typeStore));
methods.addAll(createServiceMethods(service, messageTypes, typeStore, resourceNames));
methods.addAll(createBackgroundResourceMethods(service, typeStore));
return methods;
}
Expand Down Expand Up @@ -497,26 +508,48 @@ private static List<MethodDefinition> createGetterMethods(
}

private static List<MethodDefinition> createServiceMethods(
Service service, Map<String, Message> messageTypes, TypeStore typeStore) {
Service service,
Map<String, Message> messageTypes,
TypeStore typeStore,
Map<String, ResourceName> resourceNames) {
List<MethodDefinition> javaMethods = new ArrayList<>();
for (Method method : service.methods()) {
if (method.stream().equals(Stream.NONE)) {
javaMethods.addAll(createMethodVariants(method, messageTypes, typeStore));
javaMethods.add(createMethodDefaultMethod(method, typeStore));
javaMethods.addAll(
createMethodVariants(
method,
ClassNames.getServiceClientClassName(service),
messageTypes,
typeStore,
resourceNames));
javaMethods.add(
createMethodDefaultMethod(
method,
ClassNames.getServiceClientClassName(service),
messageTypes,
typeStore,
resourceNames));
}
if (method.hasLro()) {
javaMethods.add(createLroCallableMethod(service, method, typeStore));
javaMethods.add(
createLroCallableMethod(service, method, typeStore, messageTypes, resourceNames));
}
if (method.isPaged()) {
javaMethods.add(createPagedCallableMethod(service, method, typeStore));
javaMethods.add(
createPagedCallableMethod(service, method, typeStore, messageTypes, resourceNames));
}
javaMethods.add(createCallableMethod(service, method, typeStore));
javaMethods.add(
createCallableMethod(service, method, typeStore, messageTypes, resourceNames));
}
return javaMethods;
}

private static List<MethodDefinition> createMethodVariants(
Method method, Map<String, Message> messageTypes, TypeStore typeStore) {
Method method,
String clientName,
Map<String, Message> messageTypes,
TypeStore typeStore,
Map<String, ResourceName> resourceNames) {
List<MethodDefinition> javaMethods = new ArrayList<>();
String methodName = JavaStyle.toLowerCamelCase(method.name());
TypeNode methodInputType = method.inputType();
Expand Down Expand Up @@ -578,10 +611,15 @@ private static List<MethodDefinition> createMethodVariants(
.setReturnType(methodOutputType)
.build();

Optional<String> methodSampleCode =
Optional.of(
ServiceClientSampleCodeComposer.composeRpcMethodHeaderSampleCode(
method, typeStore.get(clientName), signature, resourceNames, messageTypes));
MethodDefinition.Builder methodVariantBuilder =
MethodDefinition.builder()
.setHeaderCommentStatements(
ServiceClientCommentComposer.createRpcMethodHeaderComment(method, signature))
ServiceClientCommentComposer.createRpcMethodHeaderComment(
method, signature, methodSampleCode))
.setScope(ScopeNode.PUBLIC)
.setIsFinal(true)
.setName(String.format(method.hasLro() ? "%sAsync" : "%s", methodName))
Expand All @@ -601,7 +639,12 @@ private static List<MethodDefinition> createMethodVariants(
return javaMethods;
}

private static MethodDefinition createMethodDefaultMethod(Method method, TypeStore typeStore) {
private static MethodDefinition createMethodDefaultMethod(
Method method,
String clientName,
Map<String, Message> messageTypes,
TypeStore typeStore,
Map<String, ResourceName> resourceNames) {
String methodName = JavaStyle.toLowerCamelCase(method.name());
TypeNode methodInputType = method.inputType();
TypeNode methodOutputType =
Expand Down Expand Up @@ -634,6 +677,11 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
callableMethodName = String.format(OPERATION_CALLABLE_NAME_PATTERN, methodName);
}

Optional<String> defaultMethodSampleCode =
Optional.of(
ServiceClientSampleCodeComposer.composeRpcDefaultMethodHeaderSampleCode(
method, typeStore.get(clientName), resourceNames, messageTypes));

MethodInvocationExpr callableMethodExpr =
MethodInvocationExpr.builder().setMethodName(callableMethodName).build();
callableMethodExpr =
Expand All @@ -646,7 +694,8 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
MethodDefinition.Builder methodBuilder =
MethodDefinition.builder()
.setHeaderCommentStatements(
ServiceClientCommentComposer.createRpcMethodHeaderComment(method))
ServiceClientCommentComposer.createRpcMethodHeaderComment(
method, defaultMethodSampleCode))
.setScope(ScopeNode.PUBLIC)
.setIsFinal(true)
.setName(String.format(method.hasLro() ? "%sAsync" : "%s", methodName))
Expand All @@ -665,22 +714,42 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
}

private static MethodDefinition createLroCallableMethod(
Service service, Method method, TypeStore typeStore) {
return createCallableMethod(service, method, typeStore, CallableMethodKind.LRO);
Service service,
Method method,
TypeStore typeStore,
Map<String, Message> messageTypes,
Map<String, ResourceName> resourceNames) {
return createCallableMethod(
service, method, CallableMethodKind.LRO, typeStore, messageTypes, resourceNames);
}

private static MethodDefinition createCallableMethod(
Service service, Method method, TypeStore typeStore) {
return createCallableMethod(service, method, typeStore, CallableMethodKind.REGULAR);
Service service,
Method method,
TypeStore typeStore,
Map<String, Message> messageTypes,
Map<String, ResourceName> resourceNames) {
return createCallableMethod(
service, method, CallableMethodKind.REGULAR, typeStore, messageTypes, resourceNames);
}

private static MethodDefinition createPagedCallableMethod(
Service service, Method method, TypeStore typeStore) {
return createCallableMethod(service, method, typeStore, CallableMethodKind.PAGED);
Service service,
Method method,
TypeStore typeStore,
Map<String, Message> messageTypes,
Map<String, ResourceName> resourceNames) {
return createCallableMethod(
service, method, CallableMethodKind.PAGED, typeStore, messageTypes, resourceNames);
}

private static MethodDefinition createCallableMethod(
Service service, Method method, TypeStore typeStore, CallableMethodKind callableMethodKind) {
Service service,
Method method,
CallableMethodKind callableMethodKind,
TypeStore typeStore,
Map<String, Message> messageTypes,
Map<String, ResourceName> resourceNames) {
TypeNode rawCallableReturnType = null;
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
rawCallableReturnType = typeStore.get("OperationCallable");
Expand Down Expand Up @@ -722,9 +791,47 @@ private static MethodDefinition createCallableMethod(
.setReturnType(returnType)
.build();

Optional<String> sampleCodeOpt = Optional.empty();
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
sampleCodeOpt =
Optional.of(
ServiceClientSampleCodeComposer.composeLroCallableMethodHeaderSampleCode(
method,
typeStore.get(ClassNames.getServiceClientClassName(service)),
resourceNames,
messageTypes));
} else if (callableMethodKind.equals(CallableMethodKind.PAGED)) {
sampleCodeOpt =
Optional.of(
ServiceClientSampleCodeComposer.composePagedCallableMethodHeaderSampleCode(
method,
typeStore.get(ClassNames.getServiceClientClassName(service)),
resourceNames,
messageTypes));
} else if (callableMethodKind.equals(CallableMethodKind.REGULAR)) {
if (method.stream().equals(Stream.NONE)) {
sampleCodeOpt =
Optional.of(
ServiceClientSampleCodeComposer.composeRegularCallableMethodHeaderSampleCode(
method,
typeStore.get(ClassNames.getServiceClientClassName(service)),
resourceNames,
messageTypes));
} else {
sampleCodeOpt =
Optional.of(
ServiceClientSampleCodeComposer.composeStreamCallableMethodHeaderSampleCode(
method,
typeStore.get(ClassNames.getServiceClientClassName(service)),
resourceNames,
messageTypes));
}
}

return MethodDefinition.builder()
.setHeaderCommentStatements(
ServiceClientCommentComposer.createRpcCallableMethodHeaderComment(method))
ServiceClientCommentComposer.createRpcCallableMethodHeaderComment(
method, sampleCodeOpt))
.setScope(ScopeNode.PUBLIC)
.setIsFinal(true)
.setName(methodName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ private static List<CommentStatement> createClassHeaderComments(
Optional<String> methodNameOpt =
methodOpt.isPresent() ? Optional.of(methodOpt.get().name()) : Optional.empty();
Optional<String> sampleCodeOpt =
SettingsSampleCodeComposer.composeSampleCode(methodOpt, classType);
SettingsSampleCodeComposer.composeSampleCode(
methodNameOpt, ClassNames.getServiceSettingsClassName(service), classType);
return SettingsCommentComposer.createClassHeaderComments(
ClassNames.getServiceClientClassName(service),
service.defaultHost(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ private static List<CommentStatement> createClassHeaderComments(
Optional<String> methodNameOpt =
methodOpt.isPresent() ? Optional.of(methodOpt.get().name()) : Optional.empty();
Optional<String> sampleCodeOpt =
SettingsSampleCodeComposer.composeSampleCode(methodOpt, classType);
SettingsSampleCodeComposer.composeSampleCode(
methodNameOpt, ClassNames.getServiceSettingsClassName(service), classType);

return SettingsCommentComposer.createClassHeaderComments(
ClassNames.getServiceStubClassName(service),
Expand Down
Loading