Skip to content

Commit 8f8b9c2

Browse files
committed
Merge remote-tracking branch 'origin/feature/support-to-flatten-a-map' into feature/support-to-flatten-a-map
# Conflicts: # services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedIntegrationTestBase.java # services-custom/dynamodb-enhanced/src/it/java/software/amazon/awssdk/enhanced/dynamodb/ScanQueryWithFlattenMapIntegrationTest.java # services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/FlattenMapTest.java # services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/mapper/testbeans/flattenmap/FlattenMapValidBean.java
2 parents 80004fd + 950920d commit 8f8b9c2

File tree

4 files changed

+152
-4
lines changed

4 files changed

+152
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.enhanced.dynamodb.model;
17+
18+
import java.util.Map;
19+
import java.util.Objects;
20+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbFlattenMap;
21+
22+
public class RecordWithFlattenMap {
23+
24+
private String id;
25+
private Integer sort;
26+
private Integer value;
27+
private String gsiId;
28+
private Integer gsiSort;
29+
30+
private String stringAttribute;
31+
32+
private Map<String, String> attributesMap;
33+
34+
public String getId() {
35+
return id;
36+
}
37+
38+
public RecordWithFlattenMap setId(String id) {
39+
this.id = id;
40+
return this;
41+
}
42+
43+
public Integer getSort() {
44+
return sort;
45+
}
46+
47+
public RecordWithFlattenMap setSort(Integer sort) {
48+
this.sort = sort;
49+
return this;
50+
}
51+
52+
public Integer getValue() {
53+
return value;
54+
}
55+
56+
public RecordWithFlattenMap setValue(Integer value) {
57+
this.value = value;
58+
return this;
59+
}
60+
61+
public String getGsiId() {
62+
return gsiId;
63+
}
64+
65+
public RecordWithFlattenMap setGsiId(String gsiId) {
66+
this.gsiId = gsiId;
67+
return this;
68+
}
69+
70+
public Integer getGsiSort() {
71+
return gsiSort;
72+
}
73+
74+
public RecordWithFlattenMap setGsiSort(Integer gsiSort) {
75+
this.gsiSort = gsiSort;
76+
return this;
77+
}
78+
79+
public String getStringAttribute() {
80+
return stringAttribute;
81+
}
82+
83+
public RecordWithFlattenMap setStringAttribute(String stringAttribute) {
84+
this.stringAttribute = stringAttribute;
85+
return this;
86+
}
87+
88+
@DynamoDbFlattenMap
89+
public Map<String, String> getAttributesMap() {
90+
return attributesMap;
91+
}
92+
93+
public RecordWithFlattenMap setAttributesMap(Map<String, String> attributesMap) {
94+
this.attributesMap = attributesMap;
95+
return this;
96+
}
97+
98+
@Override
99+
public boolean equals(Object o) {
100+
if (this == o) return true;
101+
if (o == null || getClass() != o.getClass()) return false;
102+
RecordWithFlattenMap record = (RecordWithFlattenMap) o;
103+
return Objects.equals(id, record.id) &&
104+
Objects.equals(sort, record.sort) &&
105+
Objects.equals(value, record.value) &&
106+
Objects.equals(gsiId, record.gsiId) &&
107+
Objects.equals(stringAttribute, record.stringAttribute) &&
108+
Objects.equals(gsiSort, record.gsiSort);
109+
}
110+
111+
@Override
112+
public int hashCode() {
113+
return Objects.hash(id, sort, value, gsiId, gsiSort, stringAttribute);
114+
}
115+
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/FakeItem.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static software.amazon.awssdk.enhanced.dynamodb.extensions.VersionedRecordExtension.AttributeTags.versionAttribute;
1919
import static software.amazon.awssdk.enhanced.dynamodb.mapper.StaticAttributeTags.primaryPartitionKey;
2020

21+
import java.util.Map;
2122
import java.util.Objects;
2223
import java.util.UUID;
2324
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
@@ -31,6 +32,9 @@ public class FakeItem extends FakeItemAbstractSubclass {
3132
.flatten(FakeItemComposedClass.getTableSchema(),
3233
FakeItem::getComposedObject,
3334
FakeItem::setComposedObject)
35+
.flatten("attributesMap",
36+
FakeItem::getAttributesMap,
37+
FakeItem::setAttributesMap)
3438
.extend(getSubclassTableSchema())
3539
.addAttribute(String.class, a -> a.name("id")
3640
.getter(FakeItem::getId)
@@ -46,13 +50,16 @@ public class FakeItem extends FakeItemAbstractSubclass {
4650
private Integer version;
4751
private FakeItemComposedClass composedObject;
4852

53+
private Map<String, String> attributesMap;
54+
4955
public FakeItem() {
5056
}
5157

52-
public FakeItem(String id, Integer version, FakeItemComposedClass composedObject) {
58+
public FakeItem(String id, Integer version, FakeItemComposedClass composedObject, Map<String, String> attributesMap) {
5359
this.id = id;
5460
this.version = version;
5561
this.composedObject = composedObject;
62+
this.attributesMap = attributesMap;
5663
}
5764

5865
public static Builder builder() {
@@ -97,6 +104,14 @@ public void setComposedObject(FakeItemComposedClass composedObject) {
97104
this.composedObject = composedObject;
98105
}
99106

107+
public Map<String, String> getAttributesMap() {
108+
return attributesMap;
109+
}
110+
111+
public void setAttributesMap(Map<String, String> attributesMap) {
112+
this.attributesMap = attributesMap;
113+
}
114+
100115
@Override
101116
public boolean equals(Object o) {
102117
if (this == o) return true;
@@ -117,6 +132,7 @@ public static class Builder {
117132
private String id;
118133
private Integer version;
119134
private FakeItemComposedClass composedObject;
135+
private Map<String, String> attributesMap;
120136

121137
public Builder id(String id) {
122138
this.id = id;
@@ -133,8 +149,13 @@ public Builder composedObject(FakeItemComposedClass composedObject) {
133149
return this;
134150
}
135151

152+
public Builder testMap(Map<String, String> attributesMap) {
153+
this.attributesMap = attributesMap;
154+
return this;
155+
}
156+
136157
public FakeItem build() {
137-
return new FakeItem(id, version, composedObject);
158+
return new FakeItem(id, version, composedObject, attributesMap);
138159
}
139160
}
140161
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/models/RecordWithUpdateBehaviors.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
package software.amazon.awssdk.enhanced.dynamodb.functionaltests.models;
1717

1818
import java.time.Instant;
19+
import java.util.Map;
1920
import software.amazon.awssdk.enhanced.dynamodb.converters.EpochMillisFormatTestConverter;
2021
import software.amazon.awssdk.enhanced.dynamodb.converters.TimeFormatUpdateTestConverter;
2122
import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbAutoGeneratedTimestampAttribute;
2223
import software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbVersionAttribute;
2324
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
2425
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
2526
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbConvertedBy;
27+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbFlattenMap;
2628
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
2729
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbUpdateBehavior;
2830

@@ -40,6 +42,7 @@ public class RecordWithUpdateBehaviors {
4042
private Instant formattedLastAutoUpdatedOn;
4143
private NestedRecordWithUpdateBehavior nestedRecord;
4244
private String key;
45+
private Map<String, String> attributesMap;
4346

4447
@DynamoDbPartitionKey
4548
public String getId() {
@@ -133,4 +136,13 @@ public NestedRecordWithUpdateBehavior getNestedRecord() {
133136
public void setNestedRecord(NestedRecordWithUpdateBehavior nestedRecord) {
134137
this.nestedRecord = nestedRecord;
135138
}
139+
140+
@DynamoDbFlattenMap
141+
public Map<String, String> getAttributesMap() {
142+
return attributesMap;
143+
}
144+
145+
public void setAttributesMap(Map<String, String> attributesMap) {
146+
this.attributesMap = attributesMap;
147+
}
136148
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,7 +1322,7 @@ public void mapToItem_nestedBeanPreserveEmptyBean_shouldInitializeEmptyBean() {
13221322
.build();
13231323

13241324
FakeItemComposedClass nestedBean = new FakeItemComposedClass();
1325-
FakeItem fakeItem = new FakeItem("1", 1, nestedBean);
1325+
FakeItem fakeItem = new FakeItem("1", 1, nestedBean, new HashMap<>());
13261326

13271327
Map<String, AttributeValue> itemMap = staticTableSchema.itemToMap(fakeItem, false);
13281328

@@ -1347,7 +1347,7 @@ public void itemToMap_nestedBeanIgnoreNulls_shouldOmitNullFields() {
13471347
.build();
13481348

13491349
FakeItemComposedClass nestedBean = new FakeItemComposedClass();
1350-
FakeItem fakeItem = new FakeItem("1", 1, nestedBean);
1350+
FakeItem fakeItem = new FakeItem("1", 1, nestedBean, new HashMap<>());
13511351

13521352
Map<String, AttributeValue> itemMap = staticTableSchema.itemToMap(fakeItem, true);
13531353
AttributeValue expectedAttributeValue = AttributeValue.builder().m(new HashMap<>()).build();

0 commit comments

Comments
 (0)