Skip to content

Commit 54d081b

Browse files
committed
Handle Surface API comments
2 parents 5c683e5 + b81b81e commit 54d081b

22 files changed

+3156
-1628
lines changed

docs/design/services/dynamodb/high-level-library/DocumentAPI.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ providers.
4444

4545
// New API in TableSchema to create a DocumentTableSchema
4646
DocumentTableSchema documentTableSchema =
47-
TableSchema.fromDocumentSchemaBuilder()
47+
TableSchema.documentSchemaBuilder()
4848
.addIndexPartitionKey(primaryIndexName(), "sample_hash_name", AttributeValueType.S)
4949
.addIndexSortKey("gsi_index", "sample_sort_name", AttributeValueType.N)
5050
.addAttributeConverterProviders(cutomAttributeConverters)
@@ -78,7 +78,7 @@ EnhancedDocument documentTableItem = documentTable.getItem(
7878
Number sampleSortvalue = documentTableItem.get("sample_sort_name", EnhancedType.of(Number.class));
7979

8080
// Accessing an attribute from document using specific getters.
81-
sampleSortvalue = documentTableItem.getSdkNumber("sample_sort_name");
81+
sampleSortvalue = documentTableItem.getNumber("sample_sort_name");
8282

8383
// Accessing an attribute of custom class using custom converters.
8484
CustomClass customClass = documentTableItem.get("custom_nested_map", new CustomAttributeConverter()));

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DefaultAttributeConverterProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.OptionalLongAttributeConverter;
6262
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.PeriodAttributeConverter;
6363
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SdkBytesAttributeConverter;
64+
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SdkNumberAttributeConverter;
6465
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SetAttributeConverter;
6566
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ShortAttributeConverter;
6667
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.StringAttributeConverter;
@@ -247,7 +248,8 @@ private static Builder getDefaultBuilder() {
247248
.addConverter(UuidAttributeConverter.create())
248249
.addConverter(ZonedDateTimeAsStringAttributeConverter.create())
249250
.addConverter(ZoneIdAttributeConverter.create())
250-
.addConverter(ZoneOffsetAttributeConverter.create());
251+
.addConverter(ZoneOffsetAttributeConverter.create())
252+
.addConverter(SdkNumberAttributeConverter.create());
251253
}
252254

253255
/**

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/TableSchema.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import java.util.Map;
2121
import software.amazon.awssdk.annotations.SdkPublicApi;
2222
import software.amazon.awssdk.annotations.ThreadSafe;
23+
import software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocument;
2324
import software.amazon.awssdk.enhanced.dynamodb.mapper.BeanTableSchema;
25+
import software.amazon.awssdk.enhanced.dynamodb.mapper.DocumentTableSchema;
2426
import software.amazon.awssdk.enhanced.dynamodb.mapper.ImmutableTableSchema;
2527
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema;
2628
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema;
@@ -84,6 +86,16 @@ static <T> BeanTableSchema<T> fromBean(Class<T> beanClass) {
8486
return BeanTableSchema.create(beanClass);
8587
}
8688

89+
/**
90+
* Provides interfaces to interact with DynamoDB tables as {@link EnhancedDocument} where the complete Schema of the table is
91+
* not required.
92+
*
93+
* @return A {@link DocumentTableSchema.Builder} for instantiating DocumentTableSchema.
94+
*/
95+
static DocumentTableSchema.Builder documentSchemaBuilder() {
96+
return DocumentTableSchema.builder();
97+
}
98+
8799
/**
88100
* Scans an immutable class that has been annotated with DynamoDb immutable annotations and then returns a
89101
* {@link ImmutableTableSchema} implementation of this interface that can map records to and from items of that

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocument.java

Lines changed: 197 additions & 218 deletions
Large diffs are not rendered by default.

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/JsonItemAttributeConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ public AttributeValue transformFrom(JsonNode input) {
7373

7474
@Override
7575
public JsonNode transformTo(AttributeValue input) {
76+
if (AttributeValue.fromNul(true).equals(input)) {
77+
return NullJsonNode.instance();
78+
}
7679
return EnhancedAttributeValue.fromAttributeValue(input).convert(VISITOR);
7780
}
7881

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/JsonNodeToAttributeValueMapConverter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static JsonNodeToAttributeValueMapConverter instance() {
3838

3939
@Override
4040
public AttributeValue visitNull() {
41-
return AttributeValue.builder().build();
41+
return AttributeValue.fromNul(true);
4242
}
4343

4444
@Override
@@ -70,7 +70,8 @@ public AttributeValue visitObject(Map<String, JsonNode> object) {
7070
.collect(Collectors.toMap(
7171
entry -> entry.getKey(),
7272
entry -> entry.getValue().visit(this),
73-
(left, right) -> left, LinkedHashMap::new))).build();
73+
(left, right) -> left, LinkedHashMap::new)))
74+
.build();
7475
}
7576

7677
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
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.internal.converter.attribute;
17+
18+
import software.amazon.awssdk.annotations.Immutable;
19+
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.annotations.ThreadSafe;
21+
import software.amazon.awssdk.core.SdkNumber;
22+
import software.amazon.awssdk.enhanced.dynamodb.AttributeConverter;
23+
import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType;
24+
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
25+
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.TypeConvertingVisitor;
26+
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.string.SdkNumberStringConverter;
27+
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
28+
29+
/**
30+
* A converter between {@link SdkNumber} and {@link AttributeValue}.
31+
*
32+
* <p>
33+
* This stores values in DynamoDB as a number.
34+
*
35+
* <p>
36+
* This supports reading the full range of integers supported by DynamoDB. For smaller numbers, consider using
37+
* {@link ShortAttributeConverter}, {@link IntegerAttributeConverter} or {@link LongAttributeConverter}.
38+
*
39+
* This can be created via {@link #create()}.
40+
*/
41+
@SdkInternalApi
42+
@ThreadSafe
43+
@Immutable
44+
public final class SdkNumberAttributeConverter implements AttributeConverter<SdkNumber> {
45+
private static final Visitor VISITOR = new Visitor();
46+
private static final SdkNumberStringConverter STRING_CONVERTER = SdkNumberStringConverter.create();
47+
48+
private SdkNumberAttributeConverter() {
49+
}
50+
51+
public static SdkNumberAttributeConverter create() {
52+
return new SdkNumberAttributeConverter();
53+
}
54+
55+
@Override
56+
public EnhancedType<SdkNumber> type() {
57+
return EnhancedType.of(SdkNumber.class);
58+
}
59+
60+
@Override
61+
public AttributeValueType attributeValueType() {
62+
return AttributeValueType.N;
63+
}
64+
65+
@Override
66+
public AttributeValue transformFrom(SdkNumber input) {
67+
return AttributeValue.builder().n(STRING_CONVERTER.toString(input)).build();
68+
}
69+
70+
@Override
71+
public SdkNumber transformTo(AttributeValue input) {
72+
if (input.n() != null) {
73+
return EnhancedAttributeValue.fromNumber(input.n()).convert(VISITOR);
74+
}
75+
return EnhancedAttributeValue.fromAttributeValue(input).convert(VISITOR);
76+
}
77+
78+
private static final class Visitor extends TypeConvertingVisitor<SdkNumber> {
79+
private Visitor() {
80+
super(SdkNumber.class, SdkNumberAttributeConverter.class);
81+
}
82+
83+
@Override
84+
public SdkNumber convertString(String value) {
85+
return STRING_CONVERTER.fromString(value);
86+
}
87+
88+
@Override
89+
public SdkNumber convertNumber(String value) {
90+
return STRING_CONVERTER.fromString(value);
91+
}
92+
}
93+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.internal.converter.string;
17+
18+
import software.amazon.awssdk.annotations.Immutable;
19+
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.annotations.ThreadSafe;
21+
import software.amazon.awssdk.core.SdkNumber;
22+
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
23+
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.StringConverter;
24+
25+
/**
26+
* A converter between {@link SdkNumber} and {@link String}.
27+
*
28+
* <p>
29+
* This converts values using {@link SdkNumber#toString()} and {@link SdkNumber#fromString(String)}}.
30+
*/
31+
@SdkInternalApi
32+
@ThreadSafe
33+
@Immutable
34+
public class SdkNumberStringConverter implements StringConverter<SdkNumber> {
35+
private SdkNumberStringConverter() {
36+
}
37+
38+
public static SdkNumberStringConverter create() {
39+
return new SdkNumberStringConverter();
40+
}
41+
42+
@Override
43+
public EnhancedType<SdkNumber> type() {
44+
return EnhancedType.of(SdkNumber.class);
45+
}
46+
47+
@Override
48+
public SdkNumber fromString(String string) {
49+
return SdkNumber.fromString(string);
50+
}
51+
}

0 commit comments

Comments
 (0)