package me.prettyprint.cassandra.serializers;
import static me.prettyprint.hector.api.ddl.ComparatorType.TIMEUUIDTYPE;
import java.nio.ByteBuffer;
import com.eaio.uuid.UUID;
import me.prettyprint.hector.api.ddl.ComparatorType;
/**
* A UUIDSerializer translates the byte[] to and from UUID types. for Time based UUIDS
*
* @author Todd Nine
*
*/
public final class TimeUUIDSerializer extends AbstractSerializer<UUID> {
private static final TimeUUIDSerializer instance = new TimeUUIDSerializer();
public static TimeUUIDSerializer get() {
return instance;
}
@Override
public ByteBuffer toByteBuffer(UUID uuid) {
if (uuid == null) {
return null;
}
long msb = uuid.getTime();
long lsb = uuid.getClockSeqAndNode();
byte[] buffer = new byte[16];
for (int i = 0; i < 8; i++) {
buffer[i] = (byte) (msb >>> 8 * (7 - i));
}
for (int i = 8; i < 16; i++) {
buffer[i] = (byte) (lsb >>> 8 * (7 - i));
}
return ByteBuffer.wrap(buffer);
}
@Override
public UUID fromByteBuffer(ByteBuffer bytes) {
if (bytes == null) {
return null;
}
return new UUID(bytes.getLong(), bytes.getLong());
}
@Override
public ComparatorType getComparatorType() {
return TIMEUUIDTYPE;
}
}