Skip to content

Handled surface api comments of removing Generic access as Objects #3811

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from 13 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
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ providers.

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

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

// Accessing an attribute of custom class using custom converters.
CustomClass customClass = documentTableItem.get("custom_nested_map", new CustomAttributeConverter()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.OptionalLongAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.PeriodAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SdkBytesAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SdkNumberAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.SetAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ShortAttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.StringAttributeConverter;
Expand Down Expand Up @@ -247,7 +248,8 @@ private static Builder getDefaultBuilder() {
.addConverter(UuidAttributeConverter.create())
.addConverter(ZonedDateTimeAsStringAttributeConverter.create())
.addConverter(ZoneIdAttributeConverter.create())
.addConverter(ZoneOffsetAttributeConverter.create());
.addConverter(ZoneOffsetAttributeConverter.create())
.addConverter(SdkNumberAttributeConverter.create());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
import java.util.Map;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.annotations.ThreadSafe;
import software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocument;
import software.amazon.awssdk.enhanced.dynamodb.mapper.BeanTableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.DocumentTableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.ImmutableTableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema;
Expand Down Expand Up @@ -84,6 +86,16 @@ static <T> BeanTableSchema<T> fromBean(Class<T> beanClass) {
return BeanTableSchema.create(beanClass);
}

/**
* Provides interfaces to interact with DynamoDB tables as {@link EnhancedDocument} where the complete Schema of the table is
* not required.
*
* @return A {@link DocumentTableSchema.Builder} for instantiating DocumentTableSchema.
*/
static DocumentTableSchema.Builder documentSchemaBuilder() {
return DocumentTableSchema.builder();
}

/**
* Scans an immutable class that has been annotated with DynamoDb immutable annotations and then returns a
* {@link ImmutableTableSchema} implementation of this interface that can map records to and from items of that
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ public AttributeValue transformFrom(JsonNode input) {

@Override
public JsonNode transformTo(AttributeValue input) {
if (AttributeValue.fromNul(true).equals(input)) {
return NullJsonNode.instance();
}
return EnhancedAttributeValue.fromAttributeValue(input).convert(VISITOR);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static JsonNodeToAttributeValueMapConverter instance() {

@Override
public AttributeValue visitNull() {
return AttributeValue.builder().build();
return AttributeValue.fromNul(true);
}

@Override
Expand Down Expand Up @@ -70,7 +70,8 @@ public AttributeValue visitObject(Map<String, JsonNode> object) {
.collect(Collectors.toMap(
entry -> entry.getKey(),
entry -> entry.getValue().visit(this),
(left, right) -> left, LinkedHashMap::new))).build();
(left, right) -> left, LinkedHashMap::new)))
.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute;

import software.amazon.awssdk.annotations.Immutable;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.annotations.ThreadSafe;
import software.amazon.awssdk.core.SdkNumber;
import software.amazon.awssdk.enhanced.dynamodb.AttributeConverter;
import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType;
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.TypeConvertingVisitor;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.string.SdkNumberStringConverter;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;

/**
* A converter between {@link SdkNumber} and {@link AttributeValue}.
*
* <p>
* This stores values in DynamoDB as a number.
*
* <p>
* This supports reading the full range of integers supported by DynamoDB. For smaller numbers, consider using
* {@link ShortAttributeConverter}, {@link IntegerAttributeConverter} or {@link LongAttributeConverter}.
*
* This can be created via {@link #create()}.
*/
@SdkInternalApi
@ThreadSafe
@Immutable
public final class SdkNumberAttributeConverter implements AttributeConverter<SdkNumber> {
private static final Visitor VISITOR = new Visitor();
private static final SdkNumberStringConverter STRING_CONVERTER = SdkNumberStringConverter.create();

private SdkNumberAttributeConverter() {
}

public static SdkNumberAttributeConverter create() {
return new SdkNumberAttributeConverter();
}

@Override
public EnhancedType<SdkNumber> type() {
return EnhancedType.of(SdkNumber.class);
}

@Override
public AttributeValueType attributeValueType() {
return AttributeValueType.N;
}

@Override
public AttributeValue transformFrom(SdkNumber input) {
return AttributeValue.builder().n(STRING_CONVERTER.toString(input)).build();
}

@Override
public SdkNumber transformTo(AttributeValue input) {
if (input.n() != null) {
return EnhancedAttributeValue.fromNumber(input.n()).convert(VISITOR);
}
return EnhancedAttributeValue.fromAttributeValue(input).convert(VISITOR);
}

private static final class Visitor extends TypeConvertingVisitor<SdkNumber> {
private Visitor() {
super(SdkNumber.class, SdkNumberAttributeConverter.class);
}

@Override
public SdkNumber convertString(String value) {
return STRING_CONVERTER.fromString(value);
}

@Override
public SdkNumber convertNumber(String value) {
return STRING_CONVERTER.fromString(value);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package software.amazon.awssdk.enhanced.dynamodb.internal.converter.string;

import software.amazon.awssdk.annotations.Immutable;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.annotations.ThreadSafe;
import software.amazon.awssdk.core.SdkNumber;
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.StringConverter;

/**
* A converter between {@link SdkNumber} and {@link String}.
*
* <p>
* This converts values using {@link SdkNumber#toString()} and {@link SdkNumber#fromString(String)}}.
*/
@SdkInternalApi
@ThreadSafe
@Immutable
public class SdkNumberStringConverter implements StringConverter<SdkNumber> {
private SdkNumberStringConverter() {
}

public static SdkNumberStringConverter create() {
return new SdkNumberStringConverter();
}

@Override
public EnhancedType<SdkNumber> type() {
return EnhancedType.of(SdkNumber.class);
}

@Override
public SdkNumber fromString(String string) {
return SdkNumber.fromString(string);
}
}
Loading