/*
* $Id: MockFacesContext.java,v 1.1 2005/10/18 17:47:54 edburns Exp $
*/
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* https://javaserverfaces.dev.java.net/CDDL.html or
* legal/CDDLv1.0.txt.
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* at legal/CDDLv1.0.txt.
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* [Name of File] [ver.__] [Date]
*
* Copyright 2005 Sun Microsystems Inc. All Rights Reserved
*/
package com.sun.faces.mock;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
import javax.faces.FactoryFinder;
import javax.faces.webapp.PreJsf2ExceptionHandlerFactory;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.application.ViewHandler;
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.context.PartialViewContext;
import javax.faces.context.ExceptionHandler;
import javax.faces.event.PhaseId;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.el.ELContext;
import com.sun.faces.renderkit.RenderKitUtils;
// Mock Object for FacesContext
public class MockFacesContext extends FacesContext {
private static final String POST_BACK_MARKER =
MockFacesContext.class.getName() + "_POST_BACK";
private Severity maxSeverity;
private Map<Object, Object> attributes = null;
private PartialViewContext partialView = new MockPartialViewContext();
private boolean released;
// ------------------------------------------------------------ Constructors
public MockFacesContext() {
super();
setCurrentInstance(this);
}
public MockFacesContext(ExternalContext externalContext) {
setExternalContext(externalContext);
setCurrentInstance(this);
elContext = new MockELContext(new MockELResolver());
elContext.putContext(FacesContext.class, this);
}
public MockFacesContext(ExternalContext externalContext, Lifecycle lifecycle) {
this(externalContext);
}
// -------------------------------------------------------------- Properties
// application
private Application application = null;
public Application getApplication() {
return (this.application);
}
public void setApplication(Application application) {
this.application = application;
}
public Map<Object, Object> getAttributes() {
if (null == attributes) {
attributes = new HashMap<Object,Object>();
}
return attributes;
}
// clientIdsWithMessages
public Iterator getClientIdsWithMessages() {
return (messages.keySet().iterator());
}
private PhaseId currentPhaseId = PhaseId.RESTORE_VIEW;
public PhaseId getCurrentPhaseId() {
return currentPhaseId;
}
public void setCurrentPhaseId(PhaseId currentPhaseId) {
this.currentPhaseId = currentPhaseId;
}
private ELContext elContext = null;
public ELContext getELContext() {
return (this.elContext);
}
public void setELContext(ELContext elContext) {
this.elContext = elContext;
}
// externalContext
private ExternalContext externalContext = null;
public ExternalContext getExternalContext() {
return (this.externalContext);
}
public void setExternalContext(ExternalContext externalContext) {
this.externalContext = externalContext;
}
// locale
private Locale locale = null;
public Locale getLocale() {
return (this.locale);
}
public void setLocale(Locale locale) {
this.locale = locale;
}
// maximumSeverity
public Severity getMaximumSeverity() {
return maxSeverity;
}
// messages
private Map<String,List<FacesMessage>> messages = new HashMap();
public Iterator getMessages() {
List<FacesMessage> results = getMessageList();
return (results.iterator());
}
public Iterator getMessages(String clientId) {
List<FacesMessage> list = getMessageList(clientId);
return (list.iterator());
}
public List<FacesMessage> getMessageList() {
ArrayList results = new ArrayList<FacesMessage>();
Iterator clientIds = messages.keySet().iterator();
while (clientIds.hasNext()) {
String clientId = (String) clientIds.next();
results.addAll((List<FacesMessage>) messages.get(clientId));
}
return results;
}
public List<FacesMessage> getMessageList(String clientId) {
List<FacesMessage> list = messages.get(clientId);
if (list == null) {
list = Collections.EMPTY_LIST;
}
return list;
}
// renderKit
public RenderKit getRenderKit() {
UIViewRoot vr = getViewRoot();
if (vr == null) {
return (null);
}
String renderKitId = vr.getRenderKitId();
if (renderKitId == null) {
return (null);
}
RenderKitFactory rkFactory = (RenderKitFactory)
FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
return (rkFactory.getRenderKit(this, renderKitId));
}
// renderResponse
private boolean renderResponse = false;
public boolean getRenderResponse() {
return (this.renderResponse);
}
public void setRenderResponse(boolean renderResponse) {
this.renderResponse = renderResponse;
}
// responseComplete
private boolean responseComplete = false;
public boolean getResponseComplete() {
return (this.responseComplete);
}
public void setResponseComplete(boolean responseComplete) {
this.responseComplete = responseComplete;
}
// responseStream
private ResponseStream responseStream = null;
public ResponseStream getResponseStream() {
return (this.responseStream);
}
public void setResponseStream(ResponseStream responseStream) {
this.responseStream = responseStream;
}
// responseWriter
private ResponseWriter responseWriter = null;
public ResponseWriter getResponseWriter() {
return (this.responseWriter);
}
public void setResponseWriter(ResponseWriter responseWriter) {
this.responseWriter = responseWriter;
}
// viewRoot
private UIViewRoot root = null;
public UIViewRoot getViewRoot() {
return (this.root);
}
public void setViewRoot(UIViewRoot root) {
this.root = root;
}
@Override
public boolean isPostback() {
Boolean postback = (Boolean) this.getAttributes().get(POST_BACK_MARKER);
if (postback == null) {
RenderKit rk = this.getRenderKit();
if (rk != null) {
postback = rk.getResponseStateManager().isPostback(this);
} else {
// ViewRoot hasn't been set yet, so calculate the RK
ViewHandler vh = this.getApplication().getViewHandler();
String rkId = vh.calculateRenderKitId(this);
postback = RenderKitUtils.getResponseStateManager(this, rkId).isPostback(this);
}
this.getAttributes().put(POST_BACK_MARKER, postback);
}
return postback.booleanValue();
}
@Override
public boolean isReleased() {
return released;
}
private ExceptionHandler exceptionHandler =
new PreJsf2ExceptionHandlerFactory().getExceptionHandler();
@Override
public ExceptionHandler getExceptionHandler() {
return exceptionHandler;
}
@Override
public void setExceptionHandler(ExceptionHandler exceptionHandler) {
this.exceptionHandler = exceptionHandler;
}
// ---------------------------------------------------------- Public Methods
public void addMessage(String clientId, FacesMessage message){
if (message == null) {
throw new NullPointerException();
}
if (maxSeverity == null) {
maxSeverity = message.getSeverity();
} else {
Severity sev = message.getSeverity();
if (sev.getOrdinal() > maxSeverity.getOrdinal()) {
maxSeverity = sev;
}
}
List list = (List) messages.get(clientId);
if (list == null) {
list = new ArrayList();
messages.put(clientId, list);
}
list.add(message);
}
public void release() {
released = true;
application = null;
externalContext = null;
locale = null;
messages.clear();
renderResponse = false;
responseComplete = false;
responseStream = null;
responseWriter = null;
if (null != attributes) {
attributes.clear();
attributes = null;
}
root = null;
setCurrentInstance(null);
}
public void renderResponse() {
this.renderResponse = true;
}
public void responseComplete() {
this.responseComplete = true;
}
@Override
public PartialViewContext getPartialViewContext() {
return partialView;
}
boolean validationFailed = false;
public void validationFailed() {
validationFailed = true;
}
public boolean isValidationFailed() {
return validationFailed;
}
}