KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > filter > GZIPResponseWrapper


1 package com.blandware.atleap.webapp.filter;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5
6 import javax.servlet.ServletOutputStream JavaDoc;
7 import javax.servlet.http.HttpServletResponse JavaDoc;
8 import javax.servlet.http.HttpServletResponseWrapper JavaDoc;
9 import java.io.IOException JavaDoc;
10 import java.io.OutputStreamWriter JavaDoc;
11 import java.io.PrintWriter JavaDoc;
12
13
14 /**
15  * <p>Wraps Response for GZipFilter
16  * </p>
17  *
18  * @author Matt Raible <a HREF="mailto:matt@raibledesigns.com">&lt;matt@raibledesigns.com&gt;</a>
19  * @author cmurphy@intechtual.com
20  * @version $Revision: 1.5 $ $Date: 2005/02/24 19:50:22 $
21  */

22 public class GZIPResponseWrapper extends HttpServletResponseWrapper JavaDoc {
23     protected transient final Log log = LogFactory.getLog(GZIPResponseWrapper.class);
24     protected HttpServletResponse JavaDoc origResponse = null;
25     protected ServletOutputStream JavaDoc stream = null;
26     protected PrintWriter JavaDoc writer = null;
27     protected int error = 0;
28
29     public GZIPResponseWrapper(HttpServletResponse JavaDoc response) {
30         super(response);
31         origResponse = response;
32     }
33
34     public ServletOutputStream JavaDoc createOutputStream() throws IOException JavaDoc {
35         return (new GZIPResponseStream(origResponse));
36     }
37
38     public void finishResponse() {
39         try {
40             if ( writer != null ) {
41                 writer.close();
42             } else {
43                 if ( stream != null ) {
44                     stream.close();
45                 }
46             }
47         } catch ( IOException JavaDoc e ) {
48         }
49     }
50
51     public void flushBuffer() throws IOException JavaDoc {
52         if ( stream != null ) {
53             stream.flush();
54         }
55     }
56
57     public ServletOutputStream JavaDoc getOutputStream() throws IOException JavaDoc {
58         if ( writer != null ) {
59             throw new IllegalStateException JavaDoc("getWriter() has already been called!");
60         }
61
62         if ( stream == null ) {
63             stream = createOutputStream();
64         }
65
66         return (stream);
67     }
68
69     public PrintWriter JavaDoc getWriter() throws IOException JavaDoc {
70         // From cmurphy@intechtual.com to fix:
71
// https://appfuse.dev.java.net/issues/show_bug.cgi?id=59
72
if ( this.origResponse != null && this.origResponse.isCommitted() ) {
73             return super.getWriter();
74         }
75
76         if ( writer != null ) {
77             return (writer);
78         }
79
80         if ( stream != null ) {
81             throw new IllegalStateException JavaDoc("getOutputStream() has already been called!");
82         }
83
84         stream = createOutputStream();
85         writer =
86                 new PrintWriter JavaDoc(new OutputStreamWriter JavaDoc(stream,
87                         origResponse.getCharacterEncoding()));
88
89         return (writer);
90     }
91
92     public void setContentLength(int length) {
93     }
94
95     /**
96      * @see javax.servlet.http.HttpServletResponse#sendError(int, java.lang.String)
97      */

98     public void sendError(int error, String JavaDoc message) throws IOException JavaDoc {
99         super.sendError(error, message);
100         this.error = error;
101
102         if ( log.isDebugEnabled() ) {
103             log.debug("sending error: " + error + " [" + message + "]");
104         }
105     }
106 }
107
Popular Tags