Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/next-release/feature-AWSSDKforJavav2-19eabed.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"type": "feature",
"category": "AWS SDK for Java v2",
"contributor": "L-Applin",
"description": "Update EnhancedAttributeValue to accept Collection"
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
*
* <p>
* Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().ss(...).build())}
*
* <p>
* 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 <i>will not</i> validate that there are no
* duplicate values.
*/
public static EnhancedAttributeValue fromSetOfStrings(Collection<String> setOfStringsValue) {
Validate.paramNotNull(setOfStringsValue, "setOfStringsValue");
return fromSetOfStrings(new ArrayList<>(setOfStringsValue));
}

/**
* Create an {@link EnhancedAttributeValue} for a set-of-strings (ss) DynamoDB type.
*
Expand Down Expand Up @@ -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.
*
* <p>
* Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().ns(...).build())}
*
* <p>
* 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 <i>will not</i> validate that there are no
* duplicate values.
*/
public static EnhancedAttributeValue fromSetOfNumbers(Collection<String> setOfNumbersValue) {
Validate.paramNotNull(setOfNumbersValue, "setOfNumbersValue");
return fromSetOfNumbers(new ArrayList<>(setOfNumbersValue));
}

/**
* Create an {@link EnhancedAttributeValue} for a set-of-numbers (ns) DynamoDB type.
*
Expand All @@ -245,6 +279,22 @@ public static EnhancedAttributeValue fromSetOfNumbers(List<String> setOfNumbersV
return new InternalBuilder().setOfNumbersValue(setOfNumbersValue).build();
}

/**
* Create an {@link EnhancedAttributeValue} for a set-of-bytes (bs) DynamoDB type.
*
* <p>
* Equivalent to: {@code EnhancedAttributeValue.fromGeneratedAttributeValue(AttributeValue.builder().bs(...).build())}
*
* <p>
* 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 <i>will not</i> validate that there are no
* duplicate values.
*/
public static EnhancedAttributeValue fromSetOfBytes(Collection<SdkBytes> setOfBytesValue) {
Validate.paramNotNull(setOfBytesValue, "setOfBytesValue");
return fromSetOfBytes(new ArrayList<>(setOfBytesValue));
}

/**
* Create an {@link EnhancedAttributeValue} for a set-of-bytes (bs) DynamoDB type.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -66,12 +67,24 @@ public void simpleFromMethodsCreateCorrectTypes() {
assertThat(v.type()).isEqualTo(AttributeValueType.SS);
});

assertThat(EnhancedAttributeValue.fromSetOfStrings((Collection<String>) 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<String>) 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();
Expand All @@ -80,6 +93,15 @@ public void simpleFromMethodsCreateCorrectTypes() {
assertThat(v.type()).isEqualTo(AttributeValueType.BS);
});

assertThat(EnhancedAttributeValue
.fromSetOfBytes((Collection<SdkBytes>) 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();
Expand Down