tzezula@1324: /* tzezula@1324: * To change this license header, choose License Headers in Project Properties. tzezula@1324: * To change this template file, choose Tools | Templates tzezula@1324: * and open the template in the editor. tzezula@1324: */ tzezula@1324: tzezula@1324: package org.apidesign.bck2brwsr.dew; tzezula@1324: tzezula@1324: import java.io.ByteArrayInputStream; tzezula@1324: import java.io.ByteArrayOutputStream; tzezula@1324: import java.io.IOException; tzezula@1324: import java.io.InputStream; tzezula@1324: import java.io.InputStreamReader; tzezula@1324: import java.io.OutputStream; tzezula@1324: import java.io.OutputStreamWriter; tzezula@1324: import java.io.Reader; tzezula@1324: import java.io.Writer; tzezula@1324: tzezula@1324: /** tzezula@1324: * tzezula@1324: * @author Tomas Zeuzla tzezula@1324: */ tzezula@1324: class MemoryFileObject extends BaseFileObject { tzezula@1324: tzezula@1324: private byte[] content; tzezula@1324: private long lastModified; tzezula@1324: tzezula@1324: MemoryFileObject ( tzezula@1324: String resourceName, tzezula@1324: Kind kind, tzezula@1324: byte[] content) { tzezula@1324: super(resourceName, kind); tzezula@1324: this.content = content; tzezula@1324: this.lastModified = this.content == null ? tzezula@1324: -1 : tzezula@1324: System.currentTimeMillis(); tzezula@1324: } tzezula@1324: tzezula@1324: MemoryFileObject ( tzezula@1324: String resourceName, tzezula@1324: byte[] content) { tzezula@1324: this(resourceName, getKind(resourceName) ,content); tzezula@1324: } tzezula@1324: tzezula@1324: tzezula@1324: @Override tzezula@1324: public InputStream openInputStream() throws IOException { tzezula@1324: if (content == null) { tzezula@1324: throw new IOException(); tzezula@1324: } else { tzezula@1324: return new ByteArrayInputStream(content); tzezula@1324: } tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public OutputStream openOutputStream() throws IOException { tzezula@1324: return new CloseStream(); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public Reader openReader(boolean ignoreEncodingErrors) throws IOException { tzezula@1324: return new InputStreamReader(openInputStream()); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { tzezula@1324: if (content == null) { tzezula@1324: throw new IOException(); tzezula@1324: } else { tzezula@1324: return new String(content); tzezula@1324: } tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public Writer openWriter() throws IOException { tzezula@1324: return new OutputStreamWriter(openOutputStream()); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public long getLastModified() { tzezula@1324: return lastModified; tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public boolean delete() { tzezula@1324: return false; tzezula@1324: } tzezula@1324: tzezula@1324: byte[] getContent() { tzezula@1324: return content; tzezula@1324: } tzezula@1324: tzezula@1324: private class CloseStream extends OutputStream { tzezula@1324: tzezula@1324: private final ByteArrayOutputStream delegate; tzezula@1324: tzezula@1324: CloseStream() { tzezula@1324: delegate = new ByteArrayOutputStream(); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public void write(int b) throws IOException { tzezula@1324: delegate.write(b); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public void write(byte[] b) throws IOException { tzezula@1324: delegate.write(b); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public void write(byte[] b, int off, int len) throws IOException { tzezula@1324: delegate.write(b, off, len); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public void close() throws IOException { tzezula@1324: delegate.close(); tzezula@1324: content = delegate.toByteArray(); tzezula@1324: lastModified = System.currentTimeMillis(); tzezula@1324: } tzezula@1324: tzezula@1324: } tzezula@1324: tzezula@1324: }