Skip to content

Commit e5d7262

Browse files
authored
Add codegen to generate an accessor for ConfigurationUpdater (#4500)
1 parent 32fb40f commit e5d7262

18 files changed

+248
-1
lines changed

codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@
5050
import software.amazon.awssdk.codegen.poet.ClassSpec;
5151
import software.amazon.awssdk.codegen.poet.PoetUtils;
5252
import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeSpecUtils;
53+
import software.amazon.awssdk.codegen.poet.model.ServiceClientConfigurationUtils;
5354
import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils;
5455
import software.amazon.awssdk.codegen.utils.AuthUtils;
56+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
5557
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
5658
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
5759
import software.amazon.awssdk.core.client.config.SdkClientOption;
60+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
5861
import software.amazon.awssdk.core.endpointdiscovery.providers.DefaultEndpointDiscoveryProviderChain;
5962
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
6063
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
@@ -83,6 +86,7 @@ public class BaseClientBuilderClass implements ClassSpec {
8386
private final String basePackage;
8487
private final EndpointRulesSpecUtils endpointRulesSpecUtils;
8588
private final AuthSchemeSpecUtils authSchemeSpecUtils;
89+
private final ServiceClientConfigurationUtils configurationUtils;
8690

8791
public BaseClientBuilderClass(IntermediateModel model) {
8892
this.model = model;
@@ -91,6 +95,7 @@ public BaseClientBuilderClass(IntermediateModel model) {
9195
this.builderClassName = ClassName.get(basePackage, model.getMetadata().getBaseBuilder());
9296
this.endpointRulesSpecUtils = new EndpointRulesSpecUtils(model);
9397
this.authSchemeSpecUtils = new AuthSchemeSpecUtils(model);
98+
this.configurationUtils = new ServiceClientConfigurationUtils(model);
9499
}
95100

96101
@Override
@@ -168,7 +173,7 @@ public TypeSpec poetSpec() {
168173
builder.addMethod(defaultTokenAuthSignerMethod());
169174
}
170175
}
171-
176+
builder.addMethod(defaultConfigUpdaterMethod());
172177
addServiceHttpConfigIfNeeded(builder, model);
173178

174179
builder.addMethod(validateClientOptionsMethod());
@@ -723,6 +728,22 @@ private MethodSpec authSchemesMethod() {
723728
return builder.build();
724729
}
725730

731+
private MethodSpec defaultConfigUpdaterMethod() {
732+
MethodSpec.Builder builder = MethodSpec.methodBuilder("defaultConfigurationUpdater")
733+
.addModifiers(PROTECTED)
734+
.returns(ParameterizedTypeName.get(ConfigurationUpdater.class,
735+
SdkServiceClientConfiguration.Builder.class));
736+
737+
builder.addCode("return (consumer, configBuilder) -> {\n")
738+
.addCode("$>")
739+
.addStatement("$1T.BuilderInternal serviceConfigBuilder = $1T.builder(configBuilder)",
740+
configurationUtils.serviceClientConfigurationBuilderClassName())
741+
.addStatement("consumer.accept(serviceConfigBuilder)")
742+
.addStatement("return serviceConfigBuilder.buildSdkClientConfiguration()")
743+
.addCode("$<};\n");
744+
return builder.build();
745+
}
746+
726747
@Override
727748
public ClassName className() {
728749
return builderClassName;

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-bearer-auth-client-builder-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider;
1111
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
1212
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
13+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1314
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1415
import software.amazon.awssdk.core.client.config.SdkClientOption;
16+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1517
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1618
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1719
import software.amazon.awssdk.http.auth.scheme.BearerAuthScheme;
@@ -25,6 +27,7 @@
2527
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
2628
import software.amazon.awssdk.services.json.endpoints.internal.JsonRequestSetEndpointInterceptor;
2729
import software.amazon.awssdk.services.json.endpoints.internal.JsonResolveEndpointInterceptor;
30+
import software.amazon.awssdk.services.json.internal.JsonServiceClientConfigurationBuilder;
2831
import software.amazon.awssdk.utils.CollectionUtils;
2932
import software.amazon.awssdk.utils.Validate;
3033

@@ -117,6 +120,15 @@ private IdentityProvider<? extends TokenIdentity> defaultTokenProvider() {
117120
return DefaultAwsTokenProvider.create();
118121
}
119122

123+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
124+
return (consumer, configBuilder) -> {
125+
JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder
126+
.builder(configBuilder);
127+
consumer.accept(serviceConfigBuilder);
128+
return serviceConfigBuilder.buildSdkClientConfiguration();
129+
};
130+
}
131+
120132
protected static void validateClientOptions(SdkClientConfiguration c) {
121133
Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER),
122134
"The 'tokenProvider' must be configured in the client builder.");

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider;
1313
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
1414
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
15+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1516
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1617
import software.amazon.awssdk.core.client.config.SdkClientOption;
18+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1719
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1820
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1921
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
@@ -29,6 +31,7 @@
2931
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
3032
import software.amazon.awssdk.services.json.endpoints.internal.JsonRequestSetEndpointInterceptor;
3133
import software.amazon.awssdk.services.json.endpoints.internal.JsonResolveEndpointInterceptor;
34+
import software.amazon.awssdk.services.json.internal.JsonServiceClientConfigurationBuilder;
3235
import software.amazon.awssdk.utils.AttributeMap;
3336
import software.amazon.awssdk.utils.CollectionUtils;
3437
import software.amazon.awssdk.utils.Validate;
@@ -193,6 +196,15 @@ private IdentityProvider<? extends TokenIdentity> defaultTokenProvider() {
193196
return DefaultAwsTokenProvider.create();
194197
}
195198

199+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
200+
return (consumer, configBuilder) -> {
201+
JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder
202+
.builder(configBuilder);
203+
consumer.accept(serviceConfigBuilder);
204+
return serviceConfigBuilder.buildSdkClientConfiguration();
205+
};
206+
}
207+
196208
@Override
197209
protected final AttributeMap serviceHttpConfig() {
198210
AttributeMap result = MyServiceHttpConfig.defaultHttpConfig();

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider;
1111
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
1212
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
13+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1314
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1415
import software.amazon.awssdk.core.client.config.SdkClientOption;
16+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1517
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1618
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1719
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
@@ -29,6 +31,7 @@
2931
import software.amazon.awssdk.services.query.endpoints.QueryEndpointProvider;
3032
import software.amazon.awssdk.services.query.endpoints.internal.QueryRequestSetEndpointInterceptor;
3133
import software.amazon.awssdk.services.query.endpoints.internal.QueryResolveEndpointInterceptor;
34+
import software.amazon.awssdk.services.query.internal.QueryServiceClientConfigurationBuilder;
3235
import software.amazon.awssdk.utils.CollectionUtils;
3336
import software.amazon.awssdk.utils.Validate;
3437

@@ -138,6 +141,15 @@ private IdentityProvider<? extends TokenIdentity> defaultTokenProvider() {
138141
return DefaultAwsTokenProvider.create();
139142
}
140143

144+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
145+
return (consumer, configBuilder) -> {
146+
QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder
147+
.builder(configBuilder);
148+
consumer.accept(serviceConfigBuilder);
149+
return serviceConfigBuilder.buildSdkClientConfiguration();
150+
};
151+
}
152+
141153
protected static void validateClientOptions(SdkClientConfiguration c) {
142154
Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER),
143155
"The 'tokenProvider' must be configured in the client builder.");

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-internal-defaults-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import software.amazon.awssdk.annotations.Generated;
99
import software.amazon.awssdk.annotations.SdkInternalApi;
1010
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
11+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1112
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1213
import software.amazon.awssdk.core.client.config.SdkClientOption;
14+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1315
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1416
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1517
import software.amazon.awssdk.core.retry.RetryMode;
@@ -21,6 +23,7 @@
2123
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
2224
import software.amazon.awssdk.services.json.endpoints.internal.JsonRequestSetEndpointInterceptor;
2325
import software.amazon.awssdk.services.json.endpoints.internal.JsonResolveEndpointInterceptor;
26+
import software.amazon.awssdk.services.json.internal.JsonServiceClientConfigurationBuilder;
2427
import software.amazon.awssdk.utils.CollectionUtils;
2528

2629
/**
@@ -109,6 +112,15 @@ private Map<String, AuthScheme<?>> authSchemes() {
109112
return Collections.unmodifiableMap(schemes);
110113
}
111114

115+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
116+
return (consumer, configBuilder) -> {
117+
JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder
118+
.builder(configBuilder);
119+
consumer.accept(serviceConfigBuilder);
120+
return serviceConfigBuilder.buildSdkClientConfiguration();
121+
};
122+
}
123+
112124
protected static void validateClientOptions(SdkClientConfiguration c) {
113125
}
114126
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-composed-sync-default-client-builder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider;
1111
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
1212
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
13+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1314
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1415
import software.amazon.awssdk.core.client.config.SdkClientOption;
16+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1517
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1618
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1719
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
@@ -27,6 +29,7 @@
2729
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
2830
import software.amazon.awssdk.services.json.endpoints.internal.JsonRequestSetEndpointInterceptor;
2931
import software.amazon.awssdk.services.json.endpoints.internal.JsonResolveEndpointInterceptor;
32+
import software.amazon.awssdk.services.json.internal.JsonServiceClientConfigurationBuilder;
3033
import software.amazon.awssdk.utils.CollectionUtils;
3134
import software.amazon.awssdk.utils.Validate;
3235

@@ -144,6 +147,15 @@ private IdentityProvider<? extends TokenIdentity> defaultTokenProvider() {
144147
return DefaultAwsTokenProvider.create();
145148
}
146149

150+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
151+
return (consumer, configBuilder) -> {
152+
JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder
153+
.builder(configBuilder);
154+
consumer.accept(serviceConfigBuilder);
155+
return serviceConfigBuilder.buildSdkClientConfiguration();
156+
};
157+
}
158+
147159
protected static void validateClientOptions(SdkClientConfiguration c) {
148160
Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER),
149161
"The 'tokenProvider' must be configured in the client builder.");

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-ops-client-builder-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import software.amazon.awssdk.annotations.Generated;
99
import software.amazon.awssdk.annotations.SdkInternalApi;
1010
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
11+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1112
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1213
import software.amazon.awssdk.core.client.config.SdkClientOption;
14+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1315
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1416
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1517
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
@@ -21,6 +23,7 @@
2123
import software.amazon.awssdk.services.database.endpoints.DatabaseEndpointProvider;
2224
import software.amazon.awssdk.services.database.endpoints.internal.DatabaseRequestSetEndpointInterceptor;
2325
import software.amazon.awssdk.services.database.endpoints.internal.DatabaseResolveEndpointInterceptor;
26+
import software.amazon.awssdk.services.database.internal.DatabaseServiceClientConfigurationBuilder;
2427
import software.amazon.awssdk.utils.CollectionUtils;
2528

2629
/**
@@ -104,6 +107,15 @@ private Map<String, AuthScheme<?>> authSchemes() {
104107
return Collections.unmodifiableMap(schemes);
105108
}
106109

110+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
111+
return (consumer, configBuilder) -> {
112+
DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder
113+
.builder(configBuilder);
114+
consumer.accept(serviceConfigBuilder);
115+
return serviceConfigBuilder.buildSdkClientConfiguration();
116+
};
117+
}
118+
107119
protected static void validateClientOptions(SdkClientConfiguration c) {
108120
}
109121
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-service-client-builder-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import software.amazon.awssdk.annotations.Generated;
99
import software.amazon.awssdk.annotations.SdkInternalApi;
1010
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
11+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1112
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1213
import software.amazon.awssdk.core.client.config.SdkClientOption;
14+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1315
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1416
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1517
import software.amazon.awssdk.http.auth.scheme.NoAuthAuthScheme;
@@ -19,6 +21,7 @@
1921
import software.amazon.awssdk.services.database.endpoints.DatabaseEndpointProvider;
2022
import software.amazon.awssdk.services.database.endpoints.internal.DatabaseRequestSetEndpointInterceptor;
2123
import software.amazon.awssdk.services.database.endpoints.internal.DatabaseResolveEndpointInterceptor;
24+
import software.amazon.awssdk.services.database.internal.DatabaseServiceClientConfigurationBuilder;
2225
import software.amazon.awssdk.utils.CollectionUtils;
2326

2427
/**
@@ -98,6 +101,15 @@ private Map<String, AuthScheme<?>> authSchemes() {
98101
return Collections.unmodifiableMap(schemes);
99102
}
100103

104+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
105+
return (consumer, configBuilder) -> {
106+
DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder
107+
.builder(configBuilder);
108+
consumer.accept(serviceConfigBuilder);
109+
return serviceConfigBuilder.buildSdkClientConfiguration();
110+
};
111+
}
112+
101113
protected static void validateClientOptions(SdkClientConfiguration c) {
102114
}
103115
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider;
1111
import software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder;
1212
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
13+
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
1314
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1415
import software.amazon.awssdk.core.client.config.SdkClientOption;
16+
import software.amazon.awssdk.core.client.config.internal.ConfigurationUpdater;
1517
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
1618
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
1719
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
@@ -28,6 +30,7 @@
2830
import software.amazon.awssdk.services.query.endpoints.QueryEndpointProvider;
2931
import software.amazon.awssdk.services.query.endpoints.internal.QueryRequestSetEndpointInterceptor;
3032
import software.amazon.awssdk.services.query.endpoints.internal.QueryResolveEndpointInterceptor;
33+
import software.amazon.awssdk.services.query.internal.QueryServiceClientConfigurationBuilder;
3134
import software.amazon.awssdk.utils.CollectionUtils;
3235
import software.amazon.awssdk.utils.Validate;
3336

@@ -135,6 +138,15 @@ private IdentityProvider<? extends TokenIdentity> defaultTokenProvider() {
135138
return DefaultAwsTokenProvider.create();
136139
}
137140

141+
protected ConfigurationUpdater<SdkServiceClientConfiguration.Builder> defaultConfigurationUpdater() {
142+
return (consumer, configBuilder) -> {
143+
QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder
144+
.builder(configBuilder);
145+
consumer.accept(serviceConfigBuilder);
146+
return serviceConfigBuilder.buildSdkClientConfiguration();
147+
};
148+
}
149+
138150
protected static void validateClientOptions(SdkClientConfiguration c) {
139151
Validate.notNull(c.option(AwsClientOption.TOKEN_IDENTITY_PROVIDER),
140152
"The 'tokenProvider' must be configured in the client builder.");

0 commit comments

Comments
 (0)