1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.tags;
17
18 import java.io.IOException;
19 import java.util.Enumeration;
20 import java.util.HashMap;
21 import java.util.Map;
22 import java.util.Stack;
23
24 import javax.el.ELContext;
25 import javax.servlet.Servlet;
26 import javax.servlet.ServletConfig;
27 import javax.servlet.ServletContext;
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33 import javax.servlet.http.HttpSession;
34 import javax.servlet.jsp.JspWriter;
35 import javax.servlet.jsp.PageContext;
36 import javax.servlet.jsp.tagext.BodyContent;
37
38 public class MockJspContext extends PageContext {
39
40 private ServletContext servletContext;
41 private HttpServletRequest request;
42 private HttpServletResponse response;
43 private JspWriter writer = new MockJspWriter();
44 private Stack<JspWriter> outStack = new Stack<JspWriter>();
45 private Map<Integer, Map<String, Object>> attributes = new HashMap<Integer, Map<String, Object>>();
46 private int[] FIND_ATTRIBUTE_SEQ = { PageContext.PAGE_SCOPE,
47 PageContext.REQUEST_SCOPE, PageContext.SESSION_SCOPE,
48 PageContext.APPLICATION_SCOPE };
49
50 public MockJspContext() {
51 this(null, null, null);
52 }
53
54 public MockJspContext(ServletContext servletContext,
55 HttpServletRequest request, HttpServletResponse response) {
56 for (int scope : FIND_ATTRIBUTE_SEQ) {
57 attributes.put(scope, new HashMap<String, Object>());
58 }
59 this.servletContext = servletContext;
60 this.request = request;
61 this.response = response;
62 }
63
64 public MockJspWriter getMockJspWriter() {
65 return (MockJspWriter) this.writer;
66 }
67
68 public String getResult() {
69 return getMockJspWriter().getResult();
70 }
71
72 @Override
73 public Object findAttribute(String name) {
74 Object value = null;
75 for (int scope : FIND_ATTRIBUTE_SEQ) {
76 value = getAttribute(name, scope);
77 if (value != null) {
78 return value;
79 }
80 }
81 return null;
82 }
83
84 @Override
85 public Object getAttribute(String name) {
86 return getAttribute(name, PageContext.PAGE_SCOPE);
87 }
88
89 @Override
90 public Object getAttribute(String name, int scope) {
91 Map<String, Object> scopeMap = attributes.get(scope);
92 return scopeMap != null ? scopeMap.get(name) : null;
93 }
94
95 @SuppressWarnings("unchecked")
96 @Override
97 public Enumeration getAttributeNamesInScope(int scope) {
98 throw new UnsupportedOperationException();
99 }
100
101 @Override
102 public int getAttributesScope(String name) {
103 throw new UnsupportedOperationException();
104 }
105
106 @Override
107 public JspWriter getOut() {
108 return writer;
109 }
110
111 @Override
112 public void removeAttribute(String name) {
113 throw new UnsupportedOperationException();
114 }
115
116 @Override
117 public void removeAttribute(String name, int scope) {
118 this.attributes.get(scope).remove(name);
119 }
120
121 @Override
122 public void setAttribute(String name, Object value) {
123 setAttribute(name, value, PageContext.PAGE_SCOPE);
124 }
125
126 @Override
127 public void setAttribute(String name, Object value, int scope) {
128 attributes.get(scope).put(name, value);
129 }
130
131 @Override
132 public void forward(String relativeUrlPath) throws ServletException,
133 IOException {
134 }
135
136 @Override
137 public Exception getException() {
138 return null;
139 }
140
141 @Override
142 public Object getPage() {
143 return null;
144 }
145
146 @Override
147 public ServletRequest getRequest() {
148 return request;
149 }
150
151 @Override
152 public ServletResponse getResponse() {
153 return response;
154 }
155
156 @Override
157 public ServletConfig getServletConfig() {
158 return null;
159 }
160
161 @Override
162 public ServletContext getServletContext() {
163 return servletContext;
164 }
165
166 @Override
167 public HttpSession getSession() {
168 return request.getSession();
169 }
170
171 @Override
172 public void handlePageException(Exception e) throws ServletException,
173 IOException {
174 }
175
176 @Override
177 public void handlePageException(Throwable t) throws ServletException,
178 IOException {
179 }
180
181 @Override
182 public void include(String relativeUrlPath) throws ServletException,
183 IOException {
184 }
185
186 @Override
187 public void include(String relativeUrlPath, boolean flush)
188 throws ServletException, IOException {
189 }
190
191 @Override
192 public void initialize(Servlet servlet, ServletRequest request,
193 ServletResponse response, String errorPageURL,
194 boolean needsSession, int bufferSize, boolean autoFlush)
195 throws IOException, IllegalStateException, IllegalArgumentException {
196 }
197
198 @Override
199 public void release() {
200 }
201
202 public JspWriter popBody() {
203 writer = outStack.pop();
204 return writer;
205 }
206
207 public BodyContent pushBody() {
208 outStack.push(writer);
209 writer = new MockBodyContent(writer);
210 return (BodyContent) writer;
211 }
212
213 @Override
214 public ELContext getELContext() {
215 throw new UnsupportedOperationException();
216 }
217
218 @SuppressWarnings("deprecation")
219 @Override
220 public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() {
221 throw new UnsupportedOperationException();
222 }
223
224 @SuppressWarnings("deprecation")
225 @Override
226 public javax.servlet.jsp.el.VariableResolver getVariableResolver() {
227 throw new UnsupportedOperationException();
228 }
229
230 }