Class DefaultEnhancedDocument

java.lang.Object
software.amazon.awssdk.enhanced.dynamodb.internal.document.DefaultEnhancedDocument
All Implemented Interfaces:
EnhancedDocument

@Immutable public class DefaultEnhancedDocument extends Object implements EnhancedDocument
Default implementation of EnhancedDocument used by the SDK to create Enhanced Documents. Attributes are initially saved as a String-Object Map when documents are created using the builder. Conversion to an AttributeValueMap is done lazily when values are accessed. When the document is retrieved from DynamoDB, the AttributeValueMap is internally saved as the attribute value map. Custom objects or collections are saved in the enhancedTypeMap to preserve the generic class information. Note that no default ConverterProviders are assigned, so ConverterProviders must be passed in the builder when creating enhanced documents.
  • Constructor Details

  • Method Details

    • builder

      public static EnhancedDocument.Builder builder()
    • converterForClass

      public static <T> AttributeConverter<T> converterForClass(EnhancedType<T> type, ChainConverterProvider chainConverterProvider)
    • toBuilder

      public EnhancedDocument.Builder toBuilder()
      Description copied from interface: EnhancedDocument
      Converts an existing EnhancedDocument into a builder object that can be used to modify its values and then create a new EnhancedDocument.
      Specified by:
      toBuilder in interface EnhancedDocument
      Returns:
      A EnhancedDocument.Builder initialized with the values of this EnhancedDocument.
    • attributeConverterProviders

      public List<AttributeConverterProvider> attributeConverterProviders()
      Specified by:
      attributeConverterProviders in interface EnhancedDocument
      Returns:
      List of AttributeConverterProvider defined for the given Document.
    • isNull

      public boolean isNull(String attributeName)
      Description copied from interface: EnhancedDocument
      Checks if the document is a null value.
      Specified by:
      isNull in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute that needs to be checked.
      Returns:
      true if the specified attribute exists with a null value; false otherwise.
    • isPresent

      public boolean isPresent(String attributeName)
      Description copied from interface: EnhancedDocument
      Checks if the attribute exists in the document.
      Specified by:
      isPresent in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute that needs to be checked.
      Returns:
      true if the specified attribute exists with a null/non-null value; false otherwise.
    • get

      public <T> T get(String attributeName, EnhancedType<T> type)
      Description copied from interface: EnhancedDocument
      Returns the value of the specified attribute in the current document as a specified EnhancedType; or null if the attribute either doesn't exist or the attribute value is null.

      Retrieving String Type for a document

      String resultCustom = document.get("key", EnhancedType.of(String.class));
      
      Retrieving Custom Type for which Convertor Provider was defined while creating the document
      Custom resultCustom = document.get("key", EnhancedType.of(Custom.class));
      
      Retrieving list of strings in a document
      List<String> resultList = document.get("key", EnhancedType.listOf(String.class));
      
      Retrieving a Map with List of strings in its values
      Map<String, List<String>>> resultNested = document.get("key", new EnhancedType<Map<String, List<String>>>(){});
      

      Specified by:
      get in interface EnhancedDocument
      Type Parameters:
      T - The type of the attribute value.
      Parameters:
      attributeName - Name of the attribute.
      type - EnhancedType of the value
      Returns:
      Attribute value of type T }
    • getString

      public String getString(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the String value of specified attribute in the document.
      Specified by:
      getString in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a string; or null if the attribute either doesn't exist or the attribute value is null
    • getNumber

      public SdkNumber getNumber(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the SdkNumber value of specified attribute in the document.
      Specified by:
      getNumber in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a number; or null if the attribute either doesn't exist or the attribute value is null
    • get

      public <T> T get(String attributeName, Class<T> clazz)
      Description copied from interface: EnhancedDocument
      Returns the value of the specified attribute in the current document as a specified class type; or null if the attribute either doesn't exist or the attribute value is null.

      Retrieving String Type for a document

      String resultCustom = document.get("key", String.class);
      
      Retrieving Custom Type for which Convertor Provider was defined while creating the document
      Custom resultCustom = document.get("key", Custom.class);
      

      Note : This API should not be used to retrieve values of List and Map types. Instead, getList and getMap APIs should be used to retrieve attributes of type List and Map, respectively.

      Specified by:
      get in interface EnhancedDocument
      Type Parameters:
      T - The type of the attribute value.
      Parameters:
      attributeName - Name of the attribute.
      clazz - Class type of value.
      Returns:
      Attribute value of type T }
    • getBytes

      public SdkBytes getBytes(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the SdkBytes value of specified attribute in the document.
      Specified by:
      getBytes in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      the value of the specified attribute in the current document as SdkBytes; or null if the attribute either doesn't exist or the attribute value is null.
    • getStringSet

      public Set<String> getStringSet(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the Set of String values of the given attribute in the current document.
      Specified by:
      getStringSet in interface EnhancedDocument
      Parameters:
      attributeName - the name of the attribute.
      Returns:
      the value of the specified attribute in the current document as a set of strings; or null if the attribute either does not exist or the attribute value is null.
    • getNumberSet

      public Set<SdkNumber> getNumberSet(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the Set of String values of the given attribute in the current document.
      Specified by:
      getNumberSet in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a set of SdkNumber; or null if the attribute either doesn't exist or the attribute value is null.
    • getBytesSet

      public Set<SdkBytes> getBytesSet(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the Set of String values of the given attribute in the current document.
      Specified by:
      getBytesSet in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a set of SdkBytes; or null if the attribute doesn't exist.
    • getList

      public <T> List<T> getList(String attributeName, EnhancedType<T> type)
      Description copied from interface: EnhancedDocument
      Gets the List of values of type T for the given attribute in the current document.
      Specified by:
      getList in interface EnhancedDocument
      Type Parameters:
      T - Type T of List elements
      Parameters:
      attributeName - Name of the attribute.
      type - EnhancedType of Type T.
      Returns:
      value of the specified attribute in the current document as a list of type T, or null if the attribute does not exist.
    • getMap

      public <K, V> Map<K,V> getMap(String attributeName, EnhancedType<K> keyType, EnhancedType<V> valueType)
      Description copied from interface: EnhancedDocument
      Returns a map of a specific Key-type and Value-type based on the given attribute name, key type, and value type. Example usage: When getting an attribute as a map of UUID keys and Integer values, use this API as shown below:
             Map<String, Integer> result = document.getMap("key", EnhancedType.of(String.class), EnhancedType.of(Integer.class));
      
      Specified by:
      getMap in interface EnhancedDocument
      Type Parameters:
      K - The type of the Map keys.
      V - The type of the Map values.
      Parameters:
      attributeName - The name of the attribute that needs to be get as Map.
      keyType - Enhanced Type of Key attribute, like String, UUID etc that can be represented as String Keys.
      valueType - Enhanced Type of Values , which have converters defineds in EnhancedDocument.Builder.attributeConverterProviders(AttributeConverterProvider...) for the document
      Returns:
      Map of type K and V with the given attribute name, key type, and value type.
    • getJson

      public String getJson(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the JSON document value of the specified attribute.
      Specified by:
      getJson in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a JSON string; or null if the attribute either doesn't exist or the attribute value is null.
    • getBoolean

      public Boolean getBoolean(String attributeName)
      Description copied from interface: EnhancedDocument
      Gets the Boolean value for the specified attribute.
      Specified by:
      getBoolean in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a Boolean representation; or null if the attribute either doesn't exist or the attribute value is null.
    • getListOfUnknownType

      public List<AttributeValue> getListOfUnknownType(String attributeName)
      Description copied from interface: EnhancedDocument
      Retrieves a list of AttributeValue objects for a specified attribute in a document. This API should be used when the elements of the list are a combination of different types such as Strings, Maps, and Numbers. If all elements in the list are of a known fixed type, use EnhancedDocument.getList(String, EnhancedType) instead.
      Specified by:
      getListOfUnknownType in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a List of AttributeValue
    • getMapOfUnknownType

      public Map<String,AttributeValue> getMapOfUnknownType(String attributeName)
      Description copied from interface: EnhancedDocument
      Retrieves a Map with String keys and corresponding AttributeValue objects as values for a specified attribute in a document. This API is particularly useful when the values of the map are of different types such as strings, maps, and numbers. However, if all the values in the map for a given attribute key are of a known fixed type, it is recommended to use the method EnhancedDocument#getMap(String, EnhancedType, EnhancedType) instead.
      Specified by:
      getMapOfUnknownType in interface EnhancedDocument
      Parameters:
      attributeName - Name of the attribute.
      Returns:
      value of the specified attribute in the current document as a AttributeValue
    • toJson

      public String toJson()
      Specified by:
      toJson in interface EnhancedDocument
      Returns:
      document as a JSON string. Note all binary data will become base-64 encoded in the resultant string.
    • toMap

      public Map<String,AttributeValue> toMap()
      Description copied from interface: EnhancedDocument
      This method converts a document into a key-value map with the keys as String objects and the values as AttributeValue objects. It can be particularly useful for documents with attributes of unknown types, as it allows for further processing or manipulation of the document data in a AttributeValue format.
      Specified by:
      toMap in interface EnhancedDocument
      Returns:
      Document as a String AttributeValue Key-Value Map
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object