Skip to content

Commit cb51803

Browse files
committed
code review changes
1 parent 6e51e6c commit cb51803

File tree

6 files changed

+195
-99
lines changed

6 files changed

+195
-99
lines changed
Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,43 +15,37 @@
1515

1616
package software.amazon.awssdk.enhanced.dynamodb.internal;
1717

18-
import static java.util.Collections.emptyList;
19-
20-
import java.util.Collection;
2118
import java.util.List;
22-
import java.util.Map;
2319
import java.util.stream.Collectors;
2420
import software.amazon.awssdk.annotations.SdkInternalApi;
2521
import software.amazon.awssdk.enhanced.dynamodb.IndexMetadata;
26-
import software.amazon.awssdk.enhanced.dynamodb.KeyAttributeMetadata;
2722
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
28-
import software.amazon.awssdk.enhanced.dynamodb.internal.client.IndexType;
2923
import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedGlobalSecondaryIndex;
3024
import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedLocalSecondaryIndex;
3125
import software.amazon.awssdk.services.dynamodb.model.ProjectionType;
3226

3327
@SdkInternalApi
34-
public final class IndexUtils {
28+
public class TableIndices {
29+
private final List<IndexMetadata> indices;
3530

36-
private IndexUtils() {
31+
public TableIndices(List<IndexMetadata> indices) {
32+
this.indices = indices;
3733
}
3834

39-
public static Map<IndexType, List<IndexMetadata>> splitSecondaryIndicesToLocalAndGlobalOnes(Collection<IndexMetadata> indices) {
35+
public List<EnhancedLocalSecondaryIndex> localSecondaryIndices() {
4036
return indices.stream()
4137
.filter(index -> !TableMetadata.primaryIndexName().equals(index.name()))
42-
.collect(Collectors.groupingBy(metadata -> {
43-
String partitionKeyName = metadata.partitionKey().map(KeyAttributeMetadata::name).orElse(null);
44-
if (partitionKeyName == null) {
45-
return IndexType.LSI;
46-
}
47-
return IndexType.GSI;
48-
}));
38+
.filter(index -> !index.partitionKey().isPresent())
39+
.map(TableIndices::mapIndexMetadataToEnhancedLocalSecondaryIndex)
40+
.collect(Collectors.toList());
4941
}
5042

51-
public static List<EnhancedLocalSecondaryIndex> extractLocalSecondaryIndices(Map<IndexType, List<IndexMetadata>> indicesGroups) {
52-
return indicesGroups.getOrDefault(IndexType.LSI, emptyList()).stream()
53-
.map(IndexUtils::mapIndexMetadataToEnhancedLocalSecondaryIndex)
54-
.collect(Collectors.toList());
43+
public List<EnhancedGlobalSecondaryIndex> globalSecondaryIndices() {
44+
return indices.stream()
45+
.filter(index -> !TableMetadata.primaryIndexName().equals(index.name()))
46+
.filter(index -> index.partitionKey().isPresent())
47+
.map(TableIndices::mapIndexMetadataToEnhancedGlobalSecondaryIndex)
48+
.collect(Collectors.toList());
5549
}
5650

5751
private static EnhancedLocalSecondaryIndex mapIndexMetadataToEnhancedLocalSecondaryIndex(IndexMetadata indexMetadata) {
@@ -61,12 +55,6 @@ private static EnhancedLocalSecondaryIndex mapIndexMetadataToEnhancedLocalSecond
6155
.build();
6256
}
6357

64-
public static List<EnhancedGlobalSecondaryIndex> extractGlobalSecondaryIndices(Map<IndexType, List<IndexMetadata>> indicesGroups) {
65-
return indicesGroups.getOrDefault(IndexType.GSI, emptyList()).stream()
66-
.map(IndexUtils::mapIndexMetadataToEnhancedGlobalSecondaryIndex)
67-
.collect(Collectors.toList());
68-
}
69-
7058
private static EnhancedGlobalSecondaryIndex mapIndexMetadataToEnhancedGlobalSecondaryIndex(IndexMetadata indexMetadata) {
7159
return EnhancedGlobalSecondaryIndex.builder()
7260
.indexName(indexMetadata.name())

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbAsyncTable.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,17 @@
1616
package software.amazon.awssdk.enhanced.dynamodb.internal.client;
1717

1818
import static software.amazon.awssdk.enhanced.dynamodb.internal.EnhancedClientUtils.createKeyFromItem;
19-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.extractGlobalSecondaryIndices;
20-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.extractLocalSecondaryIndices;
21-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.splitSecondaryIndicesToLocalAndGlobalOnes;
2219

23-
import java.util.Collection;
24-
import java.util.List;
25-
import java.util.Map;
20+
import java.util.ArrayList;
2621
import java.util.concurrent.CompletableFuture;
2722
import java.util.function.Consumer;
2823
import software.amazon.awssdk.annotations.SdkInternalApi;
2924
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
3025
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension;
31-
import software.amazon.awssdk.enhanced.dynamodb.IndexMetadata;
3226
import software.amazon.awssdk.enhanced.dynamodb.Key;
3327
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
3428
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
29+
import software.amazon.awssdk.enhanced.dynamodb.internal.TableIndices;
3530
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.CreateTableOperation;
3631
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DeleteItemOperation;
3732
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DeleteTableOperation;
@@ -121,11 +116,11 @@ public CompletableFuture<Void> createTable(Consumer<CreateTableEnhancedRequest.B
121116

122117
@Override
123118
public CompletableFuture<Void> createTable() {
124-
Collection<IndexMetadata> indices = tableSchema.tableMetadata().indices();
125-
Map<IndexType, List<IndexMetadata>> indexGroups = splitSecondaryIndicesToLocalAndGlobalOnes(indices);
119+
TableIndices indices = new TableIndices(new ArrayList<>(tableSchema.tableMetadata().indices()));
120+
126121
return createTable(CreateTableEnhancedRequest.builder()
127-
.localSecondaryIndices(extractLocalSecondaryIndices(indexGroups))
128-
.globalSecondaryIndices(extractGlobalSecondaryIndices(indexGroups))
122+
.localSecondaryIndices(indices.localSecondaryIndices())
123+
.globalSecondaryIndices(indices.globalSecondaryIndices())
129124
.build());
130125
}
131126

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbTable.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,16 @@
1616
package software.amazon.awssdk.enhanced.dynamodb.internal.client;
1717

1818
import static software.amazon.awssdk.enhanced.dynamodb.internal.EnhancedClientUtils.createKeyFromItem;
19-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.extractGlobalSecondaryIndices;
20-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.extractLocalSecondaryIndices;
21-
import static software.amazon.awssdk.enhanced.dynamodb.internal.IndexUtils.splitSecondaryIndicesToLocalAndGlobalOnes;
2219

23-
import java.util.Collection;
24-
import java.util.List;
25-
import java.util.Map;
20+
import java.util.ArrayList;
2621
import java.util.function.Consumer;
2722
import software.amazon.awssdk.annotations.SdkInternalApi;
2823
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension;
2924
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
30-
import software.amazon.awssdk.enhanced.dynamodb.IndexMetadata;
3125
import software.amazon.awssdk.enhanced.dynamodb.Key;
3226
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
3327
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
28+
import software.amazon.awssdk.enhanced.dynamodb.internal.TableIndices;
3429
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.CreateTableOperation;
3530
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DeleteItemOperation;
3631
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.DeleteTableOperation;
@@ -123,11 +118,11 @@ public void createTable(Consumer<CreateTableEnhancedRequest.Builder> requestCons
123118

124119
@Override
125120
public void createTable() {
126-
Collection<IndexMetadata> indices = tableSchema.tableMetadata().indices();
127-
Map<IndexType, List<IndexMetadata>> indexGroups = splitSecondaryIndicesToLocalAndGlobalOnes(indices);
121+
TableIndices indices = new TableIndices(new ArrayList<>(tableSchema.tableMetadata().indices()));
122+
128123
createTable(CreateTableEnhancedRequest.builder()
129-
.localSecondaryIndices(extractLocalSecondaryIndices(indexGroups))
130-
.globalSecondaryIndices(extractGlobalSecondaryIndices(indexGroups))
124+
.localSecondaryIndices(indices.localSecondaryIndices())
125+
.globalSecondaryIndices(indices.globalSecondaryIndices())
131126
.build());
132127
}
133128

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/IndexUtilsTest.java

Lines changed: 0 additions & 51 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package software.amazon.awssdk.enhanced.dynamodb;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.util.Arrays;
7+
import java.util.Collections;
8+
import java.util.List;
9+
import org.junit.jupiter.api.Test;
10+
import software.amazon.awssdk.enhanced.dynamodb.internal.TableIndices;
11+
import software.amazon.awssdk.enhanced.dynamodb.internal.mapper.StaticIndexMetadata;
12+
import software.amazon.awssdk.enhanced.dynamodb.internal.mapper.StaticKeyAttributeMetadata;
13+
import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedGlobalSecondaryIndex;
14+
import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedLocalSecondaryIndex;
15+
16+
public class TableIndicesTest {
17+
18+
@Test
19+
public void testLocalSecondaryIndices_onlyIncludesLSIs() {
20+
List<IndexMetadata> indices = Arrays.asList(StaticIndexMetadata.builder()
21+
.name("lsi-1")
22+
.build(),
23+
StaticIndexMetadata.builder()
24+
.name("lsi-2")
25+
.build(),
26+
StaticIndexMetadata.builder()
27+
.name("gsi-1")
28+
.partitionKey(StaticKeyAttributeMetadata.create(
29+
"GlobalIndexPartitionKey",
30+
AttributeValueType.N))
31+
.build());
32+
33+
TableIndices tableIndices = new TableIndices(indices);
34+
35+
List<EnhancedLocalSecondaryIndex> lsiList = tableIndices.localSecondaryIndices();
36+
37+
assertEquals(2, lsiList.size());
38+
assertTrue(lsiList.stream().anyMatch(i -> "lsi-1".equals(i.indexName())));
39+
assertTrue(lsiList.stream().anyMatch(i -> "lsi-2".equals(i.indexName())));
40+
}
41+
42+
@Test
43+
public void testGlobalSecondaryIndices_onlyIncludesGSIs() {
44+
List<IndexMetadata> indices = Arrays.asList(StaticIndexMetadata.builder()
45+
.name("lsi-1")
46+
.build(),
47+
StaticIndexMetadata.builder()
48+
.name("gsi-1")
49+
.partitionKey(StaticKeyAttributeMetadata.create(
50+
"GlobalIndexPartitionKey1",
51+
AttributeValueType.N))
52+
.build(),
53+
StaticIndexMetadata.builder()
54+
.name("gsi-2")
55+
.partitionKey(StaticKeyAttributeMetadata.create(
56+
"GlobalIndexPartitionKey2",
57+
AttributeValueType.N))
58+
.build());
59+
60+
TableIndices tableIndices = new TableIndices(indices);
61+
62+
List<EnhancedGlobalSecondaryIndex> gsiList = tableIndices.globalSecondaryIndices();
63+
64+
assertEquals(2, gsiList.size());
65+
assertTrue(gsiList.stream().anyMatch(i -> "gsi-1".equals(i.indexName())));
66+
assertTrue(gsiList.stream().anyMatch(i -> "gsi-2".equals(i.indexName())));
67+
}
68+
69+
@Test
70+
public void testPrimaryIndexIsExcluded() {
71+
List<IndexMetadata> indices = Arrays.asList(StaticIndexMetadata.builder()
72+
.name(TableMetadata.primaryIndexName())
73+
.partitionKey(StaticKeyAttributeMetadata.create("pk",
74+
AttributeValueType.S))
75+
.build(),
76+
StaticIndexMetadata.builder()
77+
.name("lsi-1")
78+
.build(),
79+
StaticIndexMetadata.builder()
80+
.name("gsi-1")
81+
.partitionKey(StaticKeyAttributeMetadata.create(
82+
"GlobalIndexPartitionKey",
83+
AttributeValueType.N))
84+
.build());
85+
86+
TableIndices tableIndices = new TableIndices(indices);
87+
88+
List<EnhancedGlobalSecondaryIndex> gsiList = tableIndices.globalSecondaryIndices();
89+
List<EnhancedLocalSecondaryIndex> lsiList = tableIndices.localSecondaryIndices();
90+
91+
assertEquals(1, gsiList.size());
92+
assertEquals("gsi-1", gsiList.get(0).indexName());
93+
94+
assertEquals(1, lsiList.size());
95+
assertEquals("lsi-1", lsiList.get(0).indexName());
96+
}
97+
98+
@Test
99+
public void testEmptyIndexList() {
100+
TableIndices tableIndices = new TableIndices(Collections.emptyList());
101+
102+
assertTrue(tableIndices.globalSecondaryIndices().isEmpty());
103+
assertTrue(tableIndices.localSecondaryIndices().isEmpty());
104+
}
105+
}

0 commit comments

Comments
 (0)