/*
* Copyright 2015-2017 Amazon Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://aws.amazon.com/apache2.0
*
* 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 com.amazonaws.services.dynamodbv2.xspec;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
import com.amazonaws.annotation.Immutable;
import com.amazonaws.annotation.Beta;
/**
* A path operand that refers to a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html"
* >binary set</a> attribute in DynamoDB; used for building expressions.
* <p>
* Use {@link ExpressionSpecBuilder#BS(String)} to instantiate this class.
*/
@Beta
@Immutable
public final class BS extends PathOperand {
BS(String path) {
super(path);
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the
* current attribute is equal to the set of specified values) for building condition
* expression.
*/
public ComparatorCondition eq(byte[]... values) {
return new ComparatorCondition("=", this, new LiteralOperand(
new LinkedHashSet<byte[]>(Arrays.asList(values))));
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the
* current attribute is equal to the set of specified values) for building condition
* expression.
*/
public ComparatorCondition eq(ByteBuffer... values) {
return new ComparatorCondition("=", this, new LiteralOperand(
new LinkedHashSet<ByteBuffer>(Arrays.asList(values))));
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the current
* attribute is equal to that of the specified attribute) for building
* condition expression.
*/
public ComparatorCondition eq(BS that) {
return new ComparatorCondition("=", this, that);
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the
* current attribute is not equal to the set of specified values) for building condition
* expression.
*/
public ComparatorCondition ne(byte[]... values) {
return new ComparatorCondition("<>", this, new LiteralOperand(
new LinkedHashSet<byte[]>(Arrays.asList(values))));
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the
* current attribute is not equal to the set of specified values) for
* building condition expression.
*/
public ComparatorCondition ne(ByteBuffer... values) {
return new ComparatorCondition("<>", this, new LiteralOperand(
new LinkedHashSet<ByteBuffer>(Arrays.asList(values))));
}
/**
* Returns a <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html#ConditionExpressionReference.Comparators"
* >comparator condition</a> (that evaluates to true if the value of the current
* attribute is not equal to that of the specified attribute) for building
* condition expression.
*/
public ComparatorCondition ne(BS that) {
return new ComparatorCondition("<>", this, that);
}
/**
* Returns an <code>FunctionCondition</code> object which represents an <a
* href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html"
* >contains(path, operand)</a> function condition where path refers to that
* of the current path operand; used for building expressions.
*
* <pre>
* "contains (path, operand) — true if the attribute at the specified
* path contains a particular operand. Note that the path and the operand
* must be distinct; that is, contains (a, a) will return an error"
* </pre>
*
* @param value
* the value that will be used as the operand to the
* "contains" function condition.
*/
public FunctionCondition contains(byte[] value) {
return new FunctionCondition("contains", this,
new LiteralOperand(value));
}
/**
* Returns an <code>FunctionCondition</code> object which represents an <a
* href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html"
* >contains(path, operand)</a> function condition where path refers to that
* of the current path operand; used for building expressions.
*
* <pre>
* "contains (path, operand) — true if the attribute at the specified
* path contains a particular operand. Note that the path and the operand
* must be distinct; that is, contains (a, a) will return an error"
* </pre>
*
* @param value
* the value that will be used as the operand to the
* "contains" function condition.
*/
public FunctionCondition contains(ByteBuffer value) {
return new FunctionCondition("contains", this,
new LiteralOperand(value));
}
/**
* Returns a <code>SetAction</code> object used for building update
* expression. If the attribute referred to by this path operand doesn't
* exist, the returned object represents adding the specified value as an
* attribute to an item. If the attribute referred to by this path operand
* already exists, the returned object represents the value replacement of
* the current attribute by the specified value.
*/
public final SetAction set(byte[] ... value) {
return new SetAction(this, new LiteralOperand(value));
}
/**
* Returns a <code>SetAction</code> object used for building update
* expression. If the attribute referred to by this path operand doesn't
* exist, the returned object represents adding the specified value as an
* attribute to an item. If the attribute referred to by this path operand
* already exists, the returned object represents the value replacement of
* the current attribute by the specified value.
*/
public final SetAction set(ByteBuffer ... value) {
return new SetAction(this, new LiteralOperand(value));
}
/**
* Returns an <code>AddAction</code> for build expression that would append
* the specified values to this binary set; or if the attribute does not
* already exist, add the new attribute and the value(s) to the item.
* <p>
* In general, DynamoDB recommends using SET rather than ADD.
*/
public AddAction append(byte[]... values) {
return new AddAction(this, new LiteralOperand(
new LinkedHashSet<byte[]>(Arrays.asList(values))));
}
/**
* Returns an <code>AddAction</code> for build expression that would append
* the specified values to this binary set; or if the attribute does not
* already exist, add the new attribute and the value(s) to the item.
* <p>
* In general, DynamoDB recommends using SET rather than ADD.
*/
public AddAction append(ByteBuffer... values) {
return new AddAction(this, new LiteralOperand(
new LinkedHashSet<ByteBuffer>(Arrays.asList(values))));
}
/**
* Returns a <code>DeleteAction</code> for deleting the specified values
* from this binary set.
*/
public DeleteAction delete(byte[]... values) {
return new DeleteAction(this, new LiteralOperand(
new LinkedHashSet<byte[]>(Arrays.asList(values))));
}
/**
* Returns a <code>DeleteAction</code> for deleting the specified values
* from this binary set.
*/
public DeleteAction delete(ByteBuffer... values) {
return new DeleteAction(this, new LiteralOperand(
new LinkedHashSet<ByteBuffer>(Arrays.asList(values))));
}
/**
* Returns an <code>IfNotExistsFunction</code> object which represents an <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html"
* >if_not_exists(path, operand)</a> function call where path refers to that
* of the current path operand; used for building expressions.
*
* <pre>
* "if_not_exists (path, operand) – If the item does not contain an attribute
* at the specified path, then if_not_exists evaluates to operand; otherwise,
* it evaluates to path. You can use this function to avoid overwriting an
* attribute already present in the item."
* </pre>
*
* @param defaultValue
* the default value that will be used as the operand to the
* if_not_exists function call.
*/
public IfNotExistsFunction<BS> ifNotExists(byte[]... defaultValue) {
return new IfNotExistsFunction<BS>(this, new LiteralOperand(
new LinkedHashSet<byte[]>(Arrays.asList(defaultValue))));
}
/**
* Returns an <code>IfNotExistsFunction</code> object which represents an <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html"
* >if_not_exists(path, operand)</a> function call where path refers to that
* of the current path operand; used for building expressions.
*
* <pre>
* "if_not_exists (path, operand) – If the item does not contain an attribute
* at the specified path, then if_not_exists evaluates to operand; otherwise,
* it evaluates to path. You can use this function to avoid overwriting an
* attribute already present in the item."
* </pre>
*
* @param defaultValue
* the default value that will be used as the operand to the
* if_not_exists function call.
*/
public IfNotExistsFunction<BS> ifNotExists(ByteBuffer... defaultValue) {
return new IfNotExistsFunction<BS>(this, new LiteralOperand(
new LinkedHashSet<ByteBuffer>(Arrays.asList(defaultValue))));
}
/**
* Returns an <code>IfNotExistsFunction</code> object which represents an <a href=
* "http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html"
* >if_not_exists(path, operand)</a> function call where path refers to that
* of the current path operand; used for building expressions.
*
* <pre>
* "if_not_exists (path, operand) – If the item does not contain an attribute
* at the specified path, then if_not_exists evaluates to operand; otherwise,
* it evaluates to path. You can use this function to avoid overwriting an
* attribute already present in the item."
* </pre>
*
* @param defaultValue
* the default value (of another binary set attribute) that will be
* used as the operand to the if_not_exists function call.
*/
public IfNotExistsFunction<BS> ifNotExists(BS defaultValue) {
return new IfNotExistsFunction<BS>(this, defaultValue);
}
/**
* Returns a <code>SetAction</code> object used for building update
* expression. If the attribute referred to by this path operand doesn't
* exist, the returned object represents adding the attribute value of the
* specified source path operand to an item. If the current attribute
* already exists, the returned object represents the value replacement of
* the current attribute by the attribute value of the specified source path
* operand.
*/
public SetAction set(BS source) {
return new SetAction(this, source);
}
/**
* Returns a <code>SetAction</code> object used for building update
* expression. If the attribute referred to by this path operand doesn't
* exist, the returned object represents adding the specified value as an
* attribute to an item. If the attribute referred to by this path operand
* already exists, the returned object represents the value replacement of
* the current attribute by the specified value.
*/
public SetAction set(Set<byte[]> value) {
return new SetAction(this, new LiteralOperand(value));
}
/**
* Returns a <code>SetAction</code> object used for building update
* expression. If the attribute referred to by this path operand doesn't
* exist, the returned object represents adding the value of evaluating the
* specified <code>IfNotExists</code> function as an attribute to an item.
* If the attribute referred to by this path operand already exists, the
* returned object represents the value replacement of the current attribute
* by the value of evaluating the specified <code>IfNotExists</code>
* function.
*/
public SetAction set(IfNotExistsFunction<BS> ifNotExistsFunction) {
return new SetAction(this, ifNotExistsFunction);
}
}