You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mf...@apache.org on 2009/01/08 20:24:51 UTC
svn commit: r732799 - in
/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0:
api/src/main/java/javax/portlet/faces/
api/src/main/java/javax/portlet/faces/component/
impl/src/main/java/org/apache/myfaces/portlet/faces/application/
impl/src/main/java...
Author: mfreedman
Date: Thu Jan 8 11:24:50 2009
New Revision: 732799
URL: http://svn.apache.org/viewvc?rev=732799&view=rev
Log:
Initial changes to run on JSF2.0
Modified:
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/component/PortletNamingContainerUIViewRoot.java
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesContextFactoryImpl.java
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java
myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletFacesContextImpl.java
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java Thu Jan 8 11:24:50 2009
@@ -200,6 +200,8 @@
mFacesBridgeClass = null;
}
mDefaultViewIdMap = null;
+
+ super.destroy();
}
/**
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/component/PortletNamingContainerUIViewRoot.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/component/PortletNamingContainerUIViewRoot.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/component/PortletNamingContainerUIViewRoot.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/api/src/main/java/javax/portlet/faces/component/PortletNamingContainerUIViewRoot.java Thu Jan 8 11:24:50 2009
@@ -10,12 +10,31 @@
*/
package javax.portlet.faces.component;
+import java.io.IOException;
import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import java.util.Map;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+import javax.faces.FacesException;
import javax.faces.context.FacesContext;
+import javax.faces.component.ContextCallback;
import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+import javax.faces.event.PhaseListener;
+import javax.faces.render.Renderer;
import javax.portlet.faces.annotation.PortletNamingContainer;
@@ -34,6 +53,8 @@
private static final long serialVersionUID = -4524288011655837711L;
private static final String SEPARATOR = (new Character(NamingContainer.SEPARATOR_CHAR))
.toString();
+
+ private UIViewRoot mDelegate;
public PortletNamingContainerUIViewRoot()
{
@@ -43,9 +64,7 @@
public PortletNamingContainerUIViewRoot(UIViewRoot viewRootToReplace)
{
super();
- setViewId(viewRootToReplace.getViewId());
- setLocale(viewRootToReplace.getLocale());
- setRenderKitId(viewRootToReplace.getRenderKitId());
+ mDelegate = viewRootToReplace;
}
/**
@@ -99,5 +118,510 @@
super
.getContainerClientId(context));
}
+
+ // Now override everything from the superclasses -- First UIViewRoot
+ @Override
+ public String getFamily()
+ {
+ if (mDelegate != null)
+ return mDelegate.getFamily();
+ else
+ return super.getFamily();
+ }
+
+ @Override
+ public String getRenderKitId()
+ {
+ if (mDelegate != null)
+ return mDelegate.getRenderKitId();
+ else
+ return super.getRenderKitId();
+ }
+
+ @Override
+ public void setRenderKitId(String renderKitId)
+ {
+ if (mDelegate != null)
+ mDelegate.setRenderKitId(renderKitId);
+ else
+ super.setRenderKitId(renderKitId);
+ }
+
+ @Override
+ public String getViewId()
+ {
+ if (mDelegate != null)
+ return mDelegate.getViewId();
+ else
+ return super.getViewId();
+ }
+
+ @Override
+ public void setViewId(String viewId)
+ {
+ if (mDelegate != null)
+ mDelegate.setViewId(viewId);
+ else
+ super.setViewId(viewId);
+ }
+
+ @Override
+ public MethodExpression getBeforePhaseListener()
+ {
+ if (mDelegate != null)
+ return mDelegate.getBeforePhaseListener();
+ else
+ return super.getBeforePhaseListener();
+ }
+
+ @Override
+ public void setBeforePhaseListener(MethodExpression newBeforePhase)
+ {
+ if (mDelegate != null)
+ mDelegate.setBeforePhaseListener(newBeforePhase);
+ else
+ super.setBeforePhaseListener(newBeforePhase);
+ }
+
+ @Override
+ public MethodExpression getAfterPhaseListener()
+ {
+ if (mDelegate != null)
+ return mDelegate.getAfterPhaseListener();
+ else
+ return super.getAfterPhaseListener();
+ }
+
+ @Override
+ public void setAfterPhaseListener(MethodExpression newAfterPhase)
+ {
+ if (mDelegate != null)
+ mDelegate.setAfterPhaseListener(newAfterPhase);
+ else
+ super.setAfterPhaseListener(newAfterPhase);
+ }
+
+ @Override
+ public void removePhaseListener(PhaseListener toRemove)
+ {
+ if (mDelegate != null)
+ mDelegate.removePhaseListener(toRemove);
+ else
+ super.removePhaseListener(toRemove);
+ }
+
+ @Override
+ public void addPhaseListener(PhaseListener newPhaseListener)
+ {
+ if (mDelegate != null)
+ mDelegate.addPhaseListener(newPhaseListener);
+ else
+ super.addPhaseListener(newPhaseListener);
+ }
+
+ @Override
+ public void queueEvent(FacesEvent event)
+ {
+ if (mDelegate != null)
+ mDelegate.queueEvent(event);
+ else
+ super.queueEvent(event);
+ }
+
+ @Override
+ public void processDecodes(FacesContext context)
+ {
+ if (mDelegate != null)
+ mDelegate.processDecodes(context);
+ else
+ super.processDecodes(context);
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ if (mDelegate != null)
+ mDelegate.encodeBegin(context);
+ else
+ super.encodeBegin(context);
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context)
+ throws IOException
+ {
+ if (mDelegate != null)
+ mDelegate.encodeEnd(context);
+ else
+ super.encodeEnd(context);
+ }
+
+ @Override
+ public void processValidators(FacesContext context)
+ {
+ if (mDelegate != null)
+ mDelegate.processValidators(context);
+ else
+ super.processValidators(context);
+ }
+
+ @Override
+ public void processUpdates(FacesContext context)
+ {
+ if (mDelegate != null)
+ mDelegate.processUpdates(context);
+ else
+ super.processUpdates(context);
+ }
+
+ @Override
+ public void processApplication(FacesContext context)
+ {
+ if (mDelegate != null)
+ mDelegate.processApplication(context);
+ else
+ super.processApplication(context);
+ }
+
+ @Override
+ public String createUniqueId()
+ {
+ if (mDelegate != null)
+ return mDelegate.createUniqueId();
+ else
+ return super.createUniqueId();
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ if (mDelegate != null)
+ return mDelegate.getLocale();
+ else
+ return super.getLocale();
+ }
+
+ @Override
+ public void setLocale(Locale locale)
+ {
+ if (mDelegate != null)
+ mDelegate.setLocale(locale);
+ else
+ super.setLocale(locale);
+ }
+
+ @Override
+ public Object saveState(FacesContext context)
+ {
+ if (mDelegate != null)
+ return mDelegate.saveState(context);
+ else
+ return super.saveState(context);
+ }
+
+ @Override
+ public void restoreState(FacesContext context,
+ Object state)
+ {
+ if (mDelegate != null)
+ mDelegate.restoreState(context, state);
+ else
+ super.restoreState(context, state);
+ }
+
+ /* Now override and delegate UIComponentBase */
+
+
+ @Override
+ public ValueBinding getValueBinding(String name)
+ {
+ if (mDelegate != null)
+ return mDelegate.getValueBinding(name);
+ else
+ return super.getValueBinding(name);
+ }
+
+ @Override
+ public void setValueBinding(String name,
+ ValueBinding binding)
+ {
+ if (mDelegate != null)
+ mDelegate.setValueBinding(name, binding);
+ else
+ super.setValueBinding(name, binding);
+ }
+
+ @Override
+ public boolean invokeOnComponent(FacesContext context,
+ String clientId,
+ ContextCallback callback)
+ throws FacesException
+ {
+ if (mDelegate != null)
+ return mDelegate.invokeOnComponent(context, clientId, callback);
+ else
+ return super.invokeOnComponent(context, clientId, callback);
+ }
+
+ @Override
+ public Map<String,Object> getAttributes()
+ {
+ if (mDelegate != null)
+ return mDelegate.getAttributes();
+ else
+ return super.getAttributes();
+ }
+
+ @Override
+ public String getClientId(FacesContext context)
+ {
+ if (mDelegate != null)
+ return mDelegate.getClientId(context);
+ else
+ return super.getClientId(context);
+ }
+
+ @Override
+ public String getId()
+ {
+ if (mDelegate != null)
+ return mDelegate.getId();
+ else
+ return super.getId();
+ }
+
+ @Override
+ public void setId(String id)
+ {
+ if (mDelegate != null)
+ mDelegate.setId(id);
+ else
+ super.setId(id);
+ }
+
+ @Override
+ public UIComponent getParent()
+ {
+ if (mDelegate != null)
+ return mDelegate.getParent();
+ else
+ return super.getParent();
+ }
+
+ @Override
+ public void setParent(UIComponent parent)
+ {
+ if (mDelegate != null)
+ mDelegate.setParent(parent);
+ else
+ super.setParent(parent);
+ }
+
+ @Override
+ public boolean isRendered()
+ {
+ if (mDelegate != null)
+ return mDelegate.isRendered();
+ else
+ return super.isRendered();
+ }
+
+ @Override
+ public void setRendered(boolean rendered)
+ {
+ if (mDelegate != null)
+ mDelegate.setRendered(rendered);
+ else
+ super.setRendered(rendered);
+ }
+
+ @Override
+ public String getRendererType()
+ {
+ if (mDelegate != null)
+ return mDelegate.getRendererType();
+ else
+ return super.getRendererType();
+ }
+
+ @Override
+ public void setRendererType(String rendererType)
+ {
+ if (mDelegate != null)
+ mDelegate.setRendererType(rendererType);
+ else
+ super.setRendererType(rendererType);
+ }
+
+ @Override
+ public boolean getRendersChildren()
+ {
+ if (mDelegate != null)
+ return mDelegate.getRendersChildren();
+ else
+ return super.getRendersChildren();
+ }
+
+ @Override
+ public List<UIComponent> getChildren()
+ {
+ if (mDelegate != null)
+ return mDelegate.getChildren();
+ else
+ return super.getChildren();
+ }
+
+ @Override
+ public int getChildCount()
+ {
+ if (mDelegate != null)
+ return mDelegate.getChildCount();
+ else
+ return super.getChildCount();
+ }
+
+ @Override
+ public UIComponent findComponent(String expr)
+ {
+ if (mDelegate != null)
+ return mDelegate.findComponent(expr);
+ else
+ return super.findComponent(expr);
+ }
+ @Override
+ public Map<String,UIComponent> getFacets()
+ {
+ if (mDelegate != null)
+ return mDelegate.getFacets();
+ else
+ return super.getFacets();
+ }
+
+ @Override
+ public int getFacetCount()
+ {
+ if (mDelegate != null)
+ return mDelegate.getFacetCount();
+ else
+ return super.getFacetCount();
+ }
+
+ @Override
+ public UIComponent getFacet(String name)
+ {
+ if (mDelegate != null)
+ return mDelegate.getFacet(name);
+ else
+ return super.getFacet(name);
+ }
+
+ @Override
+ public Iterator<UIComponent> getFacetsAndChildren()
+ {
+ if (mDelegate != null)
+ return mDelegate.getFacetsAndChildren();
+ else
+ return super.getFacetsAndChildren();
+ }
+
+ @Override
+ public void broadcast(FacesEvent event)
+ throws AbortProcessingException
+ {
+ if (mDelegate != null)
+ mDelegate.broadcast(event);
+ else
+ super.broadcast(event);
+ }
+
+ @Override
+ public void decode(FacesContext context)
+ {
+ if (mDelegate != null)
+ mDelegate.decode(context);
+ else
+ super.decode(context);
+ }
+
+ @Override
+ public void encodeChildren(FacesContext context)
+ throws IOException
+ {
+ if (mDelegate != null)
+ mDelegate.encodeChildren(context);
+ else
+ super.encodeChildren(context);
+ }
+
+
+ @Override
+ public Object processSaveState(FacesContext context)
+ {
+ if (mDelegate != null)
+ return mDelegate.processSaveState(context);
+ else
+ return super.processSaveState(context);
+ }
+
+ @Override
+ public void processRestoreState(FacesContext context,
+ Object state)
+ {
+ if (mDelegate != null)
+ mDelegate.processRestoreState(context, state);
+ else
+ super.processRestoreState(context, state);
+ }
+
+ @Override
+ public boolean isTransient()
+ {
+ if (mDelegate != null)
+ return mDelegate.isTransient();
+ else
+ return super.isTransient();
+ }
+
+ @Override
+ public void setTransient(boolean transientFlag)
+ {
+ if (mDelegate != null)
+ mDelegate.setTransient(transientFlag);
+ else
+ super.setTransient(transientFlag);
+ }
+
+ /* Inherited from UIComponent */
+ @Override
+ public void encodeAll(FacesContext context)
+ throws IOException
+ {
+ if (mDelegate != null)
+ mDelegate.encodeAll(context);
+ else
+ super.encodeAll(context);
+ }
+
+ @Override
+ public ValueExpression getValueExpression(String name)
+ {
+ if (mDelegate != null)
+ return mDelegate.getValueExpression(name);
+ else
+ return super.getValueExpression(name);
+ }
+
+ @Override
+ public void setValueExpression(String name,
+ ValueExpression binding)
+ {
+ if (mDelegate != null)
+ mDelegate.setValueExpression(name, binding);
+ else
+ super.setValueExpression(name, binding);
+ }
+
+
}
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java Thu Jan 8 11:24:50 2009
@@ -84,7 +84,7 @@
mDelegate = handler;
}
- protected ViewHandler getWrapped()
+ public ViewHandler getWrapped()
{
return mDelegate;
}
@@ -98,13 +98,24 @@
// We recognize this EL expresion here and evaluate to a viewid
// before delegating// Do nothing when not running in portlet request
- if (BridgeUtil.isPortletRequest() && viewId.startsWith("#"))
+ if (BridgeUtil.isPortletRequest())
{
- // evaluate this as an EL expression
- viewId = (String) context.getApplication().evaluateExpressionGet(context, viewId, String.class);
- if (viewId == null)
+ /* Note: later versions of glassfish jsf append a / if not in the nav rule
+ * -- remove it if blocking the expression.
+ */
+ if (viewId.startsWith("/#"))
+ {
+ viewId = viewId.substring(1);
+ }
+
+ if (viewId.startsWith("#"))
{
- //TODO: at least log an error.
+ // evaluate this as an EL expression
+ viewId = (String) context.getApplication().evaluateExpressionGet(context, viewId, String.class);
+ if (viewId == null)
+ {
+ //TODO: at least log an error.
+ }
}
}
@@ -129,13 +140,24 @@
// before delegating
// Do nothing when not running in portlet request
- if (BridgeUtil.isPortletRequest() && viewId.startsWith("#"))
+ if (BridgeUtil.isPortletRequest())
{
- // evaluate this as an EL expression
- viewId = (String) facesContext.getApplication().evaluateExpressionGet(facesContext, viewId, String.class);
- if (viewId == null)
+ /* Note: later versions of glassfish jsf append a / if not in the nav rule
+ * -- remove it if blocking the expression.
+ */
+ if (viewId.startsWith("/#"))
+ {
+ viewId = viewId.substring(1);
+ }
+
+ if (viewId.startsWith("#"))
{
- //TODO: at least log an error.
+ // evaluate this as an EL expression
+ viewId = (String) facesContext.getApplication().evaluateExpressionGet(facesContext, viewId, String.class);
+ if (viewId == null)
+ {
+ //TODO: at least log an error.
+ }
}
}
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesContextFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesContextFactoryImpl.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesContextFactoryImpl.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesContextFactoryImpl.java Thu Jan 8 11:24:50 2009
@@ -20,6 +20,8 @@
package org.apache.myfaces.portlet.faces.context;
import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.context.ExceptionHandlerFactory;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
@@ -40,10 +42,13 @@
public class FacesContextFactoryImpl extends FacesContextFactory
{
private FacesContextFactory mHandler;
+ private ExceptionHandlerFactory mExceptionHandlerFactory;
public FacesContextFactoryImpl(FacesContextFactory handler)
{
mHandler = handler;
+ mExceptionHandlerFactory = (ExceptionHandlerFactory)
+ FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY);
}
@Override
@@ -108,11 +113,13 @@
if (context instanceof PortletContext && request instanceof PortletRequest
&& response instanceof PortletResponse)
{
- return new PortletFacesContextImpl(
+ FacesContext ctx = new PortletFacesContextImpl(
new PortletExternalContextImpl((PortletContext) context,
(PortletRequest) request,
(PortletResponse) response),
lifecycle);
+ ctx.setExceptionHandler(mExceptionHandlerFactory.getExceptionHandler());
+ return ctx;
}
else
{
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java Thu Jan 8 11:24:50 2009
@@ -19,8 +19,11 @@
package org.apache.myfaces.portlet.faces.context;
+import com.sun.faces.context.ExternalContextImpl;
+
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
@@ -54,6 +57,7 @@
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.PortletResponse;
+import javax.portlet.PortletSession;
import javax.portlet.PortletURL;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceURL;
@@ -63,6 +67,12 @@
import javax.portlet.faces.BridgeDefaultViewNotSpecifiedException;
import javax.portlet.faces.BridgeInvalidViewPathException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import javax.servlet.http.HttpSession;
+
import org.apache.myfaces.portlet.faces.bridge.BridgeImpl;
import org.apache.myfaces.portlet.faces.util.QueryString;
import org.apache.myfaces.portlet.faces.util.URLUtils;
@@ -130,6 +140,13 @@
private List<String> mFacesMappings = null;
private String mServletPath = null;
private String mPathInfo = null;
+
+ private enum ALLOWABLE_COOKIE_PROPERTIES {
+ domain,
+ maxAge,
+ path,
+ secure
+ }
@SuppressWarnings("unchecked")
@@ -167,6 +184,67 @@
mViewId = null;
}
+
+ /**
+ * @see ExternalContext#addResponseHeader(String, String)
+ * @param name
+ * @param value
+ */
+ @Override
+ public void addResponseHeader(String name, String value)
+ {
+ mPortletResponse.addProperty(name, value);
+ }
+
+ /**
+ * @see ExternalContext#setResponseHeader(String, String)
+ * @param name
+ * @param value
+ */
+ @Override
+ public void setResponseHeader(String name, String value)
+ {
+ mPortletResponse.setProperty(name, value);
+ }
+
+ /**
+ * @see ExternalContext#addResponseCookie(String, String, java.util.Map)
+ * @param name
+ * @param value
+ * @param properties
+ */
+ @Override
+ public void addResponseCookie(String name,
+ String value,
+ Map<String,Object> properties) {
+
+ Cookie cookie = new Cookie(name, value);
+ if (properties != null && properties.size() != 0) {
+ for (Map.Entry<String,Object> entry : properties.entrySet()) {
+ String key = entry.getKey();
+ ALLOWABLE_COOKIE_PROPERTIES p = ALLOWABLE_COOKIE_PROPERTIES.valueOf(key);
+ Object v = entry.getValue();
+ switch (p) {
+ case domain:
+ cookie.setDomain((String) v);
+ break;
+ case maxAge:
+ cookie.setMaxAge((Integer) v);
+ break;
+ case path:
+ cookie.setPath((String) v);
+ break;
+ case secure:
+ cookie.setSecure((Boolean) v);
+ break;
+ default:
+ throw new IllegalStateException(); // shouldn't happen
+ }
+ }
+ }
+ mPortletResponse.addProperty(cookie);
+ }
+
/**
* This method is the gatekeeper for managing the viewId across action/render + subsequent
@@ -793,6 +871,14 @@
{
return mPortletContext;
}
+
+ /**
+ * @see javax.faces.context.ExternalContext#getContextName()
+ */
+ public String getContextName()
+ {
+ return mPortletContext.getPortletContextName();
+ }
@Override
public Object getRequest()
@@ -825,6 +911,19 @@
}
return mSessionMap;
}
+
+ /**
+ * @see javax.faces.context.ExternalContext#invalidateSession()
+ */
+ @Override
+ public void invalidateSession() {
+
+ PortletSession session = mPortletRequest.getPortletSession(false);
+ if (session != null) {
+ session.invalidate();
+ }
+
+ }
@Override
public Map<String, Object> getRequestMap()
@@ -906,6 +1005,34 @@
{
return mPortletRequest.getLocale();
}
+
+
+ /**
+ * @see javax.faces.context.ExternalContext#getRequestScheme()
+ */
+ @Override
+ public String getRequestScheme()
+ {
+ return mPortletRequest.getScheme();
+ }
+
+ /**
+ * @see javax.faces.context.ExternalContext#getRequestServerName()
+ */
+ @Override
+ public String getRequestServerName()
+ {
+ return mPortletRequest.getServerName();
+ }
+
+ /**
+ * @see javax.faces.context.ExternalContext#getRequestServerPort()
+ */
+ @Override
+ public int getRequestServerPort()
+ {
+ return mPortletRequest.getServerPort();
+ }
@Override
public String getRequestPathInfo()
@@ -940,6 +1067,22 @@
}
return mInitParameterMap;
}
+
+ /**
+ * @see ExternalContext#getMimeType(String)
+ */
+ @Override
+ public String getMimeType(String file) {
+ return mPortletContext.getMimeType(file);
+ }
+
+ /**
+ * @see ExternalContext#getRealPath(String)
+ */
+ @Override
+ public String getRealPath(String path) {
+ return mPortletContext.getRealPath(path);
+ }
@SuppressWarnings("unchecked")
public Set<String> getResourcePaths(String s)
@@ -1111,6 +1254,24 @@
// the bridge render phase -- so if we threw an exception Faces would break.
// Just do a noop instead as render isn't supposed to receive parameters
}
+
+ /**
+ * @see ExternalContext#setResponseContentType(String)
+ * @param contentType
+ */
+ @Override
+ public void setResponseContentType(String contentType)
+ {
+ if (mPortletResponse instanceof MimeResponse)
+ {
+ ((MimeResponse)mPortletResponse).setContentType(contentType);
+ }
+ else
+ {
+ throw new IllegalStateException("PortletExternalContextImpl.setResponseContentType(): Response must be a MimeResponse");
+ }
+
+ }
/**
*
@@ -1149,6 +1310,21 @@
return null;
}
}
+
+ /**
+ * @see javax.faces.context.ExternalContext#getRequestContentLength()
+ */
+ @Override
+ public int getRequestContentLength() {
+ if (mPortletRequest instanceof ClientDataRequest)
+ {
+ return (((ClientDataRequest)mPortletRequest).getContentLength());
+ }
+ else
+ {
+ throw new IllegalStateException("PortletExternalContextImpl.getRequestContentLength(): Request must be a ClientDataRequest");
+ }
+ }
/**
*
@@ -1258,6 +1434,23 @@
return ((MimeResponse) mPortletResponse).getContentType();
}
+
+ /**
+ * @see javax.faces.context.ExternalContext#getResponseOutputStream()
+ */
+ @Override
+ public OutputStream getResponseOutputStream() throws IOException
+ {
+ if (mPortletResponse instanceof MimeResponse)
+ {
+ return ((MimeResponse)mPortletResponse).getPortletOutputStream();
+ }
+ else
+ {
+ throw new IllegalStateException("PortletExternalContextImpl.getResponseOutputStream(): Response must be a MimeResponse");
+ }
+
+ }
/**
* <p>
Modified: myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletFacesContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletFacesContextImpl.java?rev=732799&r1=732798&r2=732799&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletFacesContextImpl.java (original)
+++ myfaces/portlet-bridge/core/branches/mfreedman_jsf2.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletFacesContextImpl.java Thu Jan 8 11:24:50 2009
@@ -19,12 +19,20 @@
package org.apache.myfaces.portlet.faces.context;
+import com.sun.faces.context.PartialViewContextImpl;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+import com.sun.faces.util.RequestStateManager;
+
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
+
import javax.el.ELContext;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
@@ -34,14 +42,20 @@
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
import javax.faces.application.FacesMessage;
+import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
+import javax.faces.context.PartialViewContext;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
+import javax.faces.event.PhaseId;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
+import javax.faces.render.ResponseStateManager;
+
import javax.portlet.PortletResponse;
import javax.portlet.faces.Bridge;
import javax.portlet.faces.annotation.PortletNamingContainer;
@@ -53,6 +67,9 @@
*/
public class PortletFacesContextImpl extends FacesContext
{
+ private static final String POST_BACK_MARKER =
+ PortletFacesContextImpl.class.getName() + "_POST_BACK";
+
private Application mApplication;
private RenderKitFactory mRenderKitFactory;
private ExternalContext mExternalContext;
@@ -63,7 +80,18 @@
private boolean mResponseComplete = false;
private FacesMessage.Severity mMaximumSeverity = FacesMessage.SEVERITY_INFO;
private ELContext mElContext = null;
+ private PhaseId mCurrentPhaseId = null;
private LinkedHashMap<String, List<FacesMessage>> mMessages = new LinkedHashMap<String, List<FacesMessage>>();
+ private HashMap<Object,Object> mAttributes = null;
+ private ExceptionHandler mExceptionHandler = null;
+ private PartialViewContext mPartialViewContext = null;
+
+ /**
+ * Store mapping of clientId to ArrayList of FacesMessage instances. The
+ * null key is used to represent FacesMessage instances that are not
+ * associated with a clientId instance.
+ */
+ private Map<String, List<FacesMessage>> mComponentMessageLists;
public PortletFacesContextImpl(ExternalContext externalContext, Lifecycle lifecycle)
throws FacesException
@@ -77,6 +105,103 @@
FacesContext.setCurrentInstance(this);
}
+
+ // Start JSF 2.0 API
+ @Override
+ public PhaseId getCurrentPhaseId()
+ {
+
+ return mCurrentPhaseId;
+
+ }
+
+ @Override
+ public void setCurrentPhaseId(PhaseId currentPhaseId)
+ {
+
+ this.mCurrentPhaseId = currentPhaseId;
+
+ }
+
+ @Override
+ public Map<Object,Object> getAttributes()
+ {
+
+ if (mAttributes == null) {
+ mAttributes = new HashMap<Object,Object>();
+ }
+ return mAttributes;
+
+ }
+
+
+ /**
+ * @see javax.faces.context.FacesContext#getExceptionHandler()
+ */
+ @Override
+ public ExceptionHandler getExceptionHandler()
+ {
+ return mExceptionHandler;
+ }
+
+
+ /**
+ * @see javax.faces.context.FacesContext#setExceptionHandler(javax.faces.context.ExceptionHandler)
+ */
+ @Override
+ public void setExceptionHandler(ExceptionHandler exceptionHandler)
+ {
+ mExceptionHandler = exceptionHandler;
+ }
+
+ /**
+ * @see javax.faces.context.FacesContext#getPartialViewContext()
+ */
+ public PartialViewContext getPartialViewContext()
+ {
+
+ if (mPartialViewContext == null) {
+ mPartialViewContext = new PartialViewContextImpl(this);
+ }
+ return mPartialViewContext;
+
+ }
+
+
+ @Override
+ public boolean isPostback()
+ {
+ Boolean postback = (Boolean) this.getAttributes().get(POST_BACK_MARKER);
+ if (postback == null) {
+ RenderKit rk = this.getRenderKit();
+ if (rk == null)
+ {
+ ViewHandler vh = this.getApplication().getViewHandler();
+ String rkId = vh.calculateRenderKitId(this);
+
+ RenderKitFactory factory = (RenderKitFactory)
+ FactoryFinder
+ .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+
+ if (factory == null) {
+ throw new IllegalStateException();
+ }
+
+ rk = factory.getRenderKit(this, rkId);
+ }
+ if (rk != null) {
+ postback = rk.getResponseStateManager().isPostback(this);
+ }
+ else
+ {
+ throw new IllegalStateException();
+ }
+
+ this.getAttributes().put(POST_BACK_MARKER, postback);
+ }
+
+ return postback.booleanValue();
+ }
// Start of JSF 1.2 API
@@ -162,6 +287,47 @@
{
return mMaximumSeverity;
}
+
+ /**
+ * @see javax.faces.context.FacesContext#getMessageList()
+ */
+ @Override
+ public List<FacesMessage> getMessageList()
+ {
+
+ if (null == mComponentMessageLists) {
+ return Collections
+ .unmodifiableList(Collections.<FacesMessage>emptyList());
+ } else {
+ List<FacesMessage> messages = new ArrayList<FacesMessage>();
+ for (List<FacesMessage> list : mComponentMessageLists.values()) {
+ messages.addAll(list);
+ }
+ return Collections.unmodifiableList(messages);
+ }
+
+ }
+
+
+ /**
+ * @see javax.faces.context.FacesContext#getMessageList(String)
+ */
+ @Override
+ public List<FacesMessage> getMessageList(String clientId) {
+
+ if (null == mComponentMessageLists) {
+ return Collections
+ .unmodifiableList(Collections.<FacesMessage>emptyList());
+ } else {
+ List<FacesMessage> list = mComponentMessageLists.get(clientId);
+ return Collections.unmodifiableList((list != null)
+ ? list
+ : Collections.<FacesMessage>emptyList());
+ }
+
+ }
+
+
@Override
public Iterator<FacesMessage> getMessages()
@@ -332,10 +498,15 @@
}
mApplication = null;
+ mRenderKitFactory = null;
mResponseStream = null;
mResponseWriter = null;
+ mComponentMessageLists = null;
mViewRoot = null;
mElContext = null;
+ mMessages = null;
+ mAttributes = null;
+ mExceptionHandler = null;
FacesContext.setCurrentInstance(null);
}
@@ -350,4 +521,5 @@
{
mResponseComplete = true;
}
+
}