/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This 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 software 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.jsfunit.context;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.Principal;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.faces.context.ExternalContext;
import javax.faces.context.Flash;
import javax.servlet.http.HttpSession;
/**
* This ExternalContext will delegate everything to the real ExternalContext
* except for the getSession() method. For that, it will return a
* JSFUnitHttpSession that protects JSFUnit's session attributes.
*
* @author Stan Silvert
* @since 1.0
*/
public class JSFUnitDelegatingExternalContext extends ExternalContext
{
private ExternalContext wrapped;
private HttpSession session;
JSFUnitDelegatingExternalContext(ExternalContext wrapped)
{
if (wrapped == null) throw new NullPointerException("wrapped ExternalContext can not be null");
this.wrapped = wrapped;
}
@Override
public Principal getUserPrincipal()
{
return wrapped.getUserPrincipal();
}
@Override
public Map<String, Object> getSessionMap()
{
return wrapped.getSessionMap();
}
@Override
public Object getResponse()
{
return wrapped.getResponse();
}
@Override
public Map<String, Object> getRequestCookieMap()
{
return wrapped.getRequestCookieMap();
}
@Override
public String getRequestContextPath()
{
return wrapped.getRequestContextPath();
}
@Override
public Object getRequest()
{
return wrapped.getRequest();
}
@Override
public String getRemoteUser()
{
return wrapped.getRemoteUser();
}
@Override
public Map getInitParameterMap()
{
return wrapped.getInitParameterMap();
}
@Override
public Object getContext()
{
return wrapped.getContext();
}
@Override
public String getAuthType()
{
return wrapped.getAuthType();
}
@Override
public Map<String, Object> getApplicationMap()
{
return wrapped.getApplicationMap();
}
@Override
public Map<String, String> getRequestHeaderMap()
{
return wrapped.getRequestHeaderMap();
}
@Override
public Map<String, String[]> getRequestHeaderValuesMap()
{
return wrapped.getRequestHeaderValuesMap();
}
@Override
public Locale getRequestLocale()
{
return wrapped.getRequestLocale();
}
@Override
public Iterator<Locale> getRequestLocales()
{
return wrapped.getRequestLocales();
}
@Override
public Map<String, Object> getRequestMap()
{
return wrapped.getRequestMap();
}
@Override
public Map<String, String> getRequestParameterMap()
{
return wrapped.getRequestParameterMap();
}
@Override
public Iterator<String> getRequestParameterNames()
{
return wrapped.getRequestParameterNames();
}
@Override
public Map<String, String[]> getRequestParameterValuesMap()
{
return wrapped.getRequestParameterValuesMap();
}
@Override
public String getRequestPathInfo()
{
return wrapped.getRequestPathInfo();
}
@Override
public String getRequestServletPath()
{
return wrapped.getRequestServletPath();
}
/**
* Return a JSFUnitHttpSession.
*
* @param create See superclass description.
*
* @return A JSFUnitHttpSession or <code>null</code> if create is false
* and there is no current session.
*/
@Override
public Object getSession(boolean create)
{
if ((this.session == null) && (wrapped.getSession(create) != null))
{
this.session = new JSFUnitHttpSession((HttpSession)wrapped.getSession(create));
}
return this.session;
}
@Override
public void redirect(String url) throws IOException
{
wrapped.redirect(url);
}
@Override
public void log(String message)
{
wrapped.log(message);
}
@Override
public boolean isUserInRole(String role)
{
return wrapped.isUserInRole(role);
}
@Override
public Set<String> getResourcePaths(String path)
{
return wrapped.getResourcePaths(path);
}
@Override
public String getInitParameter(String name)
{
return wrapped.getInitParameter(name);
}
@Override
public String encodeResourceURL(String url)
{
return wrapped.encodeResourceURL(url);
}
@Override
public String encodeNamespace(String name)
{
return wrapped.encodeNamespace(name);
}
@Override
public String encodeActionURL(String url)
{
return wrapped.encodeActionURL(url);
}
@Override
public void dispatch(String path) throws IOException
{
wrapped.dispatch(path);
}
@Override
public URL getResource(String path) throws MalformedURLException
{
return wrapped.getResource(path);
}
@Override
public InputStream getResourceAsStream(String path)
{
return wrapped.getResourceAsStream(path);
}
@Override
public void log(String message, Throwable exception)
{
wrapped.log(message, exception);
}
@Override
public String getResponseContentType()
{
return wrapped.getResponseContentType();
}
@Override
public String getResponseCharacterEncoding()
{
return wrapped.getResponseCharacterEncoding();
}
@Override
public String getRequestContentType()
{
return wrapped.getRequestContentType();
}
@Override
public String getRequestCharacterEncoding()
{
return wrapped.getRequestCharacterEncoding();
}
@Override
public void setResponse(Object response)
{
wrapped.setResponse(response);
}
@Override
public void setRequest(Object request)
{
wrapped.setRequest(request);
}
@Override
public void setResponseCharacterEncoding(String encoding)
{
wrapped.setResponseCharacterEncoding(encoding);
}
@Override
public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException
{
wrapped.setRequestCharacterEncoding(encoding);
}
//--------- JSF 2.0 Methods -------------------------------------
@Override
public void addResponseCookie(String name, String value, Map<String, Object> properties)
{
wrapped.addResponseCookie(name, value, properties);
}
@Override
public String getContextName()
{
return wrapped.getContextName();
}
@Override
public String getMimeType(String file)
{
return wrapped.getMimeType(file);
}
@Override
public String getRealPath(String path)
{
return wrapped.getRealPath(path);
}
@Override
public int getRequestContentLength()
{
return wrapped.getRequestContentLength();
}
@Override
public String getRequestScheme()
{
return wrapped.getRequestScheme();
}
@Override
public String getRequestServerName()
{
return wrapped.getRequestServerName();
}
@Override
public int getRequestServerPort()
{
return wrapped.getRequestServerPort();
}
@Override
public OutputStream getResponseOutputStream() throws IOException
{
return wrapped.getResponseOutputStream();
}
/**
* Invalidate the session. This does not actually destroy the session. It
* leaves the session intact and removes all elements except those used
* by the JSFUnit framework.
*/
@Override
public void invalidateSession()
{
if (this.session != null) this.session.invalidate();
}
@Override
public void setResponseContentType(String contentType)
{
wrapped.setResponseContentType(contentType);
}
@Override
public void addResponseHeader(String name, String value)
{
wrapped.addResponseHeader(name, value);
}
@Override
public void setResponseHeader(String name, String value)
{
wrapped.setResponseHeader(name, value);
}
@Override
public String encodeBookmarkableURL(String baseUrl, Map<String, List<String>> parameters)
{
return wrapped.encodeBookmarkableURL(baseUrl, parameters);
}
@Override
public String encodePartialActionURL(String url)
{
return wrapped.encodePartialActionURL(url);
}
@Override
public String encodeRedirectURL(String baseUrl, Map<String, List<String>> parameters)
{
return wrapped.encodeRedirectURL(baseUrl, parameters);
}
@Override
public Flash getFlash()
{
return wrapped.getFlash();
}
@Override
public int getResponseBufferSize()
{
return wrapped.getResponseBufferSize();
}
@Override
public Writer getResponseOutputWriter() throws IOException
{
return wrapped.getResponseOutputWriter();
}
@Override
public boolean isResponseCommitted()
{
return wrapped.isResponseCommitted();
}
@Override
public void responseFlushBuffer() throws IOException
{
wrapped.responseFlushBuffer();
}
@Override
public void responseReset()
{
wrapped.responseReset();
}
@Override
public void responseSendError(int statusCode, String message) throws IOException
{
wrapped.responseSendError(statusCode, message);
}
@Override
public void setResponseBufferSize(int size)
{
wrapped.setResponseBufferSize(size);
}
@Override
public void setResponseContentLength(int length)
{
wrapped.setResponseContentLength(length);
}
@Override
public void setResponseStatus(int statusCode)
{
wrapped.setResponseStatus(statusCode);
}
//--------- End JSF 2.0 Methods ---------------------------------
}