Skip to content

Commit 496c37b

Browse files
authored
Add endpointProvider in ClientConfig and RequestOverrideConfig. Also add crossRegionBucketAccess in S3Configuration (#3978)
* Add endpointProvider in ClientConfig and RequestOverrideConfig. Also add crossRegionBucketAccess in S3Configuration * updated review comments 1 * updated review comments 2
1 parent 7a28087 commit 496c37b

File tree

18 files changed

+510
-8
lines changed

18 files changed

+510
-8
lines changed

codegen/src/main/java/software/amazon/awssdk/codegen/model/config/customization/ServiceConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public class ServiceConfig {
4747

4848
private boolean hasAccelerateModeEnabledProperty = false;
4949

50+
private boolean hasCrossRegionAccessEnabledProperty = false;
51+
5052
public String getClassName() {
5153
return className;
5254
}
@@ -95,6 +97,14 @@ public void setHasPathStyleAccessEnabledProperty(boolean hasPathStyleAccessEnabl
9597
this.hasPathStyleAccessEnabledProperty = hasPathStyleAccessEnabledProperty;
9698
}
9799

100+
public boolean hasCrossRegionAccessEnabledProperty() {
101+
return hasCrossRegionAccessEnabledProperty;
102+
}
103+
104+
public void setHasCrossRegionAccessEnabledProperty(boolean hasCrossRegionAccessEnabledProperty) {
105+
this.hasCrossRegionAccessEnabledProperty = hasCrossRegionAccessEnabledProperty;
106+
}
107+
98108
public boolean hasAccelerateModeEnabledProperty() {
99109
return hasAccelerateModeEnabledProperty;
100110
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import software.amazon.awssdk.codegen.utils.AuthUtils;
3333
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
3434
import software.amazon.awssdk.core.client.config.SdkClientOption;
35+
import software.amazon.awssdk.endpoints.EndpointProvider;
3536

3637
public class AsyncClientBuilderClass implements ClassSpec {
3738
private final IntermediateModel model;
@@ -126,6 +127,9 @@ private MethodSpec buildClientMethod() {
126127
.addStatement("$T clientConfiguration = super.asyncClientConfiguration()", SdkClientConfiguration.class)
127128
.addStatement("this.validateClientOptions(clientConfiguration)")
128129
.addStatement("$T endpointOverride = null", URI.class)
130+
.addStatement("$T endpointProvider = clientConfiguration.option($T.ENDPOINT_PROVIDER)",
131+
EndpointProvider.class,
132+
SdkClientOption.class)
129133
.addCode("if (clientConfiguration.option($T.ENDPOINT_OVERRIDDEN) != null"
130134
+ "&& $T.TRUE.equals(clientConfiguration.option($T.ENDPOINT_OVERRIDDEN))) {"
131135
+ "endpointOverride = clientConfiguration.option($T.ENDPOINT);"
@@ -135,6 +139,7 @@ private MethodSpec buildClientMethod() {
135139
+ ".overrideConfiguration(overrideConfiguration())"
136140
+ ".region(clientConfiguration.option($T.AWS_REGION))"
137141
+ ".endpointOverride(endpointOverride)"
142+
+ ".endpointProvider(endpointProvider)"
138143
+ ".build()",
139144
serviceConfigClassName, serviceConfigClassName, AwsClientOption.class)
140145
.addStatement("return new $T(serviceClientConfiguration, clientConfiguration)", clientClassName)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import software.amazon.awssdk.codegen.utils.AuthUtils;
3333
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
3434
import software.amazon.awssdk.core.client.config.SdkClientOption;
35+
import software.amazon.awssdk.endpoints.EndpointProvider;
3536

3637
public class SyncClientBuilderClass implements ClassSpec {
3738
private final IntermediateModel model;
@@ -126,6 +127,8 @@ private MethodSpec buildClientMethod() {
126127
.addStatement("$T clientConfiguration = super.syncClientConfiguration()", SdkClientConfiguration.class)
127128
.addStatement("this.validateClientOptions(clientConfiguration)")
128129
.addStatement("$T endpointOverride = null", URI.class)
130+
.addStatement("$T endpointProvider = clientConfiguration.option($T.ENDPOINT_PROVIDER)",
131+
EndpointProvider.class, SdkClientOption.class)
129132
.addCode("if (clientConfiguration.option($T.ENDPOINT_OVERRIDDEN) != null"
130133
+ "&& $T.TRUE.equals(clientConfiguration.option($T.ENDPOINT_OVERRIDDEN))) {"
131134
+ "endpointOverride = clientConfiguration.option($T.ENDPOINT);"
@@ -135,6 +138,7 @@ private MethodSpec buildClientMethod() {
135138
+ ".overrideConfiguration(overrideConfiguration())"
136139
+ ".region(clientConfiguration.option($T.AWS_REGION))"
137140
+ ".endpointOverride(endpointOverride)"
141+
+ ".endpointProvider(endpointProvider)"
138142
+ ".build()",
139143
serviceConfigClassName, serviceConfigClassName, AwsClientOption.class)
140144
.addStatement("return new $T(serviceClientConfiguration, clientConfiguration)", clientClassName)

codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/ServiceClientConfigurationClass.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import software.amazon.awssdk.codegen.poet.ClassSpec;
3232
import software.amazon.awssdk.codegen.poet.PoetUtils;
3333
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
34+
import software.amazon.awssdk.endpoints.EndpointProvider;
3435
import software.amazon.awssdk.regions.Region;
3536

3637
public class ServiceClientConfigurationClass implements ClassSpec {
@@ -110,6 +111,13 @@ private TypeSpec builderInterfaceSpec() {
110111
.returns(className().nestedClass("Builder"))
111112
.addJavadoc("Configure the client override configuration")
112113
.build())
114+
.addMethod(MethodSpec.methodBuilder("endpointProvider")
115+
.addAnnotation(Override.class)
116+
.addModifiers(PUBLIC, ABSTRACT)
117+
.addParameter(EndpointProvider.class, "endpointProvider")
118+
.returns(className().nestedClass("Builder"))
119+
.addJavadoc("Configure the endpointProvider")
120+
.build())
113121
.build();
114122
}
115123

@@ -150,6 +158,14 @@ private TypeSpec builderImplSpec() {
150158
.addStatement("this.endpointOverride = endpointOverride")
151159
.addStatement("return this")
152160
.build())
161+
.addMethod(MethodSpec.methodBuilder("endpointProvider")
162+
.addAnnotation(Override.class)
163+
.addModifiers(PUBLIC)
164+
.addParameter(EndpointProvider.class, "endpointProvider")
165+
.returns(className().nestedClass("Builder"))
166+
.addStatement("this.endpointProvider = endpointProvider")
167+
.addStatement("return this")
168+
.build())
153169
.addMethod(MethodSpec.methodBuilder("build")
154170
.addAnnotation(Override.class)
155171
.addModifiers(PUBLIC)

codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointParametersClassSpec.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.squareup.javapoet.FieldSpec;
2424
import com.squareup.javapoet.MethodSpec;
2525
import com.squareup.javapoet.ParameterSpec;
26+
import com.squareup.javapoet.ParameterizedTypeName;
27+
import com.squareup.javapoet.TypeName;
2628
import com.squareup.javapoet.TypeSpec;
2729
import java.util.Map;
2830
import javax.lang.model.element.Modifier;
@@ -33,6 +35,8 @@
3335
import software.amazon.awssdk.codegen.poet.ClassSpec;
3436
import software.amazon.awssdk.codegen.poet.PoetUtils;
3537
import software.amazon.awssdk.regions.Region;
38+
import software.amazon.awssdk.utils.builder.CopyableBuilder;
39+
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
3640

3741
public class EndpointParametersClassSpec implements ClassSpec {
3842
private final IntermediateModel intermediateModel;
@@ -53,13 +57,16 @@ public TypeSpec poetSpec() {
5357
.addType(builderInterfaceSpec())
5458
.addType(builderImplSpec())
5559
.addAnnotation(SdkPublicApi.class)
60+
.addSuperinterface(toCopyableBuilderInterface())
5661
.addModifiers(Modifier.PUBLIC, Modifier.FINAL);
5762

5863
parameters().forEach((name, model) -> {
5964
b.addField(fieldSpec(name, model).toBuilder().addModifiers(Modifier.FINAL).build());
6065
b.addMethod(accessorMethod(name, model));
6166
});
6267

68+
b.addMethod(toBuilderMethod());
69+
6370
return b.build();
6471
}
6572

@@ -70,6 +77,7 @@ public ClassName className() {
7077

7178
private TypeSpec builderInterfaceSpec() {
7279
TypeSpec.Builder b = TypeSpec.interfaceBuilder(builderInterfaceName())
80+
.addSuperinterface(copyableBuilderExtendsInterface())
7381
.addModifiers(Modifier.PUBLIC);
7482

7583
parameters().forEach((name, model) -> {
@@ -89,6 +97,11 @@ private TypeSpec builderImplSpec() {
8997
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
9098
.addSuperinterface(builderInterfaceName());
9199

100+
b.addMethod(MethodSpec.constructorBuilder()
101+
.addModifiers(Modifier.PRIVATE)
102+
.build());
103+
b.addMethod(toBuilderConstructor().build());
104+
92105
parameters().forEach((name, model) -> {
93106
b.addField(fieldSpec(name, model).toBuilder().initializer(defaultValueCode(model)).build());
94107
b.addMethod(builderSetterMethod(name, model));
@@ -183,6 +196,14 @@ private MethodSpec builderMethod() {
183196
.build();
184197
}
185198

199+
private MethodSpec toBuilderMethod() {
200+
return MethodSpec.methodBuilder("toBuilder")
201+
.addModifiers(Modifier.PUBLIC)
202+
.returns(builderInterfaceName())
203+
.addStatement("return new $T(this)", builderClassName())
204+
.build();
205+
}
206+
186207
private String variableName(String name) {
187208
return intermediateModel.getNamingStrategy().getVariableName(name);
188209
}
@@ -224,4 +245,25 @@ private MethodSpec.Builder paramMethodBuilder(String name, ParameterModel model)
224245
}
225246
return b;
226247
}
248+
249+
private MethodSpec.Builder toBuilderConstructor() {
250+
MethodSpec.Builder constructorBuilder = MethodSpec.constructorBuilder();
251+
constructorBuilder.addModifiers(Modifier.PRIVATE);
252+
constructorBuilder.addParameter(className(), "builder");
253+
parameters().forEach((name, model) -> {
254+
constructorBuilder.addStatement("this.$1N = builder.$1N", variableName(name));
255+
});
256+
return constructorBuilder;
257+
}
258+
259+
private TypeName toCopyableBuilderInterface() {
260+
return ParameterizedTypeName.get(ClassName.get(ToCopyableBuilder.class),
261+
className().nestedClass(builderInterfaceName().simpleName()),
262+
className());
263+
}
264+
265+
private TypeName copyableBuilderExtendsInterface() {
266+
return ParameterizedTypeName.get(ClassName.get(CopyableBuilder.class),
267+
builderInterfaceName(), className());
268+
}
227269
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
88
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
99
import software.amazon.awssdk.core.client.config.SdkClientOption;
10+
import software.amazon.awssdk.endpoints.EndpointProvider;
1011
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
1112

1213
/**
@@ -33,13 +34,14 @@ protected final JsonAsyncClient buildClient() {
3334
SdkClientConfiguration clientConfiguration = super.asyncClientConfiguration();
3435
this.validateClientOptions(clientConfiguration);
3536
URI endpointOverride = null;
37+
EndpointProvider endpointProvider = clientConfiguration.option(SdkClientOption.ENDPOINT_PROVIDER);
3638
if (clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN) != null
3739
&& Boolean.TRUE.equals(clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN))) {
3840
endpointOverride = clientConfiguration.option(SdkClientOption.ENDPOINT);
3941
}
4042
JsonServiceClientConfiguration serviceClientConfiguration = JsonServiceClientConfiguration.builder()
4143
.overrideConfiguration(overrideConfiguration()).region(clientConfiguration.option(AwsClientOption.AWS_REGION))
42-
.endpointOverride(endpointOverride).build();
44+
.endpointOverride(endpointOverride).endpointProvider(endpointProvider).build();
4345
return new DefaultJsonAsyncClient(serviceClientConfiguration, clientConfiguration);
4446
}
4547
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
88
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
99
import software.amazon.awssdk.core.client.config.SdkClientOption;
10+
import software.amazon.awssdk.endpoints.EndpointProvider;
1011
import software.amazon.awssdk.services.json.endpoints.JsonEndpointProvider;
1112

1213
/**
@@ -33,13 +34,14 @@ protected final JsonClient buildClient() {
3334
SdkClientConfiguration clientConfiguration = super.syncClientConfiguration();
3435
this.validateClientOptions(clientConfiguration);
3536
URI endpointOverride = null;
37+
EndpointProvider endpointProvider = clientConfiguration.option(SdkClientOption.ENDPOINT_PROVIDER);
3638
if (clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN) != null
3739
&& Boolean.TRUE.equals(clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN))) {
3840
endpointOverride = clientConfiguration.option(SdkClientOption.ENDPOINT);
3941
}
4042
JsonServiceClientConfiguration serviceClientConfiguration = JsonServiceClientConfiguration.builder()
4143
.overrideConfiguration(overrideConfiguration()).region(clientConfiguration.option(AwsClientOption.AWS_REGION))
42-
.endpointOverride(endpointOverride).build();
44+
.endpointOverride(endpointOverride).endpointProvider(endpointProvider).build();
4345
return new DefaultJsonClient(serviceClientConfiguration, clientConfiguration);
4446
}
4547
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/serviceclientconfiguration.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import software.amazon.awssdk.annotations.SdkPublicApi;
66
import software.amazon.awssdk.awscore.AwsServiceClientConfiguration;
77
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
8+
import software.amazon.awssdk.endpoints.EndpointProvider;
89
import software.amazon.awssdk.regions.Region;
910

1011
/**
@@ -45,6 +46,13 @@ public interface Builder extends AwsServiceClientConfiguration.Builder {
4546
*/
4647
@Override
4748
Builder overrideConfiguration(ClientOverrideConfiguration clientOverrideConfiguration);
49+
50+
/**
51+
* Configure the endpointProvider
52+
*/
53+
@Override
54+
Builder endpointProvider(EndpointProvider endpointProvider);
55+
4856
}
4957

5058
private static final class BuilderImpl extends AwsServiceClientConfiguration.BuilderImpl implements Builder {
@@ -73,6 +81,12 @@ public Builder endpointOverride(URI endpointOverride) {
7381
return this;
7482
}
7583

84+
@Override
85+
public Builder endpointProvider(EndpointProvider endpointProvider) {
86+
this.endpointProvider = endpointProvider;
87+
return this;
88+
}
89+
7690
@Override
7791
public JsonProtocolTestsServiceClientConfiguration build() {
7892
return new JsonProtocolTestsServiceClientConfiguration(this);

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import software.amazon.awssdk.annotations.Generated;
44
import software.amazon.awssdk.annotations.SdkPublicApi;
55
import software.amazon.awssdk.regions.Region;
6+
import software.amazon.awssdk.utils.builder.CopyableBuilder;
7+
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
68

79
/**
810
* The parameters object used to resolve an endpoint for the Query service.
911
*/
1012
@Generated("software.amazon.awssdk:codegen")
1113
@SdkPublicApi
12-
public final class QueryEndpointParams {
14+
public final class QueryEndpointParams implements ToCopyableBuilder<QueryEndpointParams.Builder, QueryEndpointParams> {
1315
private final Region region;
1416

1517
private final Boolean useDualStackEndpoint;
@@ -88,7 +90,11 @@ public String operationContextParam() {
8890
return operationContextParam;
8991
}
9092

91-
public interface Builder {
93+
public Builder toBuilder() {
94+
return new BuilderImpl(this);
95+
}
96+
97+
public interface Builder extends CopyableBuilder<Builder, QueryEndpointParams> {
9298
Builder region(Region region);
9399

94100
Builder useDualStackEndpoint(Boolean useDualStackEndpoint);
@@ -134,6 +140,22 @@ private static class BuilderImpl implements Builder {
134140

135141
private String operationContextParam;
136142

143+
private BuilderImpl() {
144+
}
145+
146+
private BuilderImpl(QueryEndpointParams builder) {
147+
this.region = builder.region;
148+
this.useDualStackEndpoint = builder.useDualStackEndpoint;
149+
this.useFIPSEndpoint = builder.useFIPSEndpoint;
150+
this.endpointId = builder.endpointId;
151+
this.defaultTrueParam = builder.defaultTrueParam;
152+
this.defaultStringParam = builder.defaultStringParam;
153+
this.deprecatedParam = builder.deprecatedParam;
154+
this.booleanContextParam = builder.booleanContextParam;
155+
this.stringContextParam = builder.stringContextParam;
156+
this.operationContextParam = builder.operationContextParam;
157+
}
158+
137159
@Override
138160
public Builder region(Region region) {
139161
this.region = region;

core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsServiceClientConfiguration.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import software.amazon.awssdk.annotations.SdkPublicApi;
2121
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
2222
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
23+
import software.amazon.awssdk.endpoints.EndpointProvider;
2324
import software.amazon.awssdk.regions.Region;
2425

2526
/**
@@ -81,6 +82,9 @@ public interface Builder extends SdkServiceClientConfiguration.Builder {
8182
@Override
8283
Builder endpointOverride(URI endpointOverride);
8384

85+
@Override
86+
Builder endpointProvider(EndpointProvider endpointProvider);
87+
8488
@Override
8589
AwsServiceClientConfiguration build();
8690
}
@@ -89,6 +93,7 @@ protected abstract static class BuilderImpl implements Builder {
8993
protected ClientOverrideConfiguration overrideConfiguration;
9094
protected Region region;
9195
protected URI endpointOverride;
96+
protected EndpointProvider endpointProvider;
9297

9398
protected BuilderImpl() {
9499
}
@@ -97,6 +102,7 @@ protected BuilderImpl(AwsServiceClientConfiguration awsServiceClientConfiguratio
97102
this.overrideConfiguration = awsServiceClientConfiguration.overrideConfiguration();
98103
this.region = awsServiceClientConfiguration.region();
99104
this.endpointOverride = awsServiceClientConfiguration.endpointOverride().orElse(null);
105+
this.endpointProvider = awsServiceClientConfiguration.endpointProvider().orElse(null);
100106
}
101107

102108
@Override
@@ -113,6 +119,12 @@ public final Region region() {
113119
public final URI endpointOverride() {
114120
return endpointOverride;
115121
}
122+
123+
@Override
124+
public final EndpointProvider endpointProvider() {
125+
return endpointProvider;
126+
}
127+
116128
}
117129

118130
}

0 commit comments

Comments
 (0)