package ch.dueni.jsf12.context;
import java.util.Iterator;
import javax.el.ELContext;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
import javax.faces.render.RenderKit;
public class CustomFacesContext extends FacesContext {
private FacesContext delegate;
private ExternalContext externalContext;
public CustomFacesContext(FacesContext context) {
delegate = context;
// 1. assign the new FacesContext instance to the ThreadLocal
setCurrentInstance(this);
// 2. put CustomFacesContext as FacesContext to ELContext
getELContext().putContext(FacesContext.class, this);
// 3. preset wrapping CustomExternalContext
externalContext = new CustomExternalContext(delegate.getExternalContext());
}
public void addMessage(String clientId, FacesMessage message) {
delegate.addMessage(clientId, message);
}
public Application getApplication() {
return delegate.getApplication();
}
public Iterator<String> getClientIdsWithMessages() {
return delegate.getClientIdsWithMessages();
}
public ELContext getELContext() {
return delegate.getELContext();
}
public ExternalContext getExternalContext() {
return externalContext;
}
public Severity getMaximumSeverity() {
return delegate.getMaximumSeverity();
}
public Iterator<FacesMessage> getMessages() {
return delegate.getMessages();
}
public Iterator<FacesMessage> getMessages(String clientId) {
return delegate.getMessages(clientId);
}
public RenderKit getRenderKit() {
return delegate.getRenderKit();
}
public boolean getRenderResponse() {
return delegate.getRenderResponse();
}
public boolean getResponseComplete() {
return delegate.getResponseComplete();
}
public ResponseStream getResponseStream() {
return delegate.getResponseStream();
}
public ResponseWriter getResponseWriter() {
return delegate.getResponseWriter();
}
public UIViewRoot getViewRoot() {
return delegate.getViewRoot();
}
public void release() {
delegate.release();
}
public void renderResponse() {
delegate.renderResponse();
}
public void responseComplete() {
delegate.responseComplete();
}
public void setResponseStream(ResponseStream responseStream) {
delegate.setResponseStream(responseStream);
}
public void setResponseWriter(ResponseWriter responseWriter) {
delegate.setResponseWriter(responseWriter);
}
public void setViewRoot(UIViewRoot root) {
delegate.setViewRoot(root);
}
}