package rocks.inspectit.shared.all.storage.nio.stream;
import java.io.IOException;
import java.nio.channels.SocketChannel;
/**
* Class that is used for providing the correct instance of {@link ExtendedByteBufferOutputStream}
* via Spring framework.
*
* @author Ivan Senic
*
*/
public abstract class StreamProvider {
/**
* @return Returns the newly initialized instance of the {@link ExtendedByteBufferOutputStream}
* that has been prepared for use.
* @throws IOException
* if output stream can not be obtained
*/
public ExtendedByteBufferOutputStream getExtendedByteBufferOutputStream() throws IOException {
ExtendedByteBufferOutputStream stream = createExtendedByteBufferOutputStream();
stream.prepare();
return stream;
}
/**
* @return Returns the newly initialized instance of the {@link ExtendedByteBufferOutputStream}.
*/
protected abstract ExtendedByteBufferOutputStream createExtendedByteBufferOutputStream();
/**
* Returns the {@link SocketExtendedByteBufferInputStream} initialized by Spring and prepared.
* Caller must first call {@link SocketExtendedByteBufferInputStream#reset(int)} before reading
* any data.
*
* @param socketChannel
* Underlying {@link SocketChannel} for the stream.
* @return {@link SocketExtendedByteBufferInputStream}.
* @throws IOException
* if input stream can not be obtained
*/
public SocketExtendedByteBufferInputStream getSocketExtendedByteBufferInputStream(SocketChannel socketChannel) throws IOException {
SocketExtendedByteBufferInputStream inputStream = createSocketExtendedByteBufferInputStream();
inputStream.setSocketChannel(socketChannel);
inputStream.prepare();
return inputStream;
}
/**
* Returns the {@link SocketExtendedByteBufferInputStream} initialized by Spring and prepared.
* Caller can immediately use this stream to read data from.
*
* @param socketChannel
* Underlying {@link SocketChannel} for the stream.
* @param totalSize
* Size to read from {@link SocketChannel}.
* @return {@link SocketExtendedByteBufferInputStream}.
* @throws IOException
* if input stream can not be obtained
*/
public SocketExtendedByteBufferInputStream getSocketExtendedByteBufferInputStream(SocketChannel socketChannel, long totalSize) throws IOException {
SocketExtendedByteBufferInputStream inputStream = createSocketExtendedByteBufferInputStream();
inputStream.setSocketChannel(socketChannel);
inputStream.setTotalSize(totalSize);
inputStream.prepare();
return inputStream;
}
/**
* @return Returns the newly initialized instance of the
* {@link SocketExtendedByteBufferInputStream}.
*/
protected abstract SocketExtendedByteBufferInputStream createSocketExtendedByteBufferInputStream();
}