* @return A GSPResponseWriter instance
*/
private static GSPResponseWriter getInstance(final ServletResponse response, final int max) {
final BoundedCharsAsEncodedBytesCounter bytesCounter=new BoundedCharsAsEncodedBytesCounter();
final StreamCharBuffer streamBuffer = new StreamCharBuffer(max, 0, max);
streamBuffer.setChunkMinSize(max/2);
streamBuffer.setNotifyParentBuffersEnabled(false);
final StreamCharBuffer.LazyInitializingWriter lazyResponseWriter = new StreamCharBuffer.LazyInitializingWriter() {
public Writer getWriter() throws IOException {
return response.getWriter();
}
};
if (!(response instanceof GrailsContentBufferingResponse)) {
streamBuffer.connectTo(new StreamCharBuffer.LazyInitializingMultipleWriter() {
public Writer getWriter() throws IOException {
return null;
}
public LazyInitializingWriter[] initializeMultiple(StreamCharBuffer buffer, boolean autoFlush) throws IOException {
final StreamCharBuffer.LazyInitializingWriter[] lazyWriters;
if (CONTENT_LENGTH_COUNTING_ENABLED) {
lazyWriters=new StreamCharBuffer.LazyInitializingWriter[] {new StreamCharBuffer.LazyInitializingWriter() {
public Writer getWriter() throws IOException {
bytesCounter.setCapacity(max * 2);
bytesCounter.setEncoding(response.getCharacterEncoding());
return bytesCounter.getCountingWriter();
}
}, lazyResponseWriter};
} else {
lazyWriters=new StreamCharBuffer.LazyInitializingWriter[] {lazyResponseWriter};
}
return lazyWriters;
}
}, AUTOFLUSH_ENABLED);
} else {
streamBuffer.connectTo(lazyResponseWriter);
}
if (instantiator != null) {
GSPResponseWriter instance = (GSPResponseWriter)instantiator.newInstance();
instance.initialize(streamBuffer, response, bytesCounter);