    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
    015package org.apache.tapestry5.http.internal.services;
    016
    017import java.io.BufferedWriter;
    018import java.io.IOException;
    019import java.io.OutputStream;
    020import java.io.OutputStreamWriter;
    021import java.io.PrintWriter;
    022import java.io.Writer;
    023
    024import javax.servlet.http.HttpServletRequest;
    025import javax.servlet.http.HttpServletResponse;
    026
    027import org.apache.tapestry5.http.Link;
    028import org.apache.tapestry5.http.TapestryHttpConstants;
    029import org.apache.tapestry5.http.services.Response;
    030import org.apache.tapestry5.ioc.internal.util.InternalUtils;
    031
    032/**
    033 * Implementation of {@link Response} that wraps around an underlying {@link HttpServletResponse}.
    034 */
    035public 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 addHeader(String name, String value)
    117    {
    118        response.addHeader(name, value);
    119    }
    120
    121    public void setIntHeader(String name, int value)
    122    {
    123        response.setIntHeader(name, value);
    124    }
    125
    126    public boolean isCommitted()
    127    {
    128        return response.isCommitted();
    129    }
    130
    131    public void disableCompression()
    132    {
    133        request.setAttribute(TapestryHttpConstants.SUPPRESS_COMPRESSION, true);
    134    }
    135}