public class

PreparedIndexExpressionImpl

extends Object
implements PreparedIndexExpression<K, C> PreparedIndexOperationExpression<K, C> PreparedIndexValueExpression<K, C>
package com.netflix.astyanax.impl;

import java.nio.ByteBuffer;
import java.util.Date;
import java.util.UUID;

import com.netflix.astyanax.Serializer;
import com.netflix.astyanax.query.IndexOperator;
import com.netflix.astyanax.query.PreparedIndexExpression;
import com.netflix.astyanax.query.PreparedIndexValueExpression;
import com.netflix.astyanax.query.PreparedIndexOperationExpression;
import com.netflix.astyanax.serializers.BooleanSerializer;
import com.netflix.astyanax.serializers.ByteBufferSerializer;
import com.netflix.astyanax.serializers.BytesArraySerializer;
import com.netflix.astyanax.serializers.DateSerializer;
import com.netflix.astyanax.serializers.DoubleSerializer;
import com.netflix.astyanax.serializers.IntegerSerializer;
import com.netflix.astyanax.serializers.LongSerializer;
import com.netflix.astyanax.serializers.StringSerializer;
import com.netflix.astyanax.serializers.UUIDSerializer;

public class PreparedIndexExpressionImpl<K, C> implements PreparedIndexExpression<K, C>,
        PreparedIndexOperationExpression<K, C>, PreparedIndexValueExpression<K, C> {
    private ByteBuffer value;
    private ByteBuffer column;
    private IndexOperator operator;
    private final Serializer<C> columnSerializer;

    public PreparedIndexExpressionImpl(Serializer<C> columnSerializer) {
        this.columnSerializer = columnSerializer;
    }

    @Override
    public PreparedIndexOperationExpression<K, C> whereColumn(C columnName) {
        column = columnSerializer.toByteBuffer(columnName);
        return this;
    }

    @Override
    public ByteBuffer getColumn() {
        return column;
    }

    @Override
    public ByteBuffer getValue() {
        return value;
    }

    @Override
    public IndexOperator getOperator() {
        return operator;
    }

    @Override
    public PreparedIndexValueExpression<K, C> equals() {
        operator = IndexOperator.EQ;
        return this;
    }

    @Override
    public PreparedIndexValueExpression<K, C> greaterThan() {
        operator = IndexOperator.GT;
        return this;
    }

    @Override
    public PreparedIndexValueExpression<K, C> lessThan() {
        operator = IndexOperator.LT;
        return this;
    }

    @Override
    public PreparedIndexValueExpression<K, C> greaterThanEquals() {
        operator = IndexOperator.GTE;
        return this;
    }

    @Override
    public PreparedIndexValueExpression<K, C> lessThanEquals() {
        operator = IndexOperator.LTE;
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(String value) {
        this.value = StringSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(long value) {
        this.value = LongSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(int value) {
        this.value = IntegerSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(boolean value) {
        this.value = BooleanSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(Date value) {
        this.value = DateSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(byte[] value) {
        this.value = BytesArraySerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(ByteBuffer value) {
        this.value = ByteBufferSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(double value) {
        this.value = DoubleSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public PreparedIndexExpression<K, C> value(UUID value) {
        this.value = UUIDSerializer.get().toByteBuffer(value);
        return this;
    }

    @Override
    public <V> PreparedIndexExpression<K, C> value(V value, Serializer<V> valueSerializer) {
        this.value = valueSerializer.toByteBuffer(value);
        return this;
    }

}