blob: 97e52310576833664f6aa02acab513a8d931f1c4 [file] [log] [blame]
/*
* 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.cocoon.faces.context;
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
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;
import javax.faces.render.RenderKitFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Implementation of the Java Server Faces Context
*
* @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
* @version CVS $Id$
*/
public class FacesContextImpl extends FacesContext {
private ExternalContextImpl extContext;
private boolean released;
private boolean renderResponse;
private boolean responseComplete;
private Application application;
private UIViewRoot viewRoot;
private Map messages;
private ResponseStream responseStream;
private ResponseWriter responseWriter;
FacesContextImpl(ExternalContextImpl extContext) {
this.extContext = extContext;
FacesContext.setCurrentInstance(this);
}
private void checkReleased() {
if (released) {
throw new IllegalStateException("Context is released.");
}
}
public Application getApplication() {
checkReleased();
if (application == null) {
ApplicationFactory aFactory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
this.application = aFactory.getApplication();
}
return this.application;
}
public Iterator getClientIdsWithMessages() {
checkReleased();
if (this.messages == null) {
return Collections.EMPTY_LIST.iterator();
} else {
return this.messages.keySet().iterator();
}
}
public ExternalContext getExternalContext() {
checkReleased();
return this.extContext;
}
public Severity getMaximumSeverity() {
throw new UnsupportedOperationException();
}
public Iterator getMessages() {
checkReleased();
if (this.messages == null) {
return Collections.EMPTY_LIST.iterator();
}
List messages = new ArrayList();
for (Iterator i = this.messages.values().iterator(); i.hasNext();) {
final List list = (List) i.next();
messages.addAll(list);
}
if (messages.size() > 0) {
return messages.iterator();
}
return Collections.EMPTY_LIST.iterator();
}
public Iterator getMessages(String clientID) {
checkReleased();
if (this.messages != null) {
final List list = (List) this.messages.get(clientID);
if (list != null) {
return list.iterator();
}
}
return Collections.EMPTY_LIST.iterator();
}
public RenderKit getRenderKit() {
checkReleased();
UIViewRoot viewRoot = getViewRoot();
if (viewRoot == null) {
return null;
}
String renderKitId = viewRoot.getRenderKitId();
if (renderKitId == null) {
return null;
} else {
RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
return rkFactory.getRenderKit(this, renderKitId);
}
}
public boolean getRenderResponse() {
checkReleased();
return this.renderResponse;
}
public boolean getResponseComplete() {
checkReleased();
return this.responseComplete;
}
public ResponseStream getResponseStream() {
checkReleased();
return this.responseStream;
}
public void setResponseStream(ResponseStream responseStream) {
checkReleased();
if (responseStream == null) {
throw new NullPointerException("ResponseStream can't be null.");
}
this.responseStream = responseStream;
}
public ResponseWriter getResponseWriter() {
checkReleased();
return this.responseWriter;
}
public void setResponseWriter(ResponseWriter responseWriter) {
checkReleased();
if (responseWriter == null) {
throw new NullPointerException("ResponseWriter can't be null.");
}
this.responseWriter = responseWriter;
}
public UIViewRoot getViewRoot() {
checkReleased();
return this.viewRoot;
}
public void setViewRoot(UIViewRoot viewRoot) {
checkReleased();
this.viewRoot = viewRoot;
}
public void addMessage(String clientID, FacesMessage message) {
checkReleased();
if (message == null) {
throw new NullPointerException("Message can't be null");
}
if (messages == null) {
messages = new HashMap();
}
List list = (List) messages.get(clientID);
if (list == null) {
list = new ArrayList();
messages.put(clientID, list);
}
list.add(message);
}
public void release() {
this.released = true;
this.extContext = null;
FacesContext.setCurrentInstance(null);
this.application = null;
this.viewRoot = null;
this.messages = null;
this.responseStream = null;
this.responseWriter = null;
}
public void renderResponse() {
checkReleased();
this.renderResponse = true;
}
public void responseComplete() {
checkReleased();
this.responseComplete = true;
}
}