Example usage for com.amazonaws.services.dynamodbv2.xspec ExpressionSpecBuilder N

List of usage examples for com.amazonaws.services.dynamodbv2.xspec ExpressionSpecBuilder N

Introduction

In this page you can find the example usage for com.amazonaws.services.dynamodbv2.xspec ExpressionSpecBuilder N.

Prototype

public static N N(String path) 

Source Link

Document

Creates a path operand that refers to a <a href= "http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html" >number attribute</a> for the purpose of building expressions.

Usage

From source file:com.github.fge.jsonpatch.PathValueOperation.java

License:LGPL

@Override
public void applyToBuilder(ExpressionSpecBuilder builder) {
    String attributePath = pathGenerator.apply(path);
    JsonNodeType type = value.getNodeType();
    switch (type) {
    case NUMBER:/*from   w w  w . j  a  va  2s.  c  o m*/
        builder.addUpdate(ExpressionSpecBuilder.N(attributePath).set(value.numberValue()));
        break;

    case STRING:
        builder.addUpdate(ExpressionSpecBuilder.S(attributePath).set(value.textValue()));
        break;

    case BOOLEAN:
        builder.addUpdate(ExpressionSpecBuilder.BOOL(attributePath).set(value.booleanValue()));
        break;

    case NULL:
        builder.addUpdate(ExpressionSpecBuilder.NULL(attributePath).set());
        break;

    case ARRAY:
        if (value.iterator().hasNext() == false) {
            builder.addUpdate(ExpressionSpecBuilder.L(attributePath).set(Collections.emptyList()));
        } else {
            JsonNode repNode = value.iterator().next();
            if (repNode.isNumber()) {
                builder.addUpdate(ExpressionSpecBuilder.NS(attributePath).set(convertNumberList(value)));
            } else if (repNode.isTextual()) {
                builder.addUpdate(ExpressionSpecBuilder.SS(attributePath).set(convertStringList(value)));
            } else {
                throw new UnsupportedOperationException("Not implemented yet: " + repNode.getNodeType());
            }
        }
        break;

    case OBJECT:
        Map<String, ?> m = toMap(value);
        builder.addUpdate(ExpressionSpecBuilder.M(attributePath).set(m));
        break;

    default:
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Not implemented yet: " + type);
    }
}

From source file:jp.classmethod.aws.dynamodb.DynamoDbRepository.java

License:Open Source License

@Override
public E update(K key, JsonPatch patch, boolean increment, long version) {
    final PrimaryKey pk = createKeys(key);
    Preconditions.checkNotNull(patch, "patch must not be null");
    Preconditions.checkArgument(version >= -1);

    ExpressionSpecBuilder builder = patch.get();

    //add a condition on item existence
    builder.withCondition(ExpressionSpecBuilder.attribute_exists(hashKeyName));
    //add update expression for incrementing the version
    if (increment && versionProperty != null) {
        builder.addUpdate(ExpressionSpecBuilder.N(versionProperty)
                .set(ExpressionSpecBuilder.N(versionProperty).plus(1L)));
    }//from  w  w  w  . ja v  a2  s. c o m
    //add version condition
    if (version >= 0) {
        Preconditions.checkState(versionProperty != null);
        builder.withCondition(ExpressionSpecBuilder.N(versionProperty).eq(version));
    }

    UpdateItemExpressionSpec spec = builder.buildForUpdate();
    Preconditions.checkArgument(false == Strings.isNullOrEmpty(spec.getUpdateExpression()),
            "patch may not be empty"); // TODO add mechanism to JSON patch to allow iterating over list of ops
    try {
        UpdateItemOutcome updateItemOutcome = table.updateItem(new UpdateItemSpec().withExpressionSpec(spec)
                .withPrimaryKey(pk).withReturnValues(ReturnValue.ALL_NEW));
        return convertItemToDomain(updateItemOutcome.getItem());
    } catch (AmazonClientException e) {
        throw processUpdateItemException(key, e);
    }
}

From source file:jp.classmethod.aws.dynamodb.DynamoDbRepository.java

License:Open Source License

@Override
public <S extends E> S update(S domain, VersionCondition condition) {
    Preconditions.checkNotNull(domain, "domain must not be null");
    final Item domainItem = convertDomainToItem(domain);
    Preconditions.checkArgument(domainItem.hasAttribute(hashKeyName),
            "hash key must be set in domain object when updating: " + hashKeyName);

    ExpressionSpecBuilder builder = new ExpressionSpecBuilder();
    builder.withCondition(ExpressionSpecBuilder.S(hashKeyName).exists());
    if (condition != null) {
        Preconditions.checkState(versionProperty != null);
        builder.withCondition(ExpressionSpecBuilder.N(versionProperty).eq(condition.getVersion()));
    }//from   w w w  .ja v a2  s .c  om
    PutItemExpressionSpec xSpec = builder.buildForPut();
    PutItemSpec spec = new PutItemSpec().withItem(domainItem).withExpressionSpec(xSpec);
    try {
        table.putItem(spec);
    } catch (AmazonClientException e) {
        throw processUpdateItemException(getId(domain), e);
    }
    // PutItem does not accept ReturnValue.ALL_NEW
    return domain;
}