1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.macvu.tiles.capture;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23
24 import javax.servlet.ServletOutputStream;
25 import javax.servlet.http.HttpServletResponse;
26 import javax.servlet.http.HttpServletResponseWrapper;
27 import java.io.IOException;
28 import java.io.PrintWriter;
29
30 public class CacheHttpServletResponse extends HttpServletResponseWrapper {
31
32 protected static Log log = LogFactory.getLog(CacheHttpServletResponse.class);
33
34 private boolean gotStream;
35 private boolean gotWriter;
36
37 private CacheContent cacheContent;
38 private CacheServletOutputStream out;
39 private PrintWriter writer;
40
41 public CacheHttpServletResponse(HttpServletResponse delegate) {
42 super(delegate);
43
44 if (log.isDebugEnabled()) {
45 log.debug("Real Class Name of Delegate is: " + delegate.getClass().getName());
46 }
47
48 cacheContent = new CacheContent();
49 }
50
51 public ServletOutputStream getOutputStream() throws IOException {
52 if (log.isDebugEnabled()) {
53 log.debug("CacheHttpServletResponse: getOutputStream().");
54 }
55
56 if (gotWriter) {
57 throw new IllegalStateException("Cannot get output stream after gotten the writer");
58 }
59
60 if (out == null) {
61 out = new CacheServletOutputStream(super.getOutputStream(), cacheContent);
62 }
63
64 gotStream = true;
65
66 return out;
67 }
68
69 public PrintWriter getWriter() throws IOException {
70 if (log.isDebugEnabled()) {
71 log.debug("CacheHttpServletResponse: getWriter().");
72 }
73
74 if (gotStream) {
75 throw new IllegalStateException("Cannot get writer after gotten the output stream");
76 }
77
78 if (writer == null) {
79 writer = new PrintWriterWrapper(super.getWriter(), cacheContent);
80 }
81
82 gotWriter = true;
83
84 return writer;
85 }
86
87 public String getCache() {
88 if (gotWriter) {
89 writer.flush();
90 }
91
92 return cacheContent.getCache();
93 }
94
95 }
96