Skip to content

Commit 2cea127

Browse files
authored
Merge branch 'master' into bole_cloudfront_fix
2 parents 99e0a5b + 78ab1ce commit 2cea127

15 files changed

Lines changed: 447 additions & 56 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Migrate PartitionMetadata code generation from endpoints.json to partitions.json"
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Migrate PartitionMetadataProvider code generation from endpoints.json to partitions.json"
6+
}

codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/RegionGenerationMojo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ public void execute() throws MojoExecutionException {
7373
Partitions partitions = RegionMetadataLoader.build(endpoints);
7474
PartitionsRegionsMetadata regionPartitions = PartitionsRegionsMetadataLoader.build(partitionsJson);
7575

76-
generatePartitionMetadataClass(baseSourcesDirectory, partitions);
76+
generatePartitionMetadataClass(baseSourcesDirectory, regionPartitions);
7777
generateRegionClass(baseSourcesDirectory, regionPartitions);
7878
generateServiceMetadata(baseSourcesDirectory, partitions);
7979
generateRegions(baseSourcesDirectory, regionPartitions);
80-
generatePartitionProvider(baseSourcesDirectory, partitions);
80+
generatePartitionProvider(baseSourcesDirectory, regionPartitions);
8181
generateRegionProvider(baseSourcesDirectory, regionPartitions);
8282
generateServiceProvider(baseSourcesDirectory, partitions);
8383
generateEndpointTags(baseSourcesDirectory, partitions);
@@ -86,7 +86,7 @@ public void execute() throws MojoExecutionException {
8686
project.addTestCompileSourceRoot(testsDirectory.toFile().getAbsolutePath());
8787
}
8888

89-
public void generatePartitionMetadataClass(Path baseSourcesDirectory, Partitions partitions) {
89+
public void generatePartitionMetadataClass(Path baseSourcesDirectory, PartitionsRegionsMetadata partitions) {
9090
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(PARTITION_METADATA_BASE, ".", "/"));
9191
partitions.getPartitions()
9292
.forEach(p -> new CodeGenerator(sourcesDirectory.toString(),
@@ -125,7 +125,7 @@ public void generateRegions(Path baseSourcesDirectory, PartitionsRegionsMetadata
125125
.generate()));
126126
}
127127

128-
public void generatePartitionProvider(Path baseSourcesDirectory, Partitions partitions) {
128+
public void generatePartitionProvider(Path baseSourcesDirectory, PartitionsRegionsMetadata partitions) {
129129
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
130130
new CodeGenerator(sourcesDirectory.toString(), new PartitionMetadataProviderGenerator(partitions,
131131
PARTITION_METADATA_BASE,

codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/regions/PartitionMetadataGenerator.java

Lines changed: 85 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
package software.amazon.awssdk.codegen.lite.regions;
1717

18-
import static java.util.Collections.emptyList;
1918
import static javax.lang.model.element.Modifier.FINAL;
2019
import static javax.lang.model.element.Modifier.PRIVATE;
2120
import static javax.lang.model.element.Modifier.PUBLIC;
@@ -29,7 +28,9 @@
2928
import com.squareup.javapoet.ParameterizedTypeName;
3029
import com.squareup.javapoet.TypeName;
3130
import com.squareup.javapoet.TypeSpec;
31+
import java.util.Arrays;
3232
import java.util.Collection;
33+
import java.util.Collections;
3334
import java.util.Map;
3435
import java.util.stream.Collectors;
3536
import java.util.stream.Stream;
@@ -38,16 +39,35 @@
3839
import software.amazon.awssdk.annotations.SdkPublicApi;
3940
import software.amazon.awssdk.codegen.lite.PoetClass;
4041
import software.amazon.awssdk.codegen.lite.Utils;
41-
import software.amazon.awssdk.codegen.lite.regions.model.Partition;
42+
import software.amazon.awssdk.codegen.lite.regions.model.PartitionRegionsMetadata;
4243
import software.amazon.awssdk.utils.ImmutableMap;
44+
import software.amazon.awssdk.utils.StringUtils;
4345

4446
public class PartitionMetadataGenerator implements PoetClass {
4547

46-
private final Partition partition;
48+
/**
49+
* Hardcoded mapping of partition IDs to display names.
50+
* This preserves backward compatibility since partitions.json only provides
51+
* partition IDs, while the old endpoints.json had separate partitionName fields.
52+
* New partitions will fall back to using their ID as the display name.
53+
*/
54+
private static final Map<String, String> PARTITION_DISPLAY_NAMES =
55+
ImmutableMap.<String, String>builder()
56+
.put("aws", "AWS Standard")
57+
.put("aws-cn", "AWS China")
58+
.put("aws-us-gov", "AWS GovCloud (US)")
59+
.put("aws-iso", "AWS ISO (US)")
60+
.put("aws-iso-b", "AWS ISOB (US)")
61+
.put("aws-iso-e", "AWS ISOE (Europe)")
62+
.put("aws-iso-f", "AWS ISOF")
63+
.put("aws-eusc", "AWS EUSC")
64+
.build();
65+
66+
private final PartitionRegionsMetadata partition;
4767
private final String basePackage;
4868
private final String regionBasePackage;
4969

50-
public PartitionMetadataGenerator(Partition partition,
70+
public PartitionMetadataGenerator(PartitionRegionsMetadata partition,
5171
String basePackage,
5272
String regionBasePackage) {
5373
this.partition = partition;
@@ -80,11 +100,12 @@ public TypeSpec poetClass() {
80100
.build())
81101
.addField(FieldSpec.builder(String.class, "ID")
82102
.addModifiers(PRIVATE, FINAL, STATIC)
83-
.initializer("$S", partition.getPartition())
103+
.initializer("$S", partition.getId())
84104
.build())
85105
.addField(FieldSpec.builder(String.class, "NAME")
86106
.addModifiers(PRIVATE, FINAL, STATIC)
87-
.initializer("$S", partition.getPartitionName())
107+
.initializer("$S", PARTITION_DISPLAY_NAMES.getOrDefault(
108+
partition.getId(), partition.getId()))
88109
.build())
89110
.addField(FieldSpec.builder(String.class, "REGION_REGEX")
90111
.addModifiers(PRIVATE, FINAL, STATIC)
@@ -103,18 +124,33 @@ private CodeBlock dnsSuffixes() {
103124
CodeBlock.builder()
104125
.add("$T.<$T, $T>builder()", ImmutableMap.class, partitionEndpointKeyClass(), String.class);
105126

127+
String defaultDnsSuffix = partition.getOutputs().getDnsSuffix();
128+
String dualStackDnsSuffix = partition.getOutputs().getDualStackDnsSuffix();
129+
boolean supportsFips = partition.getOutputs().isSupportsFIPS();
130+
boolean supportsDualStack = partition.getOutputs().isSupportsDualStack();
131+
106132
builder.add(".put(")
107-
.add(partitionEndpointKey(emptyList()))
108-
.add(", $S)", partition.getDnsSuffix());
109-
110-
if (partition.getDefaults() != null) {
111-
partition.getDefaults().getVariants().forEach(variant -> {
112-
if (variant.getDnsSuffix() != null) {
113-
builder.add(".put(")
114-
.add(partitionEndpointKey(variant.getTags()))
115-
.add(", $S)", variant.getDnsSuffix());
116-
}
117-
});
133+
.add(partitionEndpointKey(Collections.emptyList()))
134+
.add(", $S)", defaultDnsSuffix);
135+
136+
if (supportsFips) {
137+
builder.add(".put(")
138+
.add(partitionEndpointKey(Collections.singletonList("fips")))
139+
.add(", $S)", defaultDnsSuffix);
140+
}
141+
142+
if (supportsDualStack && supportsFips) {
143+
validateDualStackDnsSuffix(dualStackDnsSuffix);
144+
builder.add(".put(")
145+
.add(partitionEndpointKey(Arrays.asList("dualstack", "fips")))
146+
.add(", $S)", dualStackDnsSuffix);
147+
}
148+
149+
if (supportsDualStack) {
150+
validateDualStackDnsSuffix(dualStackDnsSuffix);
151+
builder.add(".put(")
152+
.add(partitionEndpointKey(Collections.singletonList("dualstack")))
153+
.add(", $S)", dualStackDnsSuffix);
118154
}
119155

120156
return builder.add(".build()").build();
@@ -125,19 +161,32 @@ private CodeBlock hostnames() {
125161
CodeBlock.builder()
126162
.add("$T.<$T, $T>builder()", ImmutableMap.class, partitionEndpointKeyClass(), String.class);
127163

164+
boolean supportsFips = partition.getOutputs().isSupportsFIPS();
165+
boolean supportsDualStack = partition.getOutputs().isSupportsDualStack();
166+
String dualStackDnsSuffix = partition.getOutputs().getDualStackDnsSuffix();
128167

129-
if (partition.getDefaults() != null) {
168+
builder.add(".put(")
169+
.add(partitionEndpointKey(Collections.emptyList()))
170+
.add(", $S)", "{service}.{region}.{dnsSuffix}");
171+
172+
if (supportsFips) {
173+
builder.add(".put(")
174+
.add(partitionEndpointKey(Collections.singletonList("fips")))
175+
.add(", $S)", "{service}-fips.{region}.{dnsSuffix}");
176+
}
177+
178+
if (supportsDualStack && supportsFips) {
179+
validateDualStackDnsSuffix(dualStackDnsSuffix);
180+
builder.add(".put(")
181+
.add(partitionEndpointKey(Arrays.asList("dualstack", "fips")))
182+
.add(", $S)", "{service}-fips.{region}.{dnsSuffix}");
183+
}
184+
185+
if (supportsDualStack) {
186+
validateDualStackDnsSuffix(dualStackDnsSuffix);
130187
builder.add(".put(")
131-
.add(partitionEndpointKey(emptyList()))
132-
.add(", $S)", partition.getDefaults().getHostname());
133-
134-
partition.getDefaults().getVariants().forEach(variant -> {
135-
if (variant.getHostname() != null) {
136-
builder.add(".put(")
137-
.add(partitionEndpointKey(variant.getTags()))
138-
.add(", $S)", variant.getHostname());
139-
}
140-
});
188+
.add(partitionEndpointKey(Collections.singletonList("dualstack")))
189+
.add(", $S)", "{service}.{region}.{dnsSuffix}");
141190
}
142191

143192
return builder.add(".build()").build();
@@ -165,7 +214,7 @@ private MethodSpec hostnameGetter() {
165214

166215
@Override
167216
public ClassName className() {
168-
return ClassName.get(basePackage, Stream.of(partition.getPartition().split("-"))
217+
return ClassName.get(basePackage, Stream.of(partition.getId().split("-"))
169218
.map(Utils::capitalize)
170219
.collect(Collectors.joining()) + "PartitionMetadata");
171220
}
@@ -179,6 +228,13 @@ private MethodSpec getter(String methodName, String field) {
179228
.build();
180229
}
181230

231+
private void validateDualStackDnsSuffix(String dualStackDnsSuffix) {
232+
if (StringUtils.isBlank(dualStackDnsSuffix)) {
233+
throw new IllegalStateException("Partition " + partition.getId()
234+
+ " claims to support dualstack but dualStackDnsSuffix is null or empty");
235+
}
236+
}
237+
182238
private CodeBlock partitionEndpointKey(Collection<String> tags) {
183239
CodeBlock.Builder result = CodeBlock.builder();
184240
result.add("$T.builder()", partitionEndpointKeyClass());

codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/regions/PartitionMetadataProviderGenerator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@
3535
import software.amazon.awssdk.annotations.SdkPublicApi;
3636
import software.amazon.awssdk.codegen.lite.PoetClass;
3737
import software.amazon.awssdk.codegen.lite.Utils;
38-
import software.amazon.awssdk.codegen.lite.regions.model.Partitions;
38+
import software.amazon.awssdk.codegen.lite.regions.model.PartitionsRegionsMetadata;
3939
import software.amazon.awssdk.utils.ImmutableMap;
4040

4141
public class PartitionMetadataProviderGenerator implements PoetClass {
42-
private final Partitions partitions;
42+
private final PartitionsRegionsMetadata partitions;
4343
private final String basePackage;
4444
private final String regionBasePackage;
4545

46-
public PartitionMetadataProviderGenerator(Partitions partitions,
46+
public PartitionMetadataProviderGenerator(PartitionsRegionsMetadata partitions,
4747
String basePackage,
4848
String regionBasePackage) {
4949
this.partitions = partitions;
@@ -78,11 +78,11 @@ public ClassName className() {
7878
return ClassName.get(regionBasePackage, "GeneratedPartitionMetadataProvider");
7979
}
8080

81-
private CodeBlock partitions(Partitions partitions) {
81+
private CodeBlock partitions(PartitionsRegionsMetadata partitions) {
8282
CodeBlock.Builder builder = CodeBlock.builder().add("$T.<String, PartitionMetadata>builder()", ImmutableMap.class);
8383

8484
partitions.getPartitions()
85-
.forEach(p -> builder.add(".put($S, new $T())", p.getPartition(), partitionMetadataClass(p.getPartition())));
85+
.forEach(p -> builder.add(".put($S, new $T())", p.getId(), partitionMetadataClass(p.getId())));
8686

8787
return builder.add(".build()").build();
8888
}

codegen-lite/src/test/java/software/amazon/awssdk/codegen/lite/regions/RegionGenerationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void serviceMetadataProviderClass() {
105105

106106
@Test
107107
public void partitionMetadataClass() {
108-
PartitionMetadataGenerator partitionMetadataGenerator = new PartitionMetadataGenerator(partitions.getPartitions().get(0),
108+
PartitionMetadataGenerator partitionMetadataGenerator = new PartitionMetadataGenerator(partitionsRegions.getPartitions().get(0),
109109
PARTITION_METADATA_BASE,
110110
REGION_BASE);
111111

@@ -122,7 +122,7 @@ public void endpointTagClass() {
122122
@Test
123123
public void partitionMetadataProviderClass() {
124124
PartitionMetadataProviderGenerator partitionMetadataProviderGenerator =
125-
new PartitionMetadataProviderGenerator(partitions, PARTITION_METADATA_BASE, REGION_BASE);
125+
new PartitionMetadataProviderGenerator(partitionsRegions, PARTITION_METADATA_BASE, REGION_BASE);
126126

127127
assertThat(partitionMetadataProviderGenerator, generatesTo("partition-metadata-provider.java"));
128128
}

codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/regions/partition-metadata-provider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import software.amazon.awssdk.annotations.Generated;
55
import software.amazon.awssdk.annotations.SdkPublicApi;
66
import software.amazon.awssdk.regions.partitionmetadata.AwsCnPartitionMetadata;
7+
import software.amazon.awssdk.regions.partitionmetadata.AwsEuscPartitionMetadata;
78
import software.amazon.awssdk.regions.partitionmetadata.AwsIsoBPartitionMetadata;
9+
import software.amazon.awssdk.regions.partitionmetadata.AwsIsoEPartitionMetadata;
10+
import software.amazon.awssdk.regions.partitionmetadata.AwsIsoFPartitionMetadata;
811
import software.amazon.awssdk.regions.partitionmetadata.AwsIsoPartitionMetadata;
912
import software.amazon.awssdk.regions.partitionmetadata.AwsPartitionMetadata;
1013
import software.amazon.awssdk.regions.partitionmetadata.AwsUsGovPartitionMetadata;
@@ -16,7 +19,8 @@ public final class GeneratedPartitionMetadataProvider implements PartitionMetada
1619
private static final Map<String, PartitionMetadata> PARTITION_METADATA = ImmutableMap.<String, PartitionMetadata> builder()
1720
.put("aws", new AwsPartitionMetadata()).put("aws-cn", new AwsCnPartitionMetadata())
1821
.put("aws-us-gov", new AwsUsGovPartitionMetadata()).put("aws-iso", new AwsIsoPartitionMetadata())
19-
.put("aws-iso-b", new AwsIsoBPartitionMetadata()).build();
22+
.put("aws-iso-b", new AwsIsoBPartitionMetadata()).put("aws-iso-e", new AwsIsoEPartitionMetadata())
23+
.put("aws-iso-f", new AwsIsoFPartitionMetadata()).put("aws-eusc", new AwsEuscPartitionMetadata()).build();
2024

2125
public PartitionMetadata partitionMetadata(String partition) {
2226
return PARTITION_METADATA.get(partition);

codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/regions/partition-metadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public final class AwsPartitionMetadata implements PartitionMetadata {
3030

3131
private static final String NAME = "AWS Standard";
3232

33-
private static final String REGION_REGEX = "^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$";
33+
private static final String REGION_REGEX = "^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$";
3434

3535
@Override
3636
public String id() {

test/region-testing/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
</goals>
103103
<configuration>
104104
<endpoints>${basedir}/src/test/resources/variants-test-endpoints.json</endpoints>
105+
<partitionsJson>${basedir}/src/test/resources/variants-test-partitions.json</partitionsJson>
105106
</configuration>
106107
</execution>
107108
</executions>

0 commit comments

Comments
 (0)