package aQute.bnd.osgi; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import aQute.lib.io.IO; import aQute.lib.io.IOConstants; public abstract class WriteResource implements Resource { private ByteBuffer buffer; private String extra; public ByteBuffer buffer() throws Exception { return getBuffer().duplicate(); } private ByteBuffer getBuffer() throws Exception { if (buffer != null) { return buffer; } ByteArrayOutputStream out = new ByteArrayOutputStream(IOConstants.PAGE_SIZE); write(out); return buffer = ByteBuffer.wrap(out.toByteArray()); } public InputStream openInputStream() throws Exception { return IO.stream(buffer()); } public abstract void write(OutputStream out) throws Exception; public abstract long lastModified(); public String getExtra() { return extra; } public void setExtra(String extra) { this.extra = extra; } public long size() throws Exception { return getBuffer().limit(); } public void close() throws IOException {} }