package aQute.bnd.osgi; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import aQute.lib.io.IO; public abstract class AbstractResource implements Resource { private String extra; private ByteBuffer buffer; private final long lastModified; protected AbstractResource(long modified) { lastModified = modified; } public String getExtra() { return extra; } public long lastModified() { return lastModified; } public InputStream openInputStream() throws Exception { return IO.stream(buffer()); } private ByteBuffer getBuffer() throws Exception { if (buffer != null) { return buffer; } return buffer = ByteBuffer.wrap(getBytes()); } @Override public ByteBuffer buffer() throws Exception { return getBuffer().duplicate(); } public void setExtra(String extra) { this.extra = extra; } public void write(OutputStream out) throws Exception { IO.copy(buffer(), out); } abstract protected byte[] getBytes() throws Exception; public long size() throws Exception { return getBuffer().limit(); } public void close() throws IOException {} }