@Override public AutoTempFileWriter append(char c) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + 1); } buffer.append(c); return this; }
@Override public void write(char cbuf[]) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + cbuf.length); } buffer.write(cbuf); }
@Override public BufferResult getResult() throws IllegalStateException, IOException { return buffer.getResult(); } }
private void switchIfNeeded(long newLength) throws IOException { if(isInitialBuffer && newLength>=tempFileThreshold) { TempFile tempFile = tempFileList.createTempFile(); if(logger.isLoggable(Level.FINE)) logger.log(Level.FINE, "Switching to temp file: {0}", tempFile); buffer.close(); TempFileWriter tempFileWriter = new TempFileWriter(tempFile); buffer.getResult().writeTo(tempFileWriter); buffer = tempFileWriter; isInitialBuffer = false; } }
@Override public void writeTo(Writer out, ElementContext context) throws IOException { if(writeMe != null) writeMe.writeTo(out); } }
@Override public BufferResult getResult() throws IllegalStateException { if(!isClosed) throw new IllegalStateException(); if(result==null) { if(length==0) { result = EmptyResult.getInstance(); } else { result = new TempFileResult(tempFile, 0, length); } } return result; } }
@Override public CharArrayBufferWriter append(char c) throws IOException { super.append(c); return this; }
@Override public EmptyResult getResult() { return EmptyResult.getInstance(); } }
@Override public long getLength() throws IOException { return buffer.getLength(); }
@Override public void writeTo(Writer out, ElementContext context) throws IOException { if(writeMe != null) writeMe.writeTo(out); } }
@Override public void write(String str, int off, int len) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + len); } buffer.write(str, off, len); }
@Override public AutoTempFileWriter append(CharSequence csq, int start, int end) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + (end-start)); } buffer.append(csq, start, end); return this; }
@Override public CharArrayBufferWriter append(CharSequence csq) throws IOException { super.append(csq); return this; }
@Override public void writeTo(Writer out, ElementContext context) throws IOException { if(writeMe != null) writeMe.writeTo(out); } }
@Override public void write(int c) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + 1); } buffer.write(c); }
@Override public AutoTempFileWriter append(CharSequence csq) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + csq.length()); } buffer.append(csq); return this; }
@Override public void writeTo(Writer out, ElementContext context) throws IOException { if(writeMe != null) writeMe.writeTo(out); } }
@Override public void write(char cbuf[], int off, int len) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + len); } buffer.write(cbuf, off, len); }
@Override public void writeTo(Writer out, ElementContext context) throws IOException { if(writeMe != null) writeMe.writeTo(out); } }
@Override public void write(String str) throws IOException { if(isInitialBuffer) { switchIfNeeded(buffer.getLength() + str.length()); } buffer.write(str); }