From 4bc56c2f9ad720d4e91683b0f97306cf7686b1a2 Mon Sep 17 00:00:00 2001 From: Olivier Lepage-Applin Date: Tue, 25 Oct 2022 10:57:47 -0400 Subject: [PATCH 1/2] Update EnhancedAttributeValue to accept Collection for fromSetOf* methods --- .../attribute/EnhancedAttributeValue.java | 50 +++++++++++++++++++ .../attribute/EnhancedAttributeValueTest.java | 22 ++++++++ 2 files changed, 72 insertions(+) diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/EnhancedAttributeValue.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/EnhancedAttributeValue.java index 4996058a4ef7..209eb57f4ff9 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/EnhancedAttributeValue.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/EnhancedAttributeValue.java @@ -15,7 +15,9 @@ package software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -195,6 +197,22 @@ public static EnhancedAttributeValue fromSetOfStrings(String... setOfStringsValu return fromSetOfStrings(Arrays.asList(setOfStringsValue)); } + /** + * Create an {@link EnhancedAttributeValue} for a set-of-strings (ss) DynamoDB type. + * + *

+ * Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().ss(...).build())} + * + *

+ * This call will fail with a {@link RuntimeException} if the provided value is null or contains a null value. Use + * {@link #fromListOfAttributeValues(List)} for null values. This will not validate that there are no + * duplicate values. + */ + public static EnhancedAttributeValue fromSetOfStrings(Collection setOfStringsValue) { + Validate.paramNotNull(setOfStringsValue, "setOfStringsValue"); + return fromSetOfStrings(new ArrayList<>(setOfStringsValue)); + } + /** * Create an {@link EnhancedAttributeValue} for a set-of-strings (ss) DynamoDB type. * @@ -228,6 +246,22 @@ public static EnhancedAttributeValue fromSetOfNumbers(String... setOfNumbersValu return fromSetOfNumbers(Arrays.asList(setOfNumbersValue)); } + /** + * Create an {@link EnhancedAttributeValue} for a set-of-numbers (ns) DynamoDB type. + * + *

+ * Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().ns(...).build())} + * + *

+ * This call will fail with a {@link RuntimeException} if the provided value is null or contains a null value. Use + * {@link #fromListOfAttributeValues(List)} for null values. This will not validate that there are no + * duplicate values. + */ + public static EnhancedAttributeValue fromSetOfNumbers(Collection setOfNumbersValue) { + Validate.paramNotNull(setOfNumbersValue, "setOfNumbersValue"); + return fromSetOfNumbers(new ArrayList<>(setOfNumbersValue)); + } + /** * Create an {@link EnhancedAttributeValue} for a set-of-numbers (ns) DynamoDB type. * @@ -245,6 +279,22 @@ public static EnhancedAttributeValue fromSetOfNumbers(List setOfNumbersV return new InternalBuilder().setOfNumbersValue(setOfNumbersValue).build(); } + /** + * Create an {@link EnhancedAttributeValue} for a set-of-bytes (bs) DynamoDB type. + * + *

+ * Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().bs(...).build())} + * + *

+ * This call will fail with a {@link RuntimeException} if the provided value is null or contains a null value. Use + * {@link #fromListOfAttributeValues(List)} for null values. This will not validate that there are no + * duplicate values. + */ + public static EnhancedAttributeValue fromSetOfBytes(Collection setOfBytesValue) { + Validate.paramNotNull(setOfBytesValue, "setOfBytesValue"); + return fromSetOfBytes(new ArrayList<>(setOfBytesValue)); + } + /** * Create an {@link EnhancedAttributeValue} for a set-of-bytes (bs) DynamoDB type. * diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/EnhancedAttributeValueTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/EnhancedAttributeValueTest.java index 362d0c7b955a..2e8eb04856e1 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/EnhancedAttributeValueTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/EnhancedAttributeValueTest.java @@ -19,6 +19,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.Arrays; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -66,12 +67,24 @@ public void simpleFromMethodsCreateCorrectTypes() { assertThat(v.type()).isEqualTo(AttributeValueType.SS); }); + assertThat(EnhancedAttributeValue.fromSetOfStrings((Collection) Arrays.asList("a", "b"))).satisfies(v -> { + assertThat(v.isSetOfStrings()).isTrue(); + assertThat(v.asSetOfStrings()).containsExactly("a", "b"); + assertThat(v.type()).isEqualTo(AttributeValueType.SS); + }); + assertThat(EnhancedAttributeValue.fromSetOfNumbers(Arrays.asList("1", "2"))).satisfies(v -> { assertThat(v.isSetOfNumbers()).isTrue(); assertThat(v.asSetOfNumbers()).containsExactly("1", "2"); assertThat(v.type()).isEqualTo(AttributeValueType.NS); }); + assertThat(EnhancedAttributeValue.fromSetOfNumbers((Collection) Arrays.asList("1", "2"))).satisfies(v -> { + assertThat(v.isSetOfNumbers()).isTrue(); + assertThat(v.asSetOfNumbers()).containsExactly("1", "2"); + assertThat(v.type()).isEqualTo(AttributeValueType.NS); + }); + assertThat(EnhancedAttributeValue.fromSetOfBytes(Arrays.asList(SdkBytes.fromUtf8String("foo"), SdkBytes.fromUtf8String("foo2")))).satisfies(v -> { assertThat(v.isSetOfBytes()).isTrue(); @@ -80,6 +93,15 @@ public void simpleFromMethodsCreateCorrectTypes() { assertThat(v.type()).isEqualTo(AttributeValueType.BS); }); + assertThat(EnhancedAttributeValue + .fromSetOfBytes((Collection) Arrays.asList(SdkBytes.fromUtf8String("foo"), + SdkBytes.fromUtf8String("foo2")))).satisfies(v -> { + assertThat(v.isSetOfBytes()).isTrue(); + assertThat(v.asSetOfBytes().get(0).asUtf8String()).isEqualTo("foo"); + assertThat(v.asSetOfBytes().get(1).asUtf8String()).isEqualTo("foo2"); + assertThat(v.type()).isEqualTo(AttributeValueType.BS); + }); + assertThat(EnhancedAttributeValue.fromListOfAttributeValues(Arrays.asList(AttributeValue.builder().s("foo").build(), AttributeValue.builder().bool(true).build()))).satisfies(v -> { assertThat(v.isListOfAttributeValues()).isTrue(); From 38eb7b451e4a046cd67a628b7812cdb1d0095946 Mon Sep 17 00:00:00 2001 From: Olivier Lepage-Applin Date: Tue, 25 Oct 2022 11:09:33 -0400 Subject: [PATCH 2/2] Update EnhancedAttributeValue to accept Collection for fromSetOf* methods --- .changes/next-release/feature-AWSSDKforJavav2-19eabed.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/next-release/feature-AWSSDKforJavav2-19eabed.json diff --git a/.changes/next-release/feature-AWSSDKforJavav2-19eabed.json b/.changes/next-release/feature-AWSSDKforJavav2-19eabed.json new file mode 100644 index 000000000000..35ba616a0140 --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-19eabed.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "L-Applin", + "description": "Update EnhancedAttributeValue to accept Collection" +}