package me.prettyprint.cassandra.service.template; import java.nio.ByteBuffer; import java.util.Date; import java.util.UUID; import me.prettyprint.cassandra.serializers.BooleanSerializer; import me.prettyprint.cassandra.serializers.BytesArraySerializer; import me.prettyprint.cassandra.serializers.DateSerializer; import me.prettyprint.cassandra.serializers.DoubleSerializer; import me.prettyprint.cassandra.serializers.FloatSerializer; import me.prettyprint.cassandra.serializers.IntegerSerializer; import me.prettyprint.cassandra.serializers.LongSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.cassandra.serializers.UUIDSerializer; import me.prettyprint.cassandra.service.CassandraHost; import me.prettyprint.hector.api.ResultStatus; import me.prettyprint.hector.api.Serializer; /** * Provides access to the current row of data during queries. There is a lot of * overlap in needs for both standard and super queries. This class consolidates * what they have in common. All data is read into ByteBuffers and translated to * a primitive type when requested. * * This class is a non-static inner class which inherits the Java generic * parameters of it's containing ColumnFamilyTemplate instance. This allows it to * inherit the <K> parameter from ColumnFamilyTemplate. * * The <N> parameters allows this to be used by standard and super column * queries * * @author david * @author zznate * @param <K> * the type of the key * @param <N> * the standard column name type or the super column's child column * type */ public abstract class AbstractResultWrapper<K, N> implements ColumnFamilyResult<K, N> { protected Serializer<K> keySerializer; protected Serializer<N> columnNameSerializer; protected ResultStatus resultStatus; public AbstractResultWrapper(Serializer<K> keySerializer, Serializer<N> columnNameSerializer, ResultStatus resultStatus) { this.keySerializer = keySerializer; this.columnNameSerializer = columnNameSerializer; this.resultStatus = resultStatus; } public abstract ByteBuffer getColumnValue(N columnName); public UUID getUUID(N columnName) { return UUIDSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public String getString(N columnName) { return StringSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public Long getLong(N columnName) { return LongSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public Integer getInteger(N columnName) { return IntegerSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public Float getFloat(N columnName) { return FloatSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public Double getDouble(N columnName) { return DoubleSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public Boolean getBoolean(N columnName) { return BooleanSerializer.get().fromByteBuffer(getColumnValue(columnName)); } public byte[] getByteArray(N columnName) { return BytesArraySerializer.get() .fromByteBuffer(getColumnValue(columnName)); } public Date getDate(N columnName) { return DateSerializer.get().fromByteBuffer(getColumnValue(columnName)); } @Override public long getExecutionTimeMicro() { return resultStatus.getExecutionTimeMicro(); } @Override public long getExecutionTimeNano() { return resultStatus.getExecutionTimeNano(); } @Override public CassandraHost getHostUsed() { return resultStatus.getHostUsed(); } }