001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/enterprise/servlet/GZIPResponseWrapper.java $ 002 /* 003 This file is part of deegree. 004 Copyright (C) 2001-2008 by: 005 EXSE, Department of Geography, University of Bonn 006 http://www.giub.uni-bonn.de/deegree/ 007 lat/lon GmbH 008 http://www.lat-lon.de 009 010 This library is free software; you can redistribute it and/or 011 modify it under the terms of the GNU Lesser General Public 012 License as published by the Free Software Foundation; either 013 version 2.1 of the License, or (at your option) any later version. 014 015 This library is distributed in the hope that it will be useful, 016 but WITHOUT ANY WARRANTY; without even the implied warranty of 017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 018 Lesser General Public License for more details. 019 020 You should have received a copy of the GNU Lesser General Public 021 License along with this library; if not, write to the Free Software 022 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 023 024 Contact: 025 026 Andreas Poth 027 lat/lon GmbH 028 Aennchenstr. 19 029 53115 Bonn 030 Germany 031 E-Mail: poth@lat-lon.de 032 033 Prof. Dr. Klaus Greve 034 Department of Geography 035 University of Bonn 036 Meckenheimer Allee 166 037 53115 Bonn 038 Germany 039 E-Mail: greve@giub.uni-bonn.de 040 041 Copyright 2003 Jayson Falkner (jayson@jspinsider.com) 042 This code is from "Servlets and JavaServer pages; the J2EE Web Tier", 043 http://www.jspbook.com. 044 */ 045 package org.deegree.enterprise.servlet; 046 047 import java.io.IOException; 048 import java.io.OutputStreamWriter; 049 import java.io.PrintWriter; 050 051 import javax.servlet.ServletOutputStream; 052 import javax.servlet.http.HttpServletResponse; 053 import javax.servlet.http.HttpServletResponseWrapper; 054 055 /** 056 * 057 * 058 * 059 * @version $Revision: 9338 $ 060 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 061 * @author last edited by: $Author: apoth $ 062 * 063 * @version 1.0. $Revision: 9338 $, $Date: 2007-12-27 13:31:31 +0100 (Do, 27 Dez 2007) $ 064 * 065 * @since 2.0 066 */ 067 public class GZIPResponseWrapper extends HttpServletResponseWrapper { 068 protected HttpServletResponse origResponse = null; 069 070 protected ServletOutputStream stream = null; 071 072 protected PrintWriter writer = null; 073 074 /** 075 * 076 * @param response 077 */ 078 public GZIPResponseWrapper( HttpServletResponse response ) { 079 super( response ); 080 origResponse = response; 081 } 082 083 /** 084 * 085 * @return response stream 086 * @throws IOException 087 */ 088 public ServletOutputStream createOutputStream() throws IOException { 089 return ( new GZIPResponseStream( origResponse ) ); 090 } 091 092 /** 093 * 094 * 095 */ 096 public void finishResponse() { 097 try { 098 if ( writer != null ) { 099 writer.close(); 100 } else { 101 if ( stream != null ) { 102 stream.close(); 103 } 104 } 105 } catch ( IOException e ) { 106 } 107 } 108 109 /** 110 * @throws IOException 111 */ 112 public void flushBuffer() throws IOException { 113 stream.flush(); 114 } 115 116 /** 117 * @return ServletOutputStream 118 * @throws IOException 119 */ 120 public ServletOutputStream getOutputStream() throws IOException { 121 if ( writer != null ) { 122 throw new IllegalStateException( "getWriter() has already been called!" ); 123 } 124 125 if ( stream == null ) 126 stream = createOutputStream(); 127 return ( stream ); 128 } 129 130 /** 131 * @return PrintWriter 132 * @throws IOException 133 */ 134 public PrintWriter getWriter() throws IOException { 135 if ( writer != null ) { 136 return ( writer ); 137 } 138 139 if ( stream != null ) { 140 throw new IllegalStateException( "getOutputStream() has already been called!" ); 141 } 142 143 stream = createOutputStream(); 144 writer = new PrintWriter( new OutputStreamWriter( stream, "UTF-8" ) ); 145 return ( writer ); 146 } 147 148 public void setContentLength( int length ) { 149 super.setContentLength( length ); 150 } 151 }