1 12 package org.displaytag.filter; 13 14 import java.io.CharArrayWriter ; 15 import java.io.IOException ; 16 import java.io.PrintWriter ; 17 18 import javax.servlet.ServletOutputStream ; 19 import javax.servlet.http.HttpServletResponse ; 20 import javax.servlet.http.HttpServletResponseWrapper ; 21 22 import org.apache.commons.lang.ArrayUtils; 23 import org.apache.commons.lang.StringUtils; 24 import org.apache.commons.logging.Log; 25 import org.apache.commons.logging.LogFactory; 26 import org.displaytag.tags.TableTagParameters; 27 28 29 36 public class BufferedResponseWrapper13Impl extends HttpServletResponseWrapper implements BufferedResponseWrapper 37 { 38 39 42 private static Log log = LogFactory.getLog(BufferedResponseWrapper13Impl.class); 43 44 47 private CharArrayWriter outputWriter; 48 49 52 private SimpleServletOutputStream servletOutputStream; 53 54 57 private String contentType; 58 59 62 private boolean state; 63 64 67 private boolean outRequested; 68 69 72 public BufferedResponseWrapper13Impl(HttpServletResponse httpServletResponse) 73 { 74 super(httpServletResponse); 75 this.outputWriter = new CharArrayWriter (); 76 this.servletOutputStream = new SimpleServletOutputStream(); 77 } 78 79 82 public String getContentType() 83 { 84 return this.contentType; 85 } 86 87 92 public void setContentType(String theContentType) 93 { 94 if (state) 95 { 96 log.debug("Allowing content type"); 97 98 if (this.contentType != null && this.contentType.indexOf("charset") > -1) { 101 String charset = this.contentType.substring(this.contentType.indexOf("charset")); 103 if (log.isDebugEnabled()) 104 { 105 log.debug("Adding charset: [" + charset + "]"); 106 } 107 108 getResponse().setContentType(StringUtils.substringBefore(theContentType, "charset") + '=' + charset); 109 } 110 else 111 { 112 getResponse().setContentType(theContentType); 113 } 114 115 } 116 this.contentType = theContentType; 117 } 118 119 122 public PrintWriter getWriter() throws IOException 123 { 124 125 if (state && !outRequested) 126 { 127 log.debug("getWriter() returned"); 128 129 this.servletOutputStream.reset(); 131 this.outputWriter.reset(); 132 this.outRequested = true; 133 return ((HttpServletResponse ) getResponse()).getWriter(); 134 } 135 136 return new PrintWriter (this.outputWriter); 137 } 138 139 143 public void flushBuffer() throws IOException 144 { 145 if (outputWriter != null) 146 { 147 this.outputWriter.flush(); 148 this.servletOutputStream.outputStream.reset(); 149 } 150 } 151 152 155 public ServletOutputStream getOutputStream() throws IOException 156 { 157 if (state && !outRequested) 158 { 159 log.debug("getOutputStream() returned"); 160 161 this.servletOutputStream.reset(); 163 this.outputWriter.reset(); 164 this.outRequested = true; 165 return ((HttpServletResponse ) getResponse()).getOutputStream(); 166 } 167 return this.servletOutputStream; 168 } 169 170 173 public void addHeader(String name, String value) 174 { 175 if (TableTagParameters.PARAMETER_EXPORTING.equals(name)) 177 { 178 log.debug("Magic header received, real response is now accessible"); 179 state = true; 180 } 181 else 182 { 183 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 184 { 185 ((HttpServletResponse ) getResponse()).addHeader(name, value); 186 } 187 } 188 } 189 190 193 public boolean isOutRequested() 194 { 195 return this.outRequested; 196 } 197 198 201 public String getContentAsString() 202 { 203 return this.outputWriter.toString() + this.servletOutputStream.toString(); 204 } 205 206 209 public void setDateHeader(String name, long date) 210 { 211 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 212 { 213 ((HttpServletResponse ) getResponse()).setDateHeader(name, date); 214 } 215 } 216 217 220 public void addDateHeader(String name, long date) 221 { 222 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 223 { 224 ((HttpServletResponse ) getResponse()).addDateHeader(name, date); 225 } 226 } 227 228 231 public void setHeader(String name, String value) 232 { 233 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 234 { 235 ((HttpServletResponse ) getResponse()).setHeader(name, value); 236 } 237 } 238 239 242 public void setIntHeader(String name, int value) 243 { 244 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 245 { 246 ((HttpServletResponse ) getResponse()).setIntHeader(name, value); 247 } 248 } 249 250 253 public void addIntHeader(String name, int value) 254 { 255 if (!ArrayUtils.contains(FILTERED_HEADERS, StringUtils.lowerCase(name))) 256 { 257 ((HttpServletResponse ) getResponse()).addIntHeader(name, value); 258 } 259 } 260 261 } | Popular Tags |