Class DynamoDBMapper.SaveObjectHandler

  • Enclosing class:
    DynamoDBMapper

    protected abstract class DynamoDBMapper.SaveObjectHandler
    extends Object
    The handler for saving object using DynamoDBMapper. Caller should implement the abstract methods to provide the expected behavior on each scenario, and this handler will take care of all the other basic workflow and common operations.
    • Field Detail

      • object

        protected final Object object
      • clazz

        protected final Class<?> clazz
      • userProvidedExpectedValueConditions

        protected final Map<String,​ExpectedAttributeValue> userProvidedExpectedValueConditions
        Additional expected value conditions specified by the user.
      • userProvidedConditionOperator

        protected final String userProvidedConditionOperator
        Condition operator on the additional expected value conditions specified by the user.
    • Constructor Detail

      • SaveObjectHandler

        public SaveObjectHandler​(Class<?> clazz,
                                 Object object,
                                 String tableName,
                                 DynamoDBMapperConfig saveConfig,
                                 ItemConverter converter,
                                 DynamoDBSaveExpression saveExpression)
        Constructs a handler for saving the specified model object.
        Parameters:
        object - The model object to be saved.
        clazz - The domain class of the object.
        tableName - The table name.
        saveConifg - The mapper configuration used for this save.
        saveExpression - The save expression, including the user-provided conditions and an optional logic operator.
    • Method Detail

      • execute

        public void execute()
        The general workflow of a save operation.
      • onPrimaryKeyAttributeValue

        protected abstract void onPrimaryKeyAttributeValue​(String attributeName,
                                                           AttributeValue keyAttributeValue)
        Implement this method to do the necessary operations when a primary key attribute is set with some value.
        Parameters:
        attributeName - The name of the primary key attribute.
        keyAttributeValue - The AttributeValue of the primary key attribute as specified in the object.
      • onNonKeyAttribute

        protected void onNonKeyAttribute​(String attributeName,
                                         AttributeValue currentValue)
        Implement this method for necessary operations when a non-key attribute is set a non-null value in the object. The default implementation simply adds a "PUT" update for the given attribute.
        Parameters:
        attributeName - The name of the non-key attribute.
        currentValue - The updated value of the given attribute.
      • onNullNonKeyAttribute

        protected abstract void onNullNonKeyAttribute​(String attributeName)
        Implement this method for necessary operations when a non-key attribute is set null in the object.
        Parameters:
        attributeName - The name of the non-key attribute.
      • executeLowLevelRequest

        protected abstract void executeLowLevelRequest()
        Implement this method to send the low-level request that is necessary to complete the save operation.
      • getTableName

        protected String getTableName()
        Get the table name
      • getPrimaryKeyAttributeValues

        protected Map<String,​AttributeValue> getPrimaryKeyAttributeValues()
        Get the map of all the specified primamry keys of the saved object.
      • getAttributeValueUpdates

        protected Map<String,​AttributeValueUpdate> getAttributeValueUpdates()
        Get the map of AttributeValueUpdate on each modeled attribute.
      • mergeExpectedAttributeValueConditions

        protected Map<String,​ExpectedAttributeValue> mergeExpectedAttributeValueConditions()
        Merge and return all the expected value conditions (either user-specified or imposed by the internal implementation of DynamoDBMapper) for this save operation.
      • getInMemoryUpdates

        protected List<com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.ValueUpdate> getInMemoryUpdates()
        Get the list of all the necessary in-memory update on the object.
      • doUpdateItem

        protected UpdateItemResult doUpdateItem()
        Save the item using a UpdateItem request. The handler will call this method if
        • CLOBBER configuration is not being used;
        • AND the item does not contain auto-generated key value;

        The ReturnedValues parameter for the UpdateItem request is set as ALL_NEW, which means the service should return all of the attributes of the new version of the item after the update. The handler will use the returned attributes to detect silent failure on the server-side.

      • doPutItem

        protected PutItemResult doPutItem()
        Save the item using a PutItem request. The handler will call this method if
        • CLOBBER configuration is being used;
        • OR the item contains auto-generated key value;
        • OR an UpdateItem request has silently failed (200 response with no affected attribute), which indicates the key-only-put scenario that we used to handle by the keyOnlyPut(...) hack.