/*
* Copyright 2004-2012 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.mayaa.impl.cycle.web;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import org.seasar.mayaa.impl.cycle.AbstractResponse;
import org.seasar.mayaa.impl.util.StringUtil;
/**
* @author Masataka Kurihara (Gluegent, Inc.)
*/
public class ResponseImpl extends AbstractResponse {
private static final long serialVersionUID = -4653384671998376182L;
private HttpServletResponse _httpServletResponse;
private transient ResponseHeaderCache _headers = new ResponseHeaderCache();
private int _status;
protected void check() {
if (_httpServletResponse == null) {
throw new IllegalStateException();
}
}
public void redirect(String url) {
if (isFlushed() == false) {
check();
try {
_httpServletResponse.sendRedirect(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public void error(int errorCode, String message) {
if (isFlushed() == false) {
check();
try {
_httpServletResponse.sendError(errorCode, message);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
protected void setContentTypeToUnderlyingObject(
String contentType) {
check();
if (StringUtil.isEmpty(contentType)) {
throw new IllegalArgumentException();
}
_httpServletResponse.setContentType(contentType);
}
// Response implements -----------------------------------------
public void addHeader(String name, String value) {
check();
if (StringUtil.isEmpty(name)) {
return;
}
_httpServletResponse.addHeader(name, value);
_headers.addHeader(name, value);
}
public void setHeader(String name, String value) {
check();
if (StringUtil.isEmpty(name)) {
return;
}
_httpServletResponse.setHeader(name, value);
_headers.setHeader(name, value);
}
public void setStatus(int code) {
check();
_httpServletResponse.setStatus(code);
_status = code;
}
public OutputStream getOutputStream() {
check();
try {
return _httpServletResponse.getOutputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public String encodeURL(String url) {
check();
if (StringUtil.isEmpty(url)) {
throw new IllegalArgumentException();
}
return _httpServletResponse.encodeURL(url);
}
// ContextAware implemetns --------------------------------------
public void setUnderlyingContext(Object context) {
if (context == null
|| context instanceof HttpServletResponse == false) {
throw new IllegalArgumentException();
}
_httpServletResponse = (HttpServletResponse) context;
clearBuffer();
}
public Object getUnderlyingContext() {
check();
return _httpServletResponse;
}
public List getHeaders(String name) {
return _headers.getHeaders(name);
}
public boolean containsHeader(String name) {
return _headers.containsHeader(name);
}
public Set getHeaderNames() {
return _headers.getHeaderNames();
}
public int getStatus() {
return _status;
}
public String getCharacterEncoding() {
return _httpServletResponse.getCharacterEncoding();
}
// for deserialize
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
_headers = new ResponseHeaderCache();
}
}