//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.testing.servlets; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; /** * A package level (ie non-public) helper to extract data from servlet response. * * * */ class BufferServletOutputStream extends ServletOutputStream { /** * Size of the default buffer. * */ public static final int BUFFER_SIZE = 16384; private final ByteBuffer buffer; /** * New instance, with a default buffer size. * */ public BufferServletOutputStream() { this(BUFFER_SIZE); } /** * Create a new instance, with a specific buffersize. * * @param bufferSize * max size of the buffer in bytes. */ public BufferServletOutputStream(int bufferSize) { buffer = ByteBuffer.allocate(bufferSize); } @Override public boolean isReady() { return true; } @Override public void setWriteListener(WriteListener writeListener) { // So nothing } @Override public void write(int c) throws IOException { byte b = (byte) c; buffer.put(b); } /** * Gets the internal buffer. * * @return */ public ByteBuffer getBuffer() { return buffer; } /** * Get the content of the buffer as a string. * * @return the utf-8 string of the buffer. */ public String getAsString() { return new String(buffer.array(), 0, buffer.position(), StandardCharsets.UTF_8); } }