    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_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    }