48
48
public class ServiceStubClassComposer implements ClassComposer {
49
49
private static final ServiceStubClassComposer INSTANCE = new ServiceStubClassComposer ();
50
50
private static final String DOT = "." ;
51
+ private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse" ;
51
52
52
53
private ServiceStubClassComposer () {}
53
54
@@ -110,22 +111,30 @@ private static List<MethodDefinition> createCallableGetters(
110
111
if (method .hasLro ()) {
111
112
javaMethods .add (createOperationCallableGetter (method , types ));
112
113
}
114
+ if (method .isPaged ()) {
115
+ javaMethods .add (createPagedCallableGetter (method , types ));
116
+ }
113
117
javaMethods .add (createCallableGetter (method , types ));
114
118
}
115
119
return javaMethods ;
116
120
}
117
121
118
122
private static MethodDefinition createOperationCallableGetter (
119
123
Method method , Map <String , TypeNode > types ) {
120
- return createCallableGetterHelper (method , types , true );
124
+ return createCallableGetterHelper (method , types , true , false );
125
+ }
126
+
127
+ private static MethodDefinition createPagedCallableGetter (
128
+ Method method , Map <String , TypeNode > types ) {
129
+ return createCallableGetterHelper (method , types , false , true );
121
130
}
122
131
123
132
private static MethodDefinition createCallableGetter (Method method , Map <String , TypeNode > types ) {
124
- return createCallableGetterHelper (method , types , false );
133
+ return createCallableGetterHelper (method , types , false , false );
125
134
}
126
135
127
136
private static MethodDefinition createCallableGetterHelper (
128
- Method method , Map <String , TypeNode > types , boolean isLroCallable ) {
137
+ Method method , Map <String , TypeNode > types , boolean isLroCallable , boolean isPaged ) {
129
138
TypeNode returnType ;
130
139
switch (method .stream ()) {
131
140
case CLIENT :
@@ -146,12 +155,16 @@ private static MethodDefinition createCallableGetterHelper(
146
155
String methodName =
147
156
String .format (
148
157
"%s%sCallable" ,
149
- JavaStyle .toLowerCamelCase (method .name ()), (isLroCallable ? "Operation" : "" ));
158
+ JavaStyle .toLowerCamelCase (method .name ()),
159
+ (isLroCallable ? "Operation" : isPaged ? "Paged" : "" ));
150
160
List <Reference > genericRefs = new ArrayList <>();
151
161
genericRefs .add (method .inputType ().reference ());
152
162
if (method .hasLro ()) {
153
163
genericRefs .add (method .lro ().responseType ().reference ());
154
164
genericRefs .add (method .lro ().metadataType ().reference ());
165
+ } else if (isPaged ) {
166
+ genericRefs .add (
167
+ types .get (String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , method .name ())).reference ());
155
168
} else {
156
169
genericRefs .add (method .outputType ().reference ());
157
170
}
@@ -237,6 +250,22 @@ private static Map<String, TypeNode> createTypes(
237
250
.setName ("OperationsStub" )
238
251
.setPakkage ("com.google.longrunning.stub" )
239
252
.build ()));
253
+ // Pagination types.
254
+ types .putAll (
255
+ service .methods ().stream ()
256
+ .filter (m -> m .isPaged ())
257
+ .collect (
258
+ Collectors .toMap (
259
+ m -> String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , m .name ()),
260
+ m ->
261
+ TypeNode .withReference (
262
+ VaporReference .builder ()
263
+ .setName (String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , m .name ()))
264
+ .setPakkage (service .pakkage ())
265
+ .setEnclosingClassName (getClientClassName (service .name ()))
266
+ .setIsStaticImport (true )
267
+ .build ()))));
268
+
240
269
return types ;
241
270
}
242
271
@@ -249,4 +278,8 @@ private static List<Statement> createThrowUOEBody(
249
278
.setMessageExpr (String .format ("Not implemented: %s()" , methodName ))
250
279
.build ()));
251
280
}
281
+
282
+ private static String getClientClassName (String serviceName ) {
283
+ return String .format ("%sClient" , serviceName );
284
+ }
252
285
}
0 commit comments