All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.enhanced.dynamodb.internal.converter.string.DefaultStringConverterProvider Maven / Gradle / Ivy

/*
 * 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 java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import software.amazon.awssdk.annotations.Immutable;
import software.amazon.awssdk.annotations.NotThreadSafe;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.annotations.ThreadSafe;
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.PrimitiveConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.StringConverter;
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.StringConverterProvider;
import software.amazon.awssdk.utils.Validate;

/**
 * 

* Included converters: *

    *
  • {@link AtomicIntegerStringConverter}
  • *
  • {@link AtomicLongStringConverter}
  • *
  • {@link BigDecimalStringConverter}
  • *
  • {@link BigIntegerStringConverter}
  • *
  • {@link DoubleStringConverter}
  • *
  • {@link DurationStringConverter}
  • *
  • {@link FloatStringConverter}
  • *
  • {@link InstantStringConverter}
  • *
  • {@link IntegerStringConverter}
  • *
  • {@link LocalDateStringConverter}
  • *
  • {@link LocalDateTimeStringConverter}
  • *
  • {@link LocalTimeStringConverter}
  • *
  • {@link LocaleStringConverter}
  • *
  • {@link LongStringConverter}
  • *
  • {@link MonthDayStringConverter}
  • *
  • {@link OptionalDoubleStringConverter}
  • *
  • {@link OptionalIntStringConverter}
  • *
  • {@link OptionalLongStringConverter}
  • *
  • {@link ShortStringConverter}
  • *
  • {@link CharacterArrayStringConverter}
  • *
  • {@link CharacterStringConverter}
  • *
  • {@link CharSequenceStringConverter}
  • *
  • {@link OffsetDateTimeStringConverter}
  • *
  • {@link PeriodStringConverter}
  • *
  • {@link StringStringConverter}
  • *
  • {@link StringBufferStringConverter}
  • *
  • {@link StringBuilderStringConverter}
  • *
  • {@link UriStringConverter}
  • *
  • {@link UrlStringConverter}
  • *
  • {@link UuidStringConverter}
  • *
  • {@link ZonedDateTimeStringConverter}
  • *
  • {@link ZoneIdStringConverter}
  • *
  • {@link ZoneOffsetStringConverter}
  • *
  • {@link ByteArrayStringConverter}
  • *
  • {@link ByteStringConverter}
  • *
  • {@link SdkBytesStringConverter}
  • *
  • {@link AtomicBooleanStringConverter}
  • *
  • {@link BooleanStringConverter}
  • *
* *

* This can be created via {@link #create()}. */ @SdkInternalApi @ThreadSafe @Immutable public class DefaultStringConverterProvider implements StringConverterProvider { private final ConcurrentHashMap, StringConverter> converterCache = new ConcurrentHashMap<>(); private DefaultStringConverterProvider(Builder builder) { // Converters are used in the REVERSE order of how they were added to the builder. for (int i = builder.converters.size() - 1; i >= 0; i--) { StringConverter converter = builder.converters.get(i); converterCache.put(converter.type(), converter); if (converter instanceof PrimitiveConverter) { PrimitiveConverter primitiveConverter = (PrimitiveConverter) converter; converterCache.put(primitiveConverter.primitiveType(), converter); } } } /** * Create a builder for a {@link DefaultStringConverterProvider}. */ public static Builder builder() { return new Builder(); } public static DefaultStringConverterProvider create() { return DefaultStringConverterProvider.builder() .addConverter(ByteArrayStringConverter.create()) .addConverter(CharacterArrayStringConverter.create()) .addConverter(BooleanStringConverter.create()) .addConverter(ShortStringConverter.create()) .addConverter(IntegerStringConverter.create()) .addConverter(LongStringConverter.create()) .addConverter(FloatStringConverter.create()) .addConverter(DoubleStringConverter.create()) .addConverter(CharacterStringConverter.create()) .addConverter(ByteStringConverter.create()) .addConverter(StringStringConverter.create()) .addConverter(CharSequenceStringConverter.create()) .addConverter(StringBufferStringConverter.create()) .addConverter(StringBuilderStringConverter.create()) .addConverter(BigIntegerStringConverter.create()) .addConverter(BigDecimalStringConverter.create()) .addConverter(AtomicLongStringConverter.create()) .addConverter(AtomicIntegerStringConverter.create()) .addConverter(AtomicBooleanStringConverter.create()) .addConverter(OptionalIntStringConverter.create()) .addConverter(OptionalLongStringConverter.create()) .addConverter(OptionalDoubleStringConverter.create()) .addConverter(InstantStringConverter.create()) .addConverter(DurationStringConverter.create()) .addConverter(LocalDateStringConverter.create()) .addConverter(LocalTimeStringConverter.create()) .addConverter(LocalDateTimeStringConverter.create()) .addConverter(LocaleStringConverter.create()) .addConverter(OffsetTimeStringConverter.create()) .addConverter(OffsetDateTimeStringConverter.create()) .addConverter(ZonedDateTimeStringConverter.create()) .addConverter(YearStringConverter.create()) .addConverter(YearMonthStringConverter.create()) .addConverter(MonthDayStringConverter.create()) .addConverter(PeriodStringConverter.create()) .addConverter(ZoneOffsetStringConverter.create()) .addConverter(ZoneIdStringConverter.create()) .addConverter(UuidStringConverter.create()) .addConverter(UrlStringConverter.create()) .addConverter(UriStringConverter.create()) .build(); } @Override public StringConverter converterFor(EnhancedType enhancedType) { @SuppressWarnings("unchecked") // We initialized correctly, so this is safe. StringConverter converter = (StringConverter) converterCache.get(enhancedType); if (converter == null) { throw new IllegalArgumentException("No string converter exists for " + enhancedType.rawClass()); } return converter; } /** * A builder for configuring and creating {@link DefaultStringConverterProvider}s. */ @NotThreadSafe public static class Builder { private List> converters = new ArrayList<>(); private Builder() { } public Builder addConverters(Collection> converters) { Validate.paramNotNull(converters, "converters"); Validate.noNullElements(converters, "Converters must not contain null members."); this.converters.addAll(converters); return this; } public Builder addConverter(StringConverter converter) { Validate.paramNotNull(converter, "converter"); this.converters.add(converter); return this; } public Builder clearConverters() { this.converters.clear(); return this; } public DefaultStringConverterProvider build() { return new DefaultStringConverterProvider(this); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy