/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to you under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.shale.test.mock; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.faces.FactoryFinder; 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.lifecycle.Lifecycle; import javax.faces.render.RenderKit; import javax.faces.render.RenderKitFactory; /** * <p>Mock implementation of <code>FacesContext</code>.</p> * * $Id$ */ public class MockFacesContext extends FacesContext { // ------------------------------------------------------------ Constructors public MockFacesContext() { super(); setCurrentInstance(this); } public MockFacesContext(ExternalContext externalContext) { setExternalContext(externalContext); setCurrentInstance(this); } public MockFacesContext(ExternalContext externalContext, Lifecycle lifecycle) { this(externalContext); this.lifecycle = lifecycle; } // ----------------------------------------------------- Mock Object Methods /** * <p>Set the <code>Application</code> instance for this instance.</p> * * @param application The new Application */ public void setApplication(Application application) { this.application = application; } /** * <p>Set the <code>ExternalContext</code> instance for this instance.</p> * * @param externalContext The new ExternalContext */ public void setExternalContext(ExternalContext externalContext) { this.externalContext = externalContext; } /** * <p>Set the <code>FacesContext</code> instance for this instance.</p> * * @param facesContext The new FacesContext */ public static void setCurrentInstance(FacesContext facesContext) { FacesContext.setCurrentInstance(facesContext); } // ------------------------------------------------------ Instance Variables private Application application = null; private ExternalContext externalContext = null; private Lifecycle lifecycle = null; private Map messages = new HashMap(); private boolean renderResponse = false; private boolean responseComplete = false; private ResponseStream responseStream = null; private ResponseWriter responseWriter = null; private UIViewRoot viewRoot = null; // ---------------------------------------------------- FacesContext Methods /** {@inheritDoc} */ public Application getApplication() { return this.application; } /** {@inheritDoc} */ public Iterator getClientIdsWithMessages() { return messages.keySet().iterator(); } /** {@inheritDoc} */ public ExternalContext getExternalContext() { return this.externalContext; } /** {@inheritDoc} */ public Severity getMaximumSeverity() { Severity severity = null; Iterator messages = getMessages(); while (messages.hasNext()) { FacesMessage message = (FacesMessage) messages.next(); if (severity == null) { severity = message.getSeverity(); } else if (message.getSeverity().getOrdinal() > severity.getOrdinal()) { severity = message.getSeverity(); } } return severity; } /** {@inheritDoc} */ public Iterator getMessages() { ArrayList results = new ArrayList(); Iterator clientIds = messages.keySet().iterator(); while (clientIds.hasNext()) { String clientId = (String) clientIds.next(); results.addAll((List) messages.get(clientId)); } return results.iterator(); } /** {@inheritDoc} */ public Iterator getMessages(String clientId) { List list = (List) messages.get(clientId); if (list == null) { list = new ArrayList(); } return list.iterator(); } /** {@inheritDoc} */ 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); } /** {@inheritDoc} */ public boolean getRenderResponse() { return this.renderResponse; } /** {@inheritDoc} */ public boolean getResponseComplete() { return this.responseComplete; } /** {@inheritDoc} */ public ResponseStream getResponseStream() { return this.responseStream; } /** {@inheritDoc} */ public void setResponseStream(ResponseStream responseStream) { this.responseStream = responseStream; } /** {@inheritDoc} */ public ResponseWriter getResponseWriter() { return this.responseWriter; } /** {@inheritDoc} */ public void setResponseWriter(ResponseWriter responseWriter) { this.responseWriter = responseWriter; } /** {@inheritDoc} */ public UIViewRoot getViewRoot() { return this.viewRoot; } /** {@inheritDoc} */ public void setViewRoot(UIViewRoot viewRoot) { this.viewRoot = viewRoot; } /** {@inheritDoc} */ public void addMessage(String clientId, FacesMessage message) { if (message == null) { throw new NullPointerException(); } List list = (List) messages.get(clientId); if (list == null) { list = new ArrayList(); messages.put(clientId, list); } list.add(message); } /** {@inheritDoc} */ public void release() { application = null; externalContext = null; messages.clear(); renderResponse = false; responseComplete = false; responseStream = null; responseWriter = null; viewRoot = null; setCurrentInstance(null); } /** {@inheritDoc} */ public void renderResponse() { this.renderResponse = true; } /** {@inheritDoc} */ public void responseComplete() { this.responseComplete = true; } }