blob: 043bc0ab53236624c52d0d58a10a43735c50cf54 [file] [log] [blame]
/*
* Copyright 2003,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
*/
package org.apache.pluto.util;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;
/**
* This is a specialized class implementing a ServletOutputStream that works in
* conjunction with a PrintWriter to send data to the browser. It is used when a
* J2EE server throws an IllegalStateException when you call getOutputStream on
* a response which someone has previously called getWriter on.
*/
public class PrintWriterServletOutputStream extends ServletOutputStream {
/**
* The PrintWriter that is wrapped on top of the base input stream
*/
PrintWriter mPrintWriter;
/**
* Construct a ServletOutputStream that coordinates output using a base
* ServletOutputStream and a PrintWriter that is wrapped on top of that
* OutputStream.
*/
public PrintWriterServletOutputStream(PrintWriter pO) {
super();
mPrintWriter = pO;
}
/**
* Writes an array of bytes
* @param pBuf the array to be written
* @throws IOException if an I/O error occurred
*/
public void write(byte[] pBuf) throws IOException {
char[] cbuf = new char[pBuf.length];
for (int i = 0; i < cbuf.length; i++) {
cbuf[i] = (char) (pBuf[i] & 0xff);
}
mPrintWriter.write(cbuf, 0, pBuf.length);
}
/**
* Writes a single byte to the output stream
*/
public void write(int pVal) throws IOException {
mPrintWriter.write(pVal);
}
/**
* Writes a subarray of bytes
* @param pBuf the array to be written
* @param pOffset the offset into the array
* @param pLength the number of bytes to write
* @throws IOException if an I/O error occurred
*/
public void write(byte[] pBuf, int pOffset, int pLength)
throws IOException {
char[] cbuf = new char[pLength];
for (int i = 0; i < pLength; i++) {
cbuf[i] = (char) (pBuf[i + pOffset] & 0xff);
}
mPrintWriter.write(cbuf, 0, pLength);
}
/**
* Flushes the stream, writing any buffered output bytes
* @throws IOException if an I/O error occurred
*/
public void flush() throws IOException {
mPrintWriter.flush();
}
/**
* Closes the stream
* @throws IOException if an I/O error occurred
*/
public void close() throws IOException {
mPrintWriter.close();
}
/**
* Prints a string.
* @param pVal the String to be printed
* @throws IOException if an I/O error has occurred
*/
public void print(String pVal) throws IOException {
mPrintWriter.print(pVal);
}
/**
* Prints an string followed by a CRLF.
* @param pVal the String to be printed
* @throws IOException if an I/O error has occurred
*/
public void println(String pVal) throws IOException {
mPrintWriter.println(pVal);
}
/**
* Prints a CRLF
* @throws IOException if an I/O error has occurred
*/
public void println() throws IOException {
mPrintWriter.println();
}
}