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;
   }
+  
 }