use of org.grails.buffer.StreamCharBuffer.LazyInitializingWriter in project grails-core by grails.
the class GSPResponseWriter method getInstance.
/**
* Static factory methdirectWritingod to create the writer.
* @param response
* @param max
* @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);
return instance;
} else {
return new GSPResponseWriter(streamBuffer, response, bytesCounter);
}
}
Aggregations