001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.controls.runtime.servlet;
020:
021: import javax.servlet.http.HttpServletResponse;
022: import javax.servlet.http.HttpServletResponseWrapper;
023: import javax.servlet.ServletResponse;
024:
025: /**
026: * This class is the contextual service implementation for javax.servlet.http.HttpServletResponse.
027: * It acts as an intermediary between the client and the HttpServletResponse instance held by the
028: * associated ServletBeanContext. It validates that attempt to access the HttpServletResponse
029: * only occur during the servlet request processing lifecycle, then delegates to the underlying
030: * HttpServletResponse instance for actual services.
031: */
032: /* package */class HttpResponseService extends ServletResponseService
033: implements HttpServletResponse {
034:
035: // todo: how will this class version with subsequent Servlet specification versions?
036:
037: /**
038: * This static helper class derives from javax.servlet.HttpServletResponseWrapper and can
039: * be used to wrap a HttpServletResponseService instance in cases where the client expects
040: * to be able to use the standard wrapper interfaces to unwrap responses.
041: */
042: private static class Wrapper extends HttpServletResponseWrapper {
043: Wrapper(HttpResponseService responseService) {
044: super (responseService);
045: _responseService = responseService;
046: }
047:
048: /**
049: * Overrides the default HttpServletRequestWrapper.getResponse implementation. Rather
050: * than just returning the request passed into the constructor (i.e. the request
051: * service), it will go unwrap step further and return the current (active) http
052: * response.
053: */
054: public HttpServletResponse getResponse() {
055: return _responseService.getHttpServletResponse();
056: }
057:
058: HttpResponseService _responseService;
059: }
060:
061: /* package */HttpResponseService(ServletBeanContext beanContext) {
062: super (beanContext);
063: }
064:
065: final protected HttpServletResponse getHttpServletResponse() {
066: ServletResponse servletRequest = getServletBeanContext()
067: .getServletResponse();
068: if (!(servletRequest instanceof HttpServletResponse))
069: throw new IllegalStateException(
070: "Current request is not an HttpServletResponse");
071: return (HttpServletResponse) servletRequest;
072: }
073:
074: /**
075: * This method returns a ServletRequestWrapper instance that wraps the request service.
076: * This is useful in instances where there is code that uses the wrapper interfaces to
077: * unwrap requests to get to the 'root' request.
078: */
079: /* package */HttpServletResponse getHttpResponseWrapper() {
080: return new Wrapper(this );
081: }
082:
083: public void addCookie(javax.servlet.http.Cookie cookie) {
084: getHttpServletResponse().addCookie(cookie);
085: }
086:
087: public boolean containsHeader(java.lang.String name) {
088: return getHttpServletResponse().containsHeader(name);
089: }
090:
091: public java.lang.String encodeURL(java.lang.String url) {
092: return getHttpServletResponse().encodeURL(url);
093: }
094:
095: public java.lang.String encodeRedirectURL(java.lang.String url) {
096: return getHttpServletResponse().encodeRedirectURL(url);
097: }
098:
099: public java.lang.String encodeUrl(java.lang.String url) {
100: return getHttpServletResponse().encodeUrl(url);
101: }
102:
103: public java.lang.String encodeRedirectUrl(java.lang.String url) {
104: return getHttpServletResponse().encodeRedirectUrl(url);
105: }
106:
107: public void sendError(int sc, java.lang.String msg)
108: throws java.io.IOException {
109: getHttpServletResponse().sendError(sc, msg);
110: }
111:
112: public void sendError(int sc) throws java.io.IOException {
113: getHttpServletResponse().sendError(sc);
114: }
115:
116: public void sendRedirect(java.lang.String location)
117: throws java.io.IOException {
118: getHttpServletResponse().sendRedirect(location);
119: }
120:
121: public void setDateHeader(java.lang.String name, long date) {
122: getHttpServletResponse().setDateHeader(name, date);
123: }
124:
125: public void addDateHeader(java.lang.String name, long date) {
126: getHttpServletResponse().addDateHeader(name, date);
127: }
128:
129: public void setHeader(java.lang.String name, java.lang.String value) {
130: getHttpServletResponse().setHeader(name, value);
131: }
132:
133: public void addHeader(java.lang.String name, java.lang.String value) {
134: getHttpServletResponse().addHeader(name, value);
135: }
136:
137: public void setIntHeader(java.lang.String name, int value) {
138: getHttpServletResponse().setIntHeader(name, value);
139: }
140:
141: public void addIntHeader(java.lang.String name, int value) {
142: getHttpServletResponse().addIntHeader(name, value);
143: }
144:
145: public void setStatus(int sc) {
146: getHttpServletResponse().setStatus(sc);
147: }
148:
149: public void setStatus(int sc, java.lang.String sm) {
150: getHttpServletResponse().setStatus(sc, sm);
151: }
152: }
|