package com.linkedin.r2.message.stream.entitystream;
import com.linkedin.data.ByteString;
import com.linkedin.util.ArgumentUtil;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* A writer that produce content based on the ByteString body
*/
public class ByteStringWriter implements Writer
{
private final ByteString _content;
private final AtomicBoolean _done;
private WriteHandle _wh;
public ByteStringWriter(ByteString content)
{
ArgumentUtil.notNull(content, "content");
_content = content;
_done = new AtomicBoolean(false);
}
@Override
public void onInit(WriteHandle wh)
{
_wh = wh;
}
@Override
public void onWritePossible()
{
while(_wh.remaining() > 0)
{
if (_done.compareAndSet(false, true))
{
_wh.write(_content);
}
else
{
_wh.done();
break;
}
}
}
@Override
public void onAbort(Throwable ex)
{
// do nothing
}
}