package me.prettyprint.cassandra.service.template;
import me.prettyprint.hector.api.Serializer;
import org.apache.cassandra.thrift.IndexClause;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
/**
* Predicate wrapping the Thrift IndexClause for the get_indexed_slices call.
*
* @author Jim Ancona (jim@anconafamily.com)
*
* @param <K> Key class
* @param <N> Column name class
* @param <V> Column value class
*/
public class IndexedSlicesPredicate<K,N,V> {
private Serializer<K> keySerializer;
private Serializer<N> nameSerializer;
private Serializer<V> valueSerializer;
private IndexClause indexClause = new IndexClause();
public IndexedSlicesPredicate(Serializer<K> keySerializer, Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
super();
this.keySerializer = keySerializer;
this.nameSerializer = nameSerializer;
this.valueSerializer = valueSerializer;
}
public IndexedSlicesPredicate<K,N,V> count(int count) {
indexClause.setCount(count);
return this;
}
public IndexedSlicesPredicate<K,N,V> startKey(K key) {
indexClause.setStart_key(keySerializer.toByteBuffer(key));
return this;
}
public IndexedSlicesPredicate<K,N,V> addExpression(N columnName, IndexOperator op, V value) {
indexClause.addToExpressions(new IndexExpression(nameSerializer.toByteBuffer(columnName), op, valueSerializer.toByteBuffer(value)));
return this;
}
public IndexClause toThrift() {
if (!indexClause.isSetStart_key()) {
indexClause.setStart_key(new byte[0]);
}
return indexClause;
}
}