package org.jboss.seam.ui.facelet;
import static org.jboss.seam.ScopeType.APPLICATION;
import javax.servlet.ServletContext;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.ServletLifecycle;
import org.jboss.seam.mock.MockServletContext;
@Name("org.jboss.seam.ui.facelet.mockServletContext")
@Scope(APPLICATION)
@BypassInterceptors
@Install(dependencies="org.jboss.seam.faces.renderer")
@AutoCreate
public class ServletContextManager
{
private ServletContext servletContext;
@Create
public void create()
{
// TODO A bit of a hack, we should store the servlet context properly
if (ServletLifecycle.getCurrentServletContext() != null)
{
servletContext = ServletLifecycle.getCurrentServletContext();
}
else
{
this.servletContext = new MockServletContext();
}
}
@Unwrap
public ServletContext getServletContext()
{
return servletContext;
}
public static ServletContext instance()
{
if (!Contexts.isApplicationContextActive())
{
throw new IllegalStateException("Application context is not active");
}
return (ServletContext) Component.getInstance(ServletContextManager.class, APPLICATION);
}
}