/** * Copyright (C) 2010 Orbeon, Inc. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either version * 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * The full text of the license is available at http://www.gnu.org/copyleft/lesser.html */ package org.orbeon.oxf.externalcontext; import org.orbeon.oxf.externalcontext.ExternalContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Locale; /** * Wrap an ExternalContext.Response into an HttpServletResponse. * * Methods with counterparts in ExternalContext.Response use the wrapped * ExternalContext.Response object and can be overridden using ResponseWrapper. Other methods * directly forward to the native response. * * 2016-10-12: Usages: * * - `ServletToExternalContextRequestDispatcherWrapper` * - `ServletExternalContext.getRequestDispatcher * - `RequestDispatcherSubmission` (see https://github.com/orbeon/orbeon-forms/issues/2809) */ public class ExternalContextToHttpServletResponseWrapper extends HttpServletResponseWrapper { private ExternalContext.Response response; private HttpServletResponse nativeResponse; private ServletOutputStream servletOutputStream; public ExternalContextToHttpServletResponseWrapper(ExternalContext.Response response) { super((HttpServletResponse) response.getNativeResponse()); this.response = response; if (response.getNativeResponse() instanceof HttpServletResponse) this.nativeResponse = (HttpServletResponse) response.getNativeResponse(); } public void addCookie(Cookie cookie) { //TODO if (nativeResponse != null) nativeResponse.addCookie(cookie); } public void addDateHeader(String clazz, long l) { //TODO if (nativeResponse != null) nativeResponse.addDateHeader(clazz, l); } public void addHeader(String clazz, String clazz1) { response.addHeader(clazz, clazz1); } public void addIntHeader(String clazz, int i) { //TODO if (nativeResponse != null) nativeResponse.addIntHeader(clazz, i); } public boolean containsHeader(String clazz) { //TODO if (nativeResponse != null) return nativeResponse.containsHeader(clazz); else return false; } public String encodeRedirectURL(String clazz) { if (nativeResponse != null) return nativeResponse.encodeRedirectURL(clazz); else return clazz;// CHECK } public String encodeRedirectUrl(String clazz) { return encodeRedirectURL(clazz); } public String encodeURL(String clazz) { if (nativeResponse != null) return nativeResponse.encodeURL(clazz); else return clazz;//CHECK } public String encodeUrl(String clazz) { return encodeURL(clazz); } public void sendError(int i) throws IOException { response.sendError(i); } public void sendError(int i, String clazz) throws IOException { response.sendError(i); } public void sendRedirect(String location) throws IOException { response.sendRedirect(location, false, false); } public void setDateHeader(String clazz, long l) { //TODO if (nativeResponse != null) nativeResponse.setDateHeader(clazz, l); } public void setHeader(String clazz, String clazz1) { response.setHeader(clazz, clazz1); } public void setIntHeader(String clazz, int i) { //TODO if (nativeResponse != null) nativeResponse.setIntHeader(clazz, i); } public void setStatus(int i) { response.setStatus(i); } public void setStatus(int i, String clazz) { response.setStatus(i); } public void flushBuffer() throws IOException { //TODO } public int getBufferSize() { return 0;//TODO } public String getCharacterEncoding() { return response.getCharacterEncoding(); } public Locale getLocale() { //TODO if (nativeResponse != null) return nativeResponse.getLocale(); else return null; } public ServletOutputStream getOutputStream() throws IOException { if (servletOutputStream == null) { final OutputStream outputStream = response.getOutputStream(); servletOutputStream = new ServletOutputStream() { public void write(int b) throws IOException { outputStream.write(b); } }; } return servletOutputStream; } public PrintWriter getWriter() throws IOException { return response.getWriter(); } public boolean isCommitted() { return response.isCommitted(); } public void reset() { response.reset(); } public void resetBuffer() { //TODO } public void setBufferSize(int i) { //TODO } public void setContentLength(int i) { response.setContentLength(i); } public void setContentType(String clazz) { response.setContentType(clazz); } public void setLocale(Locale locale) { //TODO if (nativeResponse != null) nativeResponse.setLocale(locale); } }