001 // Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.internal.services;
016
017 import java.io.BufferedWriter;
018 import java.io.IOException;
019 import java.io.OutputStream;
020 import java.io.OutputStreamWriter;
021 import java.io.PrintWriter;
022 import java.io.Writer;
023
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletResponse;
026
027 import org.apache.tapestry5.Link;
028 import org.apache.tapestry5.internal.InternalConstants;
029 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
030 import org.apache.tapestry5.services.Response;
031
032 /**
033 * Implementation of {@link Response} that wraps around an underlying {@link HttpServletResponse}.
034 */
035 public class ResponseImpl implements Response
036 {
037 private final HttpServletRequest request;
038
039 private final HttpServletResponse response;
040
041 public ResponseImpl(HttpServletRequest request, HttpServletResponse response)
042 {
043 assert request != null;
044 assert response != null;
045
046 this.request = request;
047 this.response = response;
048 }
049
050 public PrintWriter getPrintWriter(String contentType) throws IOException
051 {
052 assert InternalUtils.isNonBlank(contentType);
053 OutputStream os = getOutputStream(contentType);
054
055 Writer w = new OutputStreamWriter(os, response.getCharacterEncoding());
056
057 return new PrintWriter(new BufferedWriter(w));
058 }
059
060 public String encodeURL(String URL)
061 {
062 return response.encodeURL(URL);
063 }
064
065 public String encodeRedirectURL(String URL)
066 {
067 return response.encodeRedirectURL(URL);
068 }
069
070 public void sendRedirect(String URL) throws IOException
071 {
072 response.sendRedirect(URL);
073 }
074
075 public void sendRedirect(Link link) throws IOException
076 {
077 assert link != null;
078 String redirectURL = encodeRedirectURL(link.toRedirectURI());
079
080 sendRedirect(redirectURL);
081 }
082
083 public void setStatus(int sc)
084 {
085 response.setStatus(sc);
086 }
087
088 public OutputStream getOutputStream(String contentType) throws IOException
089 {
090 assert InternalUtils.isNonBlank(contentType);
091 response.setContentType(contentType);
092
093 return response.getOutputStream();
094 }
095
096 public void sendError(int sc, String message) throws IOException
097 {
098 response.sendError(sc, message);
099 }
100
101 public void setContentLength(int length)
102 {
103 response.setContentLength(length);
104 }
105
106 public void setDateHeader(String name, long date)
107 {
108 response.setDateHeader(name, date);
109 }
110
111 public void setHeader(String name, String value)
112 {
113 response.setHeader(name, value);
114 }
115
116 public void setIntHeader(String name, int value)
117 {
118 response.setIntHeader(name, value);
119 }
120
121 public boolean isCommitted()
122 {
123 return response.isCommitted();
124 }
125
126 public void disableCompression()
127 {
128 request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
129 }
130 }