1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.myfaces.shared.view;
20
21 import java.io.IOException;
22 import java.io.PrintWriter;
23
24 import javax.servlet.ServletOutputStream;
25 import javax.servlet.ServletResponse;
26 import javax.servlet.ServletResponseWrapper;
27
28 /**
29 * Implementation of a switching response wrapper to turn
30 * output on and off according to the JSF spec 2.0.
31 * <p/>
32 * Fall-back implementation of HttpServletResponseSwitch
33 * for non HttpServletResponses.
34 *
35 * @author Werner Punz (latest modification by $Author: lu4242 $)
36 * @author Jakob Korherr
37 * @version $Revision: 1151650 $ $Date: 2011-07-27 17:14:17 -0500 (Wed, 27 Jul 2011) $
38 */
39 public class ServletResponseSwitch extends ServletResponseWrapper implements ResponseSwitch
40 {
41
42 private PrintWriter _switchableWriter;
43 private SwitchableOutputStream _switchableOutputStream;
44 private boolean _enabled = true;
45
46 public ServletResponseSwitch(ServletResponse response)
47 {
48 super(response);
49 }
50
51 /**
52 * Enables or disables the Response's Writer and OutputStream.
53 * @param enabled
54 */
55 public void setEnabled(boolean enabled)
56 {
57 _enabled = enabled;
58 }
59
60 /**
61 * Are the Response's Writer and OutputStream currently enabled?
62 * @return
63 */
64 public boolean isEnabled()
65 {
66 return _enabled;
67 }
68
69 @Override
70 public int getBufferSize()
71 {
72 if (isEnabled())
73 {
74 return super.getBufferSize();
75 }
76 return 0;
77 }
78
79 @Override
80 public boolean isCommitted()
81 {
82 if (isEnabled())
83 {
84 return super.isCommitted();
85 }
86 return false;
87 }
88
89 @Override
90 public void reset()
91 {
92 if (isEnabled())
93 {
94 super.reset();
95 }
96 }
97
98 @Override
99 public void resetBuffer()
100 {
101 if (isEnabled())
102 {
103 super.resetBuffer();
104 }
105 }
106
107 @Override
108 public void flushBuffer() throws IOException
109 {
110 if (isEnabled())
111 {
112 super.flushBuffer();
113 }
114 }
115
116 @Override
117 public void setResponse(ServletResponse response)
118 {
119 // only change the response if it is not the same object
120 if (response != getResponse())
121 {
122 // our OutputStream and our Writer are not valid for the new response
123 _switchableOutputStream = null;
124 _switchableWriter = null;
125
126 // set the new response
127 super.setResponse(response);
128 }
129 }
130
131 @Override
132 public ServletOutputStream getOutputStream() throws IOException
133 {
134 if (_switchableOutputStream == null)
135 {
136 _switchableOutputStream = new SwitchableOutputStream(super.getOutputStream(), this);
137 }
138 return _switchableOutputStream;
139 }
140
141 @Override
142 public PrintWriter getWriter() throws IOException
143 {
144 if (_switchableWriter == null)
145 {
146 _switchableWriter = new PrintWriter(new SwitchableWriter(super.getWriter(), this));
147 }
148 return _switchableWriter;
149 }
150
151 }