Class DynamoDBMapper.SaveObjectHandler

java.lang.Object
com.amazonaws.services.dynamodbv2.datamodeling.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 Details

    • 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 Details

    • 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 Details

    • 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.
    • getLocalSaveBehavior

      protected DynamoDBMapperConfig.SaveBehavior getLocalSaveBehavior()
      Get the SaveBehavior used locally for this 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.