You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by so...@apache.org on 2009/12/10 00:58:56 UTC
svn commit: r889023 - in
/myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main:
java/org/apache/myfaces/portlet/faces/context/ resources/META-INF/services/
Author: sobryan
Date: Wed Dec 9 23:58:55 2009
New Revision: 889023
URL: http://svn.apache.org/viewvc?rev=889023&view=rev
Log:
Bug fix with ExternalContextFactory
Added:
myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextFactoryImpl.java
Removed:
myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/FacesExternalContextFactoryImpl.java
Modified:
myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/resources/META-INF/services/javax.faces.context.ExternalContextFactory
Added: myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextFactoryImpl.java?rev=889023&view=auto
==============================================================================
--- myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextFactoryImpl.java (added)
+++ myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextFactoryImpl.java Wed Dec 9 23:58:55 2009
@@ -0,0 +1,128 @@
+package org.apache.myfaces.portlet.faces.context;
+
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.ExternalContextFactory;
+
+import javax.faces.context.FacesContext;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletResponse;
+import javax.portlet.faces.Bridge;
+
+import javax.servlet.ServletRequest;
+
+public class PortletExternalContextFactoryImpl
+ extends ExternalContextFactory
+{
+ private ExternalContextFactory mWrapped;
+
+ public PortletExternalContextFactoryImpl(ExternalContextFactory factory)
+ {
+ mWrapped = factory;
+ }
+
+ public ExternalContext getExternalContext(Object context, Object request,
+ Object response)
+ throws FacesException
+ {
+ // if in portlet environment -- do a portlet container neutral test
+ // first in case we are packaged in a web app that isn't deployed
+ // on a portlet container/as a portlet. Note: can't use the BridgeUtil
+ // method as that call requires the facesContext to exist.
+ if (isPortletRequest(request))
+ {
+ // As its possible an in-protocol resource needs to access the FacesContext
+ // hence we could be passed the servlet objects in a portlet request
+ // try converting back to the portlet objects
+ Object pTemp = null;
+ PortletRequest pRequest = null;
+ ServletRequest sRequest = null;
+
+ if (request instanceof PortletRequest)
+ pRequest = (PortletRequest) request;
+ else if (request instanceof ServletRequest)
+ sRequest = (ServletRequest) request;
+
+ if (!(context instanceof PortletContext))
+ {
+ if (pRequest != null)
+ {
+ pTemp = pRequest.getAttribute("javax.portlet.config");
+ }
+ else if (sRequest != null)
+ {
+ pTemp = sRequest.getAttribute("javax.portlet.config");
+ }
+
+ if (pTemp != null) context = ((PortletConfig) pTemp).getPortletContext();
+ }
+ if (!(response instanceof PortletResponse))
+ {
+ if (pRequest != null)
+ {
+ pTemp = pRequest.getAttribute("javax.portlet.response");
+ }
+ else if (sRequest != null)
+ {
+ pTemp = sRequest.getAttribute("javax.portlet.response");
+ }
+
+ if (pTemp != null) response = pTemp;
+ }
+ if (!(request instanceof PortletRequest))
+ {
+ if (sRequest != null)
+ {
+ pTemp = sRequest.getAttribute("javax.portlet.request");
+ }
+
+ if (pTemp != null) request = pTemp;
+ }
+
+ // make sure they passed the right objects
+ if (context instanceof PortletContext && request instanceof PortletRequest
+ && response instanceof PortletResponse)
+ {
+ return new PortletExternalContextImpl((PortletContext) context, (PortletRequest) request, (PortletResponse) response);
+ }
+ else
+ {
+ throw new FacesException("getExternalContext failed: Running in a portlet request but not passed portlet objects");
+ }
+ }
+ else
+ {
+ // otherwise, delegate
+ return getWrapped().getExternalContext(context, request, response);
+ }
+ }
+
+ @Override
+ public ExternalContextFactory getWrapped()
+ {
+ return mWrapped;
+ }
+
+ private boolean isPortletRequest(Object request)
+ {
+ // could be either a servlet or portlet request object (or both)
+ // Check servlet side first in case we are packaged in an application
+ // that is running as a servlet in an environment that doesn't contain
+ // a portlet container.
+ if (request instanceof ServletRequest)
+ {
+ ServletRequest sr = (ServletRequest) request;
+ Bridge.PortletPhase phase = (Bridge.PortletPhase) sr.getAttribute(Bridge.PORTLET_LIFECYCLE_PHASE);
+ return (phase != null);
+ }
+ else if (request instanceof PortletRequest)
+ {
+ return true;
+ }
+
+ return false;
+ }
+}
Modified: myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/resources/META-INF/services/javax.faces.context.ExternalContextFactory
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/resources/META-INF/services/javax.faces.context.ExternalContextFactory?rev=889023&r1=889022&r2=889023&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/resources/META-INF/services/javax.faces.context.ExternalContextFactory (original)
+++ myfaces/portlet-bridge/core/branches/sobryan_portlet-bridge-3.0.0/impl/src/main/resources/META-INF/services/javax.faces.context.ExternalContextFactory Wed Dec 9 23:58:55 2009
@@ -1 +1 @@
-org.apache.myfaces.portlet.faces.context.FacesExternalContextFactory
+org.apache.myfaces.portlet.faces.context.PortletExternalContextFactoryImpl