package com.linkedin.r2.message.stream.entitystream;
import com.linkedin.common.callback.Callback;
import com.linkedin.data.ByteString;
/**
* This is a convenience Reader to assemble the full entity of a stream message.
*
* @author Zhenkai Zhu
*/
public final class FullEntityReader implements Reader
{
private final ByteString.Builder _builder;
private final Callback<ByteString> _callback;
private ReadHandle _rh;
/**
* @param callback the callback to be invoked when the reader finishes assembling the full entity
*/
public FullEntityReader(Callback<ByteString> callback)
{
_callback = callback;
_builder = new ByteString.Builder();
}
public void onInit(ReadHandle rh)
{
_rh = rh;
_rh.request(10);
}
public void onDataAvailable(ByteString data)
{
_builder.append(data);
_rh.request(1);
}
public void onDone()
{
ByteString entity = _builder.build();
_callback.onSuccess(entity);
}
public void onError(Throwable ex)
{
_callback.onError(ex);
}
}