6767import com .google .api .generator .gapic .model .Method ;
6868import com .google .api .generator .gapic .model .Method .Stream ;
6969import com .google .api .generator .gapic .model .MethodArgument ;
70+ import com .google .api .generator .gapic .model .ResourceName ;
7071import com .google .api .generator .gapic .model .Service ;
7172import com .google .api .generator .gapic .utils .JavaStyle ;
7273import com .google .api .generator .util .TriFunction ;
8687import java .util .List ;
8788import java .util .Map ;
8889import java .util .Objects ;
90+ import java .util .Optional ;
8991import java .util .concurrent .TimeUnit ;
9092import java .util .function .BiFunction ;
9193import java .util .function .Function ;
9294import java .util .stream .Collectors ;
9395import javax .annotation .Generated ;
9496
95- public class ServiceClientClassComposer implements ClassComposer {
97+ public class ServiceClientClassComposer {
9698 private static final ServiceClientClassComposer INSTANCE = new ServiceClientClassComposer ();
9799 private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse" ;
98100 private static final String CALLABLE_NAME_PATTERN = "%sCallable" ;
@@ -117,8 +119,8 @@ public static ServiceClientClassComposer instance() {
117119 return INSTANCE ;
118120 }
119121
120- @ Override
121- public GapicClass generate ( Service service , Map <String , Message > messageTypes ) {
122+ public GapicClass generate (
123+ Service service , Map <String , Message > messageTypes , Map < String , ResourceName > resourceNames ) {
122124 TypeStore typeStore = createTypes (service , messageTypes );
123125 String className = ClassNames .getServiceClientClassName (service );
124126 GapicClass .Kind kind = Kind .MAIN ;
@@ -127,14 +129,16 @@ public GapicClass generate(Service service, Map<String, Message> messageTypes) {
127129
128130 ClassDefinition classDef =
129131 ClassDefinition .builder ()
130- .setHeaderCommentStatements (createClassHeaderComments (service , typeStore ))
132+ .setHeaderCommentStatements (
133+ createClassHeaderComments (service , typeStore , resourceNames , messageTypes ))
131134 .setPackageString (pakkage )
132135 .setAnnotations (createClassAnnotations (pakkage , typeStore ))
133136 .setScope (ScopeNode .PUBLIC )
134137 .setName (className )
135138 .setImplementsTypes (createClassImplements (typeStore ))
136139 .setStatements (createFieldDeclarations (service , typeStore , hasLroClient ))
137- .setMethods (createClassMethods (service , messageTypes , typeStore , hasLroClient ))
140+ .setMethods (
141+ createClassMethods (service , messageTypes , typeStore , resourceNames , hasLroClient ))
138142 .setNestedClasses (createNestedPagingClasses (service , messageTypes , typeStore ))
139143 .build ();
140144 return GapicClass .create (kind , classDef );
@@ -158,29 +162,36 @@ private static List<TypeNode> createClassImplements(TypeStore typeStore) {
158162 }
159163
160164 private static List <CommentStatement > createClassHeaderComments (
161- Service service , TypeStore typeStore ) {
165+ Service service ,
166+ TypeStore typeStore ,
167+ Map <String , ResourceName > resourceNames ,
168+ Map <String , Message > messageTypes ) {
162169 TypeNode clientType = typeStore .get (ClassNames .getServiceClientClassName (service ));
163170 TypeNode settingsType = typeStore .get (ClassNames .getServiceSettingsClassName (service ));
171+ String classMethodSampleCode =
172+ ServiceClientSampleCodeComposer .composeClassHeaderMethodSampleCode (
173+ service , clientType , resourceNames , messageTypes );
164174 String credentialsSampleCode =
165175 ServiceClientSampleCodeComposer .composeClassHeaderCredentialsSampleCode (
166176 clientType , settingsType );
167177 String endpointSampleCode =
168178 ServiceClientSampleCodeComposer .composeClassHeaderEndpointSampleCode (
169179 clientType , settingsType );
170180 return ServiceClientCommentComposer .createClassHeaderComments (
171- service , credentialsSampleCode , endpointSampleCode );
181+ service , classMethodSampleCode , credentialsSampleCode , endpointSampleCode );
172182 }
173183
174184 private static List <MethodDefinition > createClassMethods (
175185 Service service ,
176186 Map <String , Message > messageTypes ,
177187 TypeStore typeStore ,
188+ Map <String , ResourceName > resourceNames ,
178189 boolean hasLroClient ) {
179190 List <MethodDefinition > methods = new ArrayList <>();
180191 methods .addAll (createStaticCreatorMethods (service , typeStore ));
181192 methods .addAll (createConstructorMethods (service , typeStore , hasLroClient ));
182193 methods .addAll (createGetterMethods (service , typeStore , hasLroClient ));
183- methods .addAll (createServiceMethods (service , messageTypes , typeStore ));
194+ methods .addAll (createServiceMethods (service , messageTypes , typeStore , resourceNames ));
184195 methods .addAll (createBackgroundResourceMethods (service , typeStore ));
185196 return methods ;
186197 }
@@ -497,26 +508,48 @@ private static List<MethodDefinition> createGetterMethods(
497508 }
498509
499510 private static List <MethodDefinition > createServiceMethods (
500- Service service , Map <String , Message > messageTypes , TypeStore typeStore ) {
511+ Service service ,
512+ Map <String , Message > messageTypes ,
513+ TypeStore typeStore ,
514+ Map <String , ResourceName > resourceNames ) {
501515 List <MethodDefinition > javaMethods = new ArrayList <>();
502516 for (Method method : service .methods ()) {
503517 if (method .stream ().equals (Stream .NONE )) {
504- javaMethods .addAll (createMethodVariants (method , messageTypes , typeStore ));
505- javaMethods .add (createMethodDefaultMethod (method , typeStore ));
518+ javaMethods .addAll (
519+ createMethodVariants (
520+ method ,
521+ ClassNames .getServiceClientClassName (service ),
522+ messageTypes ,
523+ typeStore ,
524+ resourceNames ));
525+ javaMethods .add (
526+ createMethodDefaultMethod (
527+ method ,
528+ ClassNames .getServiceClientClassName (service ),
529+ messageTypes ,
530+ typeStore ,
531+ resourceNames ));
506532 }
507533 if (method .hasLro ()) {
508- javaMethods .add (createLroCallableMethod (service , method , typeStore ));
534+ javaMethods .add (
535+ createLroCallableMethod (service , method , typeStore , messageTypes , resourceNames ));
509536 }
510537 if (method .isPaged ()) {
511- javaMethods .add (createPagedCallableMethod (service , method , typeStore ));
538+ javaMethods .add (
539+ createPagedCallableMethod (service , method , typeStore , messageTypes , resourceNames ));
512540 }
513- javaMethods .add (createCallableMethod (service , method , typeStore ));
541+ javaMethods .add (
542+ createCallableMethod (service , method , typeStore , messageTypes , resourceNames ));
514543 }
515544 return javaMethods ;
516545 }
517546
518547 private static List <MethodDefinition > createMethodVariants (
519- Method method , Map <String , Message > messageTypes , TypeStore typeStore ) {
548+ Method method ,
549+ String clientName ,
550+ Map <String , Message > messageTypes ,
551+ TypeStore typeStore ,
552+ Map <String , ResourceName > resourceNames ) {
520553 List <MethodDefinition > javaMethods = new ArrayList <>();
521554 String methodName = JavaStyle .toLowerCamelCase (method .name ());
522555 TypeNode methodInputType = method .inputType ();
@@ -578,10 +611,15 @@ private static List<MethodDefinition> createMethodVariants(
578611 .setReturnType (methodOutputType )
579612 .build ();
580613
614+ Optional <String > methodSampleCode =
615+ Optional .of (
616+ ServiceClientSampleCodeComposer .composeRpcMethodHeaderSampleCode (
617+ method , typeStore .get (clientName ), signature , resourceNames , messageTypes ));
581618 MethodDefinition .Builder methodVariantBuilder =
582619 MethodDefinition .builder ()
583620 .setHeaderCommentStatements (
584- ServiceClientCommentComposer .createRpcMethodHeaderComment (method , signature ))
621+ ServiceClientCommentComposer .createRpcMethodHeaderComment (
622+ method , signature , methodSampleCode ))
585623 .setScope (ScopeNode .PUBLIC )
586624 .setIsFinal (true )
587625 .setName (String .format (method .hasLro () ? "%sAsync" : "%s" , methodName ))
@@ -601,7 +639,12 @@ private static List<MethodDefinition> createMethodVariants(
601639 return javaMethods ;
602640 }
603641
604- private static MethodDefinition createMethodDefaultMethod (Method method , TypeStore typeStore ) {
642+ private static MethodDefinition createMethodDefaultMethod (
643+ Method method ,
644+ String clientName ,
645+ Map <String , Message > messageTypes ,
646+ TypeStore typeStore ,
647+ Map <String , ResourceName > resourceNames ) {
605648 String methodName = JavaStyle .toLowerCamelCase (method .name ());
606649 TypeNode methodInputType = method .inputType ();
607650 TypeNode methodOutputType =
@@ -634,6 +677,11 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
634677 callableMethodName = String .format (OPERATION_CALLABLE_NAME_PATTERN , methodName );
635678 }
636679
680+ Optional <String > defaultMethodSampleCode =
681+ Optional .of (
682+ ServiceClientSampleCodeComposer .composeRpcDefaultMethodHeaderSampleCode (
683+ method , typeStore .get (clientName ), resourceNames , messageTypes ));
684+
637685 MethodInvocationExpr callableMethodExpr =
638686 MethodInvocationExpr .builder ().setMethodName (callableMethodName ).build ();
639687 callableMethodExpr =
@@ -646,7 +694,8 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
646694 MethodDefinition .Builder methodBuilder =
647695 MethodDefinition .builder ()
648696 .setHeaderCommentStatements (
649- ServiceClientCommentComposer .createRpcMethodHeaderComment (method ))
697+ ServiceClientCommentComposer .createRpcMethodHeaderComment (
698+ method , defaultMethodSampleCode ))
650699 .setScope (ScopeNode .PUBLIC )
651700 .setIsFinal (true )
652701 .setName (String .format (method .hasLro () ? "%sAsync" : "%s" , methodName ))
@@ -665,22 +714,42 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
665714 }
666715
667716 private static MethodDefinition createLroCallableMethod (
668- Service service , Method method , TypeStore typeStore ) {
669- return createCallableMethod (service , method , typeStore , CallableMethodKind .LRO );
717+ Service service ,
718+ Method method ,
719+ TypeStore typeStore ,
720+ Map <String , Message > messageTypes ,
721+ Map <String , ResourceName > resourceNames ) {
722+ return createCallableMethod (
723+ service , method , CallableMethodKind .LRO , typeStore , messageTypes , resourceNames );
670724 }
671725
672726 private static MethodDefinition createCallableMethod (
673- Service service , Method method , TypeStore typeStore ) {
674- return createCallableMethod (service , method , typeStore , CallableMethodKind .REGULAR );
727+ Service service ,
728+ Method method ,
729+ TypeStore typeStore ,
730+ Map <String , Message > messageTypes ,
731+ Map <String , ResourceName > resourceNames ) {
732+ return createCallableMethod (
733+ service , method , CallableMethodKind .REGULAR , typeStore , messageTypes , resourceNames );
675734 }
676735
677736 private static MethodDefinition createPagedCallableMethod (
678- Service service , Method method , TypeStore typeStore ) {
679- return createCallableMethod (service , method , typeStore , CallableMethodKind .PAGED );
737+ Service service ,
738+ Method method ,
739+ TypeStore typeStore ,
740+ Map <String , Message > messageTypes ,
741+ Map <String , ResourceName > resourceNames ) {
742+ return createCallableMethod (
743+ service , method , CallableMethodKind .PAGED , typeStore , messageTypes , resourceNames );
680744 }
681745
682746 private static MethodDefinition createCallableMethod (
683- Service service , Method method , TypeStore typeStore , CallableMethodKind callableMethodKind ) {
747+ Service service ,
748+ Method method ,
749+ CallableMethodKind callableMethodKind ,
750+ TypeStore typeStore ,
751+ Map <String , Message > messageTypes ,
752+ Map <String , ResourceName > resourceNames ) {
684753 TypeNode rawCallableReturnType = null ;
685754 if (callableMethodKind .equals (CallableMethodKind .LRO )) {
686755 rawCallableReturnType = typeStore .get ("OperationCallable" );
@@ -722,9 +791,47 @@ private static MethodDefinition createCallableMethod(
722791 .setReturnType (returnType )
723792 .build ();
724793
794+ Optional <String > sampleCodeOpt = Optional .empty ();
795+ if (callableMethodKind .equals (CallableMethodKind .LRO )) {
796+ sampleCodeOpt =
797+ Optional .of (
798+ ServiceClientSampleCodeComposer .composeLroCallableMethodHeaderSampleCode (
799+ method ,
800+ typeStore .get (ClassNames .getServiceClientClassName (service )),
801+ resourceNames ,
802+ messageTypes ));
803+ } else if (callableMethodKind .equals (CallableMethodKind .PAGED )) {
804+ sampleCodeOpt =
805+ Optional .of (
806+ ServiceClientSampleCodeComposer .composePagedCallableMethodHeaderSampleCode (
807+ method ,
808+ typeStore .get (ClassNames .getServiceClientClassName (service )),
809+ resourceNames ,
810+ messageTypes ));
811+ } else if (callableMethodKind .equals (CallableMethodKind .REGULAR )) {
812+ if (method .stream ().equals (Stream .NONE )) {
813+ sampleCodeOpt =
814+ Optional .of (
815+ ServiceClientSampleCodeComposer .composeRegularCallableMethodHeaderSampleCode (
816+ method ,
817+ typeStore .get (ClassNames .getServiceClientClassName (service )),
818+ resourceNames ,
819+ messageTypes ));
820+ } else {
821+ sampleCodeOpt =
822+ Optional .of (
823+ ServiceClientSampleCodeComposer .composeStreamCallableMethodHeaderSampleCode (
824+ method ,
825+ typeStore .get (ClassNames .getServiceClientClassName (service )),
826+ resourceNames ,
827+ messageTypes ));
828+ }
829+ }
830+
725831 return MethodDefinition .builder ()
726832 .setHeaderCommentStatements (
727- ServiceClientCommentComposer .createRpcCallableMethodHeaderComment (method ))
833+ ServiceClientCommentComposer .createRpcCallableMethodHeaderComment (
834+ method , sampleCodeOpt ))
728835 .setScope (ScopeNode .PUBLIC )
729836 .setIsFinal (true )
730837 .setName (methodName )
0 commit comments