001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /*
018:
019: */
020:
021: package org.apache.portals.gems.util;
022:
023: import java.io.IOException;
024: import java.io.PrintWriter;
025: import java.io.UnsupportedEncodingException;
026:
027: import javax.servlet.ServletOutputStream;
028:
029: /**
030: * This is a specialized class implementing a ServletOutputStream that works in
031: * conjunction with a PrintWriter to send data to the browser. It is used when
032: * a J2EE server throws an IllegalStateException when you call getOutputStream
033: * on a response which someone has previously called getWriter on.
034: */
035: public class PrintWriterServletOutputStream extends ServletOutputStream {
036:
037: /**
038: * The PrintWriter that is wrapped on top of the base input stream
039: */
040: PrintWriter mPrintWriter;
041:
042: /**
043: * The character encoding of the response.
044: */
045: private String characterEncoding;
046:
047: /**
048: * @deprecated since 1.0RC3; use PrintWriterServletOutputStream
049: * <p>
050: * Construct a ServletOutputStream that coordinates output using a base
051: * ServletOutputStream and a PrintWriter that is wrapped on top of that
052: * OutputStream.
053: * </p>
054: */
055: public PrintWriterServletOutputStream(PrintWriter pO) {
056: this (pO, null);
057: }
058:
059: public PrintWriterServletOutputStream(PrintWriter pw,
060: String encoding) {
061: super ();
062: mPrintWriter = pw;
063: characterEncoding = encoding;
064: }
065:
066: /**
067: * Writes a single byte to the output stream
068: * This implementation writes the byte to the
069: * underlying PrintWriter.
070: */
071: public void write(int pVal) throws IOException {
072: mPrintWriter.write(pVal);
073: }
074:
075: /**
076: * Writes an array of bytes
077: *
078: * @param pBuf the array to be written
079: * @exception IOException if an I/O error occurred
080: */
081: public void write(byte[] pBuf) throws IOException {
082: this .write(pBuf, 0, pBuf.length);
083: }
084:
085: /**
086: * Writes a subarray of bytes
087: * This implementation redirects it's input into the
088: * underlying PrintWriter.
089: *
090: * @param pBuf the array to be written
091: * @param pOffset the offset into the array
092: * @param pLength the number of bytes to write
093: * @exception IOException if an I/O error occurred
094: */
095: public void write(byte[] pBuf, int pOffset, int pLength)
096: throws IOException {
097: String strValue = null;
098: if (characterEncoding != null && !"".equals(characterEncoding)) {
099: try {
100: strValue = new String(pBuf, pOffset, pLength,
101: characterEncoding);
102: } catch (UnsupportedEncodingException uee) {
103: // ignore and allow the null to handle.
104: }
105: }
106:
107: if (strValue == null) {
108: strValue = new String(pBuf, pOffset, pLength);
109: }
110:
111: mPrintWriter.write(strValue);
112: }
113:
114: /**
115: * Flushes the stream, writing any buffered output bytes
116: *
117: * @exception IOException if an I/O error occurred
118: */
119: public void flush() throws IOException {
120: mPrintWriter.flush();
121: }
122:
123: /**
124: * Closes the stream
125: *
126: * @exception IOException if an I/O error occurred
127: */
128: public void close() throws IOException {
129: mPrintWriter.close();
130: }
131:
132: /**
133: *
134: * Prints a string.
135: *
136: * @param pVal the String to be printed
137: * @exception IOException if an I/O error has occurred
138: */
139: public void print(String pVal) throws IOException {
140: mPrintWriter.print(pVal);
141: }
142:
143: /**
144: *
145: * Prints an string followed by a CRLF.
146: *
147: * @param pVal the String to be printed
148: * @exception IOException if an I/O error has occurred
149: */
150: public void println(String pVal) throws IOException {
151: mPrintWriter.println(pVal);
152: }
153:
154: /**
155: *
156: * Prints a CRLF
157: *
158: * @exception IOException if an I/O error has occurred
159: *
160: */
161: public void println() throws IOException {
162: mPrintWriter.println();
163: }
164:
165: }
|