19
19
import com .google .api .gax .retrying .RetrySettings ;
20
20
import com .google .api .gax .rpc .TransportChannelProvider ;
21
21
import com .google .api .generator .engine .ast .AnnotationNode ;
22
+ import com .google .api .generator .engine .ast .AnonymousArrayAnnotationExpr ;
22
23
import com .google .api .generator .engine .ast .ArithmeticOperationExpr ;
23
24
import com .google .api .generator .engine .ast .AssignmentExpr ;
24
25
import com .google .api .generator .engine .ast .CastExpr ;
32
33
import com .google .api .generator .engine .ast .NewObjectExpr ;
33
34
import com .google .api .generator .engine .ast .PrimitiveValue ;
34
35
import com .google .api .generator .engine .ast .RelationalOperationExpr ;
36
+ import com .google .api .generator .engine .ast .ReturnExpr ;
35
37
import com .google .api .generator .engine .ast .ScopeNode ;
36
38
import com .google .api .generator .engine .ast .Statement ;
37
39
import com .google .api .generator .engine .ast .StringObjectValue ;
49
51
import com .google .api .generator .gapic .model .GapicServiceConfig ;
50
52
import com .google .api .generator .gapic .model .Service ;
51
53
import com .google .api .generator .spring .utils .LoggerUtils ;
54
+ import com .google .api .generator .spring .utils .SharedPropertiesUtils ;
52
55
import com .google .api .generator .spring .utils .Utils ;
53
56
import com .google .common .base .CaseFormat ;
54
57
import com .google .common .base .Joiner ;
58
+ import com .google .common .collect .ImmutableList ;
55
59
import com .google .common .collect .ImmutableMap ;
56
60
import java .io .IOException ;
57
61
import java .util .ArrayList ;
60
64
import java .util .Map ;
61
65
import java .util .stream .Collectors ;
62
66
import javax .annotation .Generated ;
67
+ import javax .management .StringValueExp ;
63
68
64
69
public class SpringAutoConfigClassComposer implements ClassComposer {
65
70
private static final String CLASS_NAME_PATTERN = "%sSpringAutoConfiguration" ;
@@ -162,7 +167,8 @@ private static List<Statement> createMemberVariables(
162
167
163
168
Statement loggerStatement =
164
169
LoggerUtils .getLoggerDeclarationExpr (serviceName + "AutoConfig" , types );
165
- return Arrays .asList (clientPropertiesStatement , loggerStatement );
170
+ Statement sharedPropertiesStatement = SharedPropertiesUtils .getSharedPropertiesDeclaration (types );
171
+ return Arrays .asList (clientPropertiesStatement , sharedPropertiesStatement , loggerStatement );
166
172
}
167
173
168
174
private static MethodDefinition createConstructor (
@@ -182,12 +188,18 @@ private static MethodDefinition createConstructor(
182
188
// .setType(types.get("GcpProjectIdProvider"))
183
189
// .build());
184
190
185
- VariableExpr propertiesVarExpr =
191
+ VariableExpr clientPropertiesVarExpr =
186
192
VariableExpr .withVariable (
187
193
Variable .builder ()
188
194
.setName ("clientProperties" )
189
195
.setType (types .get (serviceName + "Properties" ))
190
196
.build ());
197
+ VariableExpr sharedPropertiesVarExpr =
198
+ VariableExpr .withVariable (
199
+ Variable .builder ()
200
+ .setName ("sharedProperties" )
201
+ .setType (types .get ("SharedProperties" ))
202
+ .build ());
191
203
// Variable projectIdProviderVar =
192
204
// Variable.builder()
193
205
// .setName("projectIdProvider")
@@ -198,27 +210,50 @@ private static MethodDefinition createConstructor(
198
210
.setName ("clientProperties" )
199
211
.setType (types .get (serviceName + "Properties" ))
200
212
.build ();
213
+ Variable sharedPropertiesVar =
214
+ Variable .builder ()
215
+ .setName ("sharedProperties" )
216
+ .setType (types .get ("SharedProperties" ))
217
+ .build ();
201
218
202
219
Expr thisExpr = ValueExpr .withValue (ThisObjectValue .withType (types .get (className )));
203
220
204
221
// this.clientProperties = clientProperties;
205
- AssignmentExpr thisPropertiesAssignmentExpr =
222
+ AssignmentExpr thisClientPropertiesAssignmentExpr =
206
223
AssignmentExpr .builder ()
207
224
.setVariableExpr (
208
225
VariableExpr .withVariable (clientPropertiesVar )
209
226
.toBuilder ()
210
227
.setExprReferenceExpr (thisExpr )
211
228
.build ())
212
- .setValueExpr (propertiesVarExpr )
229
+ .setValueExpr (clientPropertiesVarExpr )
213
230
.build ();
214
- ExprStatement thisPropertiesAssignmentStatement =
215
- ExprStatement .withExpr (thisPropertiesAssignmentExpr );
231
+ ExprStatement thisClientPropertiesAssignmentStatement =
232
+ ExprStatement .withExpr (thisClientPropertiesAssignmentExpr );
233
+
234
+ AssignmentExpr thisSharedPropertiesAssignmentExpr =
235
+ AssignmentExpr .builder ()
236
+ .setVariableExpr (
237
+ VariableExpr .withVariable (sharedPropertiesVar )
238
+ .toBuilder ()
239
+ .setExprReferenceExpr (thisExpr )
240
+ .build ())
241
+ .setValueExpr (sharedPropertiesVarExpr )
242
+ .build ();
243
+ ExprStatement thisSharedPropertiesAssignmentStatement =
244
+ ExprStatement .withExpr (thisSharedPropertiesAssignmentExpr );
216
245
217
246
return MethodDefinition .constructorBuilder ()
218
247
.setScope (ScopeNode .PROTECTED )
219
248
.setReturnType (types .get (className ))
220
- .setArguments (Arrays .asList (propertiesVarExpr .toBuilder ().setIsDecl (true ).build ()))
221
- .setBody (Arrays .asList (thisPropertiesAssignmentStatement ))
249
+ .setArguments (Arrays .asList (
250
+ clientPropertiesVarExpr .toBuilder ().setIsDecl (true ).build (),
251
+ sharedPropertiesVarExpr .toBuilder ().setIsDecl (true ).build ()
252
+ ))
253
+ .setBody (Arrays .asList (
254
+ thisClientPropertiesAssignmentStatement ,
255
+ thisSharedPropertiesAssignmentStatement
256
+ ))
222
257
.build ();
223
258
}
224
259
@@ -286,12 +321,21 @@ private static List<AnnotationNode> createClassAnnotations(
286
321
AnnotationNode enableConfigurationPropertiesNode =
287
322
AnnotationNode .builder ()
288
323
.setType (types .get ("EnableConfigurationProperties" ))
289
- .setDescription (
290
- VariableExpr .builder ()
291
- .setVariable (
292
- Variable .builder ().setType (TypeNode .CLASS_OBJECT ).setName ("class" ).build ())
293
- .setStaticReferenceType (types .get (service .name () + "Properties" ))
294
- .build ())
324
+ .addDescription (
325
+ AnonymousArrayAnnotationExpr .builder ()
326
+ .addExpr (VariableExpr .builder ()
327
+ .setVariable (
328
+ Variable .builder ().setType (TypeNode .CLASS_OBJECT ).setName ("class" ).build ())
329
+ .setStaticReferenceType (types .get (service .name () + "Properties" ))
330
+ .build ())
331
+ .addExpr (VariableExpr .builder ()
332
+ .setVariable (
333
+ Variable .builder ().setType (TypeNode .CLASS_OBJECT ).setName ("class" ).build ())
334
+ .setStaticReferenceType (types .get ("SharedProperties" ))
335
+ .build ())
336
+ .build ()
337
+
338
+ )
295
339
.build ();
296
340
297
341
return Arrays .asList (
@@ -308,11 +352,19 @@ private static List<AnnotationNode> createClassAnnotations(
308
352
private static MethodDefinition createCredentialsProviderBeanMethod (
309
353
Service service , String className , String methodName , Map <String , TypeNode > types ) {
310
354
// @Bean
311
- // @ConditionalOnMissingBean
355
+ // @ConditionalOnMissingBean(name = "[serviceName]ServiceCredentials")
312
356
// public CredentialsProvider languageServiceCredentials() throws IOException {
313
- // return new DefaultCredentialsProvider(this.clientProperties);
357
+ // if (this.clientProperties.getCredentials().hasKey()) {
358
+ // return new DefaultCredentialsProvider(this.clientProperties);
359
+ // }
360
+ // return new DefaultCredentialsProvider(this.sharedProperties);
314
361
// }
315
-
362
+ List <Statement > bodyStatements = new ArrayList <>();
363
+ Variable sharedPropertiesVar =
364
+ Variable .builder ()
365
+ .setName ("sharedProperties" )
366
+ .setType (types .get ("SharedProperties" ))
367
+ .build ();
316
368
Variable clientPropertiesVar =
317
369
Variable .builder ()
318
370
.setName ("clientProperties" )
@@ -325,7 +377,12 @@ private static MethodDefinition createCredentialsProviderBeanMethod(
325
377
.toBuilder ()
326
378
.setExprReferenceExpr (thisExpr )
327
379
.build ();
328
- CastExpr castExpr =
380
+ VariableExpr thisSharedProperties =
381
+ VariableExpr .withVariable (sharedPropertiesVar )
382
+ .toBuilder ()
383
+ .setExprReferenceExpr (thisExpr )
384
+ .build ();
385
+ CastExpr clientCastExpr =
329
386
CastExpr .builder ()
330
387
.setExpr (
331
388
NewObjectExpr .builder ()
@@ -334,6 +391,42 @@ private static MethodDefinition createCredentialsProviderBeanMethod(
334
391
.build ())
335
392
.setType (types .get ("CredentialsProvider" ))
336
393
.build ();
394
+ CastExpr sharedCredentialsCastExpr =
395
+ CastExpr .builder ()
396
+ .setExpr (
397
+ NewObjectExpr .builder ()
398
+ .setType (types .get ("DefaultCredentialsProvider" ))
399
+ .setArguments (thisSharedProperties )
400
+ .build ())
401
+ .setType (types .get ("CredentialsProvider" ))
402
+ .build ();
403
+ ExprStatement clientCredentialsReturnExpr = ExprStatement .withExpr (ReturnExpr .withExpr (clientCastExpr ));
404
+ Expr clientPropertiesGetCredentials = MethodInvocationExpr .builder ()
405
+ .setExprReferenceExpr (thisClientProperties )
406
+ .setMethodName ("getCredentials" )
407
+ .setReturnType (types .get ("Credentials" ))
408
+ .build ();
409
+ Expr clientPropertiesCredentialsHasKey = MethodInvocationExpr .builder ()
410
+ .setExprReferenceExpr (clientPropertiesGetCredentials )
411
+ .setMethodName ("hasKey" )
412
+ .setReturnType (TypeNode .BOOLEAN )
413
+ .build ();
414
+ IfStatement clientCredentialsIfStatement = createIfStatement (clientPropertiesCredentialsHasKey ,
415
+ Arrays .asList (clientCredentialsReturnExpr ), null );
416
+ bodyStatements .add (clientCredentialsIfStatement );
417
+
418
+ // @ConditionalOnMissingBean(name = "[serviceName]ServiceCredentials")
419
+ AnnotationNode conditionalOnMissingBeanExpr = AnnotationNode .builder ()
420
+ .setType (types .get ("ConditionalOnMissingBean" ))
421
+ .addDescription (AssignmentExpr .builder ()
422
+ .setVariableExpr (VariableExpr .withVariable (
423
+ Variable .builder ()
424
+ .setName ("name" )
425
+ .setType (TypeNode .STRING )
426
+ .build ()))
427
+ .setValueExpr (ValueExpr .withValue (StringObjectValue .withValue (methodName )))
428
+ .build ())
429
+ .build ();
337
430
338
431
return MethodDefinition .builder ()
339
432
.setName (methodName )
@@ -342,9 +435,12 @@ private static MethodDefinition createCredentialsProviderBeanMethod(
342
435
.setAnnotations (
343
436
Arrays .asList (
344
437
AnnotationNode .withType (types .get ("Bean" )),
345
- AnnotationNode .withType (types .get ("ConditionalOnMissingBean" ))))
438
+ conditionalOnMissingBeanExpr
439
+ )
440
+ )
346
441
.setThrowsExceptions (Arrays .asList (TypeNode .withExceptionClazz (IOException .class )))
347
- .setReturnExpr (castExpr )
442
+ .setBody (bodyStatements )
443
+ .setReturnExpr (sharedCredentialsCastExpr )
348
444
.build ();
349
445
}
350
446
@@ -985,6 +1081,7 @@ private static Map<String, TypeNode> createDynamicTypes(Service service, String
985
1081
typeMap .put ("Qualifier" , qualifier );
986
1082
typeMap .put ("Log" , LoggerUtils .getLoggerType ());
987
1083
typeMap .put ("LogFactory" , LoggerUtils .getLoggerFactoryType ());
1084
+ typeMap .put ("SharedProperties" , SharedPropertiesUtils .getSharedPropertiesType ());
988
1085
989
1086
return typeMap ;
990
1087
}
0 commit comments