package me.prettyprint.cassandra.model.thrift;
import static me.prettyprint.cassandra.utils.Assert.noneNull;
import static me.prettyprint.cassandra.utils.Assert.notNull;
import java.nio.ByteBuffer;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.hector.api.Serializer;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.CounterColumn;
/**
* Utility factory class for creating thrift objects.
*
* @author Ran Tavory
*
*/
public class ThriftFactory {
// probably should be typed for thrift vs. avro
public static <N> ColumnPath createColumnPath(String columnFamilyName, N columnName,
Serializer<N> nameSerializer) {
return createColumnPath(columnFamilyName, nameSerializer.toByteBuffer(columnName));
}
private static <N> ColumnPath createColumnPath(String columnFamilyName, ByteBuffer columnName) {
notNull(columnFamilyName, "columnFamilyName cannot be null");
ColumnPath columnPath = new ColumnPath(columnFamilyName);
if (columnName != null) {
columnPath.setColumn(columnName);
}
return columnPath;
}
/*package*/ static <N> ColumnPath createColumnPath(String columnFamilyName) {
return createColumnPath(columnFamilyName, null);
}
public static <SN,N> ColumnPath createSuperColumnPath(String columnFamilyName,
SN superColumnName, N columnName, Serializer<SN> superNameSerializer,
Serializer<N> nameSerializer) {
noneNull(columnFamilyName, superColumnName, superNameSerializer, nameSerializer);
ColumnPath columnPath = createColumnPath(columnFamilyName, nameSerializer.toByteBuffer(columnName));
columnPath.setSuper_column(superNameSerializer.toByteBuffer(superColumnName));
return columnPath;
}
public static <SN> ColumnPath createSuperColumnPath(String columnFamilyName,
SN superColumnName, Serializer<SN> superNameSerializer) {
noneNull(columnFamilyName, superNameSerializer);
ColumnPath columnPath = createColumnPath(columnFamilyName, null);
if (superColumnName != null) {
columnPath.setSuper_column(superNameSerializer.toByteBuffer(superColumnName));
}
return columnPath;
}
public static CounterColumn createCounterColumn(String name, long value) {
CounterColumn cc = new CounterColumn();
cc.setName(StringSerializer.get().toByteBuffer(name));
cc.setValue(value);
return cc;
}
public static <N> CounterColumn createCounterColumn(N name, long value, Serializer<N> ns) {
CounterColumn cc = new CounterColumn();
cc.setName(ns.toByteBuffer(name));
cc.setValue(value);
return cc;
}
}