001: /*
002: * RimfaxeServletOutputStream.java
003: *
004: *
005: * Copyright (c) 2003 Rimfaxe ApS (www.rimfaxe.com).
006: * All rights reserved.
007: *
008: * This package is written by Lars Andersen <lars@rimfaxe.com>
009: * and licensed by Rimfaxe ApS.
010: *
011: * Redistribution and use in source and binary forms, with or without
012: * modification, are permitted provided that the following conditions
013: * are met:
014: *
015: * 1. Redistributions of source code must retain the above copyright
016: * notice, this list of conditions and the following disclaimer.
017: *
018: * 2. Redistributions in binary form must reproduce the above copyright
019: * notice, this list of conditions and the following disclaimer in
020: * the documentation and/or other materials provided with the
021: * distribution.
022: *
023: * 3. The end-user documentation included with the redistribution, if
024: * any, must include the following acknowlegement:
025: * "This product includes software developed by Rimfaxe ApS
026: (www.rimfaxe.com)"
027: * Alternately, this acknowlegement may appear in the software itself,
028: * if and wherever such third-party acknowlegements normally appear.
029: *
030: * 4. The names "Rimfaxe", "Rimfaxe Software", "Lars Andersen" and
031: * "Rimfaxe WebServer" must not be used to endorse or promote products
032: * derived from this software without prior written permission. For written
033: * permission, please contact info@rimfaxe.com
034: *
035: * 5. Products derived from this software may not be called "Rimfaxe"
036: * nor may "Rimfaxe" appear in their names without prior written
037: * permission of the Rimfaxe ApS.
038: *
039: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
040: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
041: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
042: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
043: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
044: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
045: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
046: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
047: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
048: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
049: * SUCH DAMAGE.
050: *
051: */
052:
053: package com.rimfaxe.webserver.servletapi;
054:
055: import java.io.*;
056:
057: import javax.servlet.ServletOutputStream;
058:
059: public class RimfaxeServletOutputStream extends ServletOutputStream {
060:
061: ByteArrayOutputStream out = new ByteArrayOutputStream();
062:
063: RimfaxeHttpServletResponse resp;
064: boolean committed = false;
065: boolean writerUsed = false;
066: boolean closed = false;
067:
068: byte ln[] = { (byte) '\r', (byte) '\n' };
069:
070: //byte eof = (byte)'\';
071:
072: /**
073: * Flush the internal buffer.
074: */
075: private void flushBuffer() throws IOException {
076: committed = true;
077: }
078:
079: public void print(int i) throws IOException {
080: write(i);
081: }
082:
083: public void print(double i) throws IOException {
084: print(Double.toString(i));
085: }
086:
087: public void print(long l) throws IOException {
088: print(Long.toString(l));
089: }
090:
091: public void print(String s) throws IOException {
092: write(s.getBytes());
093: }
094:
095: public void println() throws IOException {
096: write(ln);
097: }
098:
099: public void println(int i) throws IOException {
100: print(i);
101: println();
102: }
103:
104: public void println(double i) throws IOException {
105: print(i);
106: println();
107: }
108:
109: public void println(long l) throws IOException {
110: print(l);
111: println();
112: }
113:
114: public void println(String s) throws IOException {
115: print(s);
116: println();
117: }
118:
119: public void write(int b) throws IOException {
120: write((byte) b);
121: }
122:
123: protected void write(byte b) throws IOException {
124: out.write(b);
125: }
126:
127: public void write(byte b[]) throws IOException {
128: write(b, 0, b.length);
129: }
130:
131: public void write(byte b[], int off, int len) throws IOException {
132: out.write(b, off, len);
133: }
134:
135: public void flush() throws IOException {
136: out.flush();
137: }
138:
139: public void realFlush() throws IOException {
140: out.flush();
141: }
142:
143: public void close() throws IOException {
144:
145: closed = true;
146: out.close();
147: }
148:
149: public void reset() throws IllegalStateException {
150: if (committed) {
151: System.out
152: .println("IllegalStateException, Response already committed");
153: throw new IllegalStateException(
154: "Response already committed");
155: }
156: out = new ByteArrayOutputStream();
157: closed = false;
158: }
159:
160: public boolean isCommitted() {
161: return committed;
162: }
163:
164: public boolean isClosed() {
165: return closed;
166: }
167:
168: public byte[] getBuffer() {
169: return out.toByteArray();
170: }
171:
172: /**
173: * Creates a new buffered RimfaxeServletOutputStream.
174: * @param resp the Response
175: * @param out The underlying output stream
176: * @param bufsize the buffer size
177: * @exception IllegalArgumentException if bufsize <= 0.
178: */
179: RimfaxeServletOutputStream(RimfaxeHttpServletResponse resp,
180: boolean writerUsed) {
181: this .out = out;
182: this .resp = resp;
183: this .writerUsed = writerUsed;
184: this .committed = false;
185: }
186:
187: }
|