org.redline_rpm.WritableChannelWrapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of redline Show documentation
Show all versions of redline Show documentation
Redline is a pure Java library for manipulating RPM Package Manager packages.
package org.redline_rpm;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.WritableByteChannel;
/**
* Wrapper around a writable channel that allows
* for observing written data.
*/
public class WritableChannelWrapper extends ChannelWrapper implements WritableByteChannel {
protected WritableByteChannel channel;
public WritableChannelWrapper( final WritableByteChannel channel) {
this.channel = channel;
}
/**
* Writes data to the wrapped channel, while passing an
* exact copy to the registered consumers.
*
* @param buffer the buffer to write to the wrapped channel
* @return the number of bytes written
* @throws IOException if an IO error occurs
*/
public int write( final ByteBuffer buffer) throws IOException {
for ( Consumer< ?> consumer : consumers.values()) consumer.consume( buffer.duplicate());
return channel.write( buffer);
}
/**
* Closes the underlying channel and completes
* any outstanding operations in the consumers.
*
* @throws IOException if an IO error occurs
*/
public void close() throws IOException {
channel.close();
super.close();
}
/**
* Flag indicating whether the underlying channel
* is open.
*
* @return true if it is open, false otherwise
*/
public boolean isOpen() {
return channel.isOpen();
}
}