001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/enterprise/servlet/GZIPResponseWrapper.java $
002 /*----------------------------------------------------------------------------
003 This file originated as work from Jayson Falkner.
004
005 Copyright 2003 Jayson Falkner (jayson@jspinsider.com)
006 This code is from "Servlets and JavaServer pages; the J2EE Web Tier",
007 http://www.jspbook.com. You may freely use the code both commercially
008 and non-commercially. If you like the code, please pick up a copy of
009 the book and help support the authors, development of more free code,
010 and the JSP/Servlet/J2EE community.
011 ----------------------------------------------------------------------------*/
012 package org.deegree.enterprise.servlet;
013
014 import java.io.IOException;
015 import java.io.OutputStreamWriter;
016 import java.io.PrintWriter;
017
018 import javax.servlet.ServletOutputStream;
019 import javax.servlet.http.HttpServletResponse;
020 import javax.servlet.http.HttpServletResponseWrapper;
021
022 /**
023 *
024 *
025 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
026 * @author last edited by: $Author: mschneider $
027 *
028 * @version $Revision: 20326 $, $Date: 2009-10-22 18:41:56 +0200 (Do, 22 Okt 2009) $
029 */
030 public class GZIPResponseWrapper extends HttpServletResponseWrapper {
031 /**
032 * the original response
033 */
034 protected HttpServletResponse origResponse = null;
035
036 /**
037 * the output as a stream
038 */
039 protected ServletOutputStream stream = null;
040
041 /**
042 * the output as a writer
043 */
044 protected PrintWriter writer = null;
045
046 /**
047 *
048 * @param response
049 */
050 public GZIPResponseWrapper( HttpServletResponse response ) {
051 super( response );
052 origResponse = response;
053 }
054
055 /**
056 *
057 * @return response stream
058 * @throws IOException
059 */
060 public ServletOutputStream createOutputStream()
061 throws IOException {
062 return ( new GZIPResponseStream( origResponse ) );
063 }
064
065 /**
066 *
067 *
068 */
069 public void finishResponse() {
070 try {
071 if ( writer != null ) {
072 writer.close();
073 } else {
074 if ( stream != null ) {
075 stream.close();
076 }
077 }
078 } catch ( IOException e ) {
079 //notting todo?
080 }
081 }
082
083 /**
084 * @throws IOException
085 */
086 @Override
087 public void flushBuffer()
088 throws IOException {
089 stream.flush();
090 }
091
092 /**
093 * @return ServletOutputStream
094 * @throws IOException
095 */
096 @Override
097 public ServletOutputStream getOutputStream()
098 throws IOException {
099 if ( writer != null ) {
100 throw new IllegalStateException( "getWriter() has already been called!" );
101 }
102
103 if ( stream == null )
104 stream = createOutputStream();
105 return ( stream );
106 }
107
108 /**
109 * @return PrintWriter
110 * @throws IOException
111 */
112 @Override
113 public PrintWriter getWriter()
114 throws IOException {
115 if ( writer != null ) {
116 return ( writer );
117 }
118
119 if ( stream != null ) {
120 throw new IllegalStateException( "getOutputStream() has already been called!" );
121 }
122
123 stream = createOutputStream();
124 writer = new PrintWriter( new OutputStreamWriter( stream, "UTF-8" ) );
125 return ( writer );
126 }
127
128 @Override
129 public void setContentLength( int length ) {
130 super.setContentLength( length );
131 }
132 }