package com.appmetr.hercules.serializers; import com.appmetr.hercules.profile.DataOperationsProfile; import com.appmetr.monblank.StopWatch; import me.prettyprint.hector.api.Serializer; import me.prettyprint.hector.api.ddl.ComparatorType; import java.nio.ByteBuffer; import java.util.List; import java.util.Map; import java.util.Set; public class InformerSerializer<T> implements Serializer<T> { private Serializer<T> serializer; private DataOperationsProfile dataOperationsProfile; public InformerSerializer(Serializer<T> serializer, DataOperationsProfile dataOperationsProfile) { this.serializer = serializer; this.dataOperationsProfile = dataOperationsProfile; } @Override public ByteBuffer toByteBuffer(T obj) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ByteBuffer byteBuffer = serializer.toByteBuffer(obj); long time = stopWatch.stop(); if (dataOperationsProfile != null) { dataOperationsProfile.bytes += byteBuffer.remaining(); dataOperationsProfile.serializationMs += time; } return byteBuffer; } @Override public T fromByteBuffer(ByteBuffer byteBuffer) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); long bytes = byteBuffer.remaining(); T obj = serializer.fromByteBuffer(byteBuffer); long time = stopWatch.stop(); if (dataOperationsProfile != null) { dataOperationsProfile.bytes += bytes; dataOperationsProfile.deserializationMs += time; } return obj; } @Override public byte[] toBytes(T obj) { return serializer.toBytes(obj); } @Override public T fromBytes(byte[] bytes) { return serializer.fromBytes(bytes); } @Override public Set<ByteBuffer> toBytesSet(List<T> list) { return serializer.toBytesSet(list); } @Override public List<T> fromBytesSet(Set<ByteBuffer> list) { return serializer.fromBytesSet(list); } @Override public <V> Map<ByteBuffer, V> toBytesMap(Map<T, V> map) { return serializer.toBytesMap(map); } @Override public <V> Map<T, V> fromBytesMap(Map<ByteBuffer, V> map) { return serializer.fromBytesMap(map); } @Override public List<ByteBuffer> toBytesList(List<T> list) { return serializer.toBytesList(list); } @Override public List<T> fromBytesList(List<ByteBuffer> list) { return serializer.fromBytesList(list); } @Override public ComparatorType getComparatorType() { return serializer.getComparatorType(); } }