You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/04/17 00:26:34 UTC

svn commit: r1094071 - in /myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl: component/ listener/request/ security/

Author: gpetracek
Date: Sat Apr 16 22:26:33 2011
New Revision: 1094071

URL: http://svn.apache.org/viewvc?rev=1094071&view=rev
Log:
EXTCDI-167 workaround for PreDestroyViewMapEvent which would be caused by the security check

Removed:
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/component/
Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java?rev=1094071&r1=1094070&r2=1094071&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java Sat Apr 16 22:26:33 2011
@@ -18,19 +18,14 @@
  */
 package org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request;
 
-import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.DefaultTemporaryUIViewRoot;
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.spi.TemporaryUIViewRoot;
 
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
+import org.apache.myfaces.extensions.cdi.jsf2.impl.security.SecurityAwareViewHandler;
+
 import javax.faces.application.Application;
 import javax.faces.application.ApplicationWrapper;
-import javax.faces.application.Resource;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
+import javax.faces.event.PreDestroyViewMapEvent;
+import javax.faces.event.SystemEvent;
 
 //needed due to EXTCDI-167
 /**
@@ -53,91 +48,22 @@ class TemporaryViewRootAwareApplicationW
         return this.wrapped;
     }
 
-    protected UIComponent tryToWrapUIViewRoot(UIComponent uiComponent)
-    {
-        if(uiComponent instanceof UIViewRoot)
-        {
-            if(!uiComponent.getClass().getName().equals(UIViewRoot.class.getName()))
-            {
-                return getCustomizedUIViewRoot(uiComponent);
-            }
-            return new DefaultTemporaryUIViewRoot();
-        }
-        return uiComponent;
-    }
-
-    private UIComponent getCustomizedUIViewRoot(UIComponent uiComponent)
-    {
-        TemporaryUIViewRoot temporaryComponent = CodiUtils.lookupFromEnvironment(TemporaryUIViewRoot.class);
-
-        if(temporaryComponent instanceof UIComponent)
-        {
-            return (UIComponent)temporaryComponent;
-        }
-        return uiComponent;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context,
-                                       Resource componentResource)
-    {
-        return tryToWrapUIViewRoot(super.createComponent(context, componentResource));
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context,
-                                       String componentType,
-                                       String rendererType)
-    {
-        return tryToWrapUIViewRoot(super.createComponent(context, componentType, rendererType));
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public UIComponent createComponent(String componentType) throws FacesException
-    {
-        return tryToWrapUIViewRoot(super.createComponent(componentType));
-    }
-
     /**
      * {@inheritDoc}
      */
     @Override
-    public UIComponent createComponent(ValueBinding componentBinding,
-                                       FacesContext context,
-                                       String componentType) throws FacesException
+    public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass, Object source)
     {
-        return tryToWrapUIViewRoot(super.createComponent(componentBinding, context, componentType));
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType,
-                                       String rendererType)
-    {
-        return tryToWrapUIViewRoot(super.createComponent(componentExpression, context, componentType, rendererType));
+        if(!PreDestroyViewMapEvent.class.isAssignableFrom(systemEventClass) ||
+                isPreDestroyViewMapEventAllowed(facesContext))
+        {
+            super.publishEvent(facesContext, systemEventClass, source);
+        }
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext contexte,
-                                       String componentType) throws FacesException
+    private boolean isPreDestroyViewMapEventAllowed(FacesContext facesContext)
     {
-        return tryToWrapUIViewRoot(super.createComponent(componentExpression, contexte, componentType));
+        return !Boolean.TRUE.equals(
+                facesContext.getExternalContext().getRequestMap().get(SecurityAwareViewHandler.class.getName()));
     }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java?rev=1094071&r1=1094070&r2=1094071&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java Sat Apr 16 22:26:33 2011
@@ -18,8 +18,6 @@
  */
 package org.apache.myfaces.extensions.cdi.jsf2.impl.security;
 
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.spi.TemporaryUIViewRoot;
-
 import javax.faces.application.ViewHandler;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
@@ -46,9 +44,9 @@ public class SecurityAwareViewHandler
      * see EXTCDI-167
      */
     @Override
-    public UIViewRoot createView(FacesContext context, String viewId)
+    public UIViewRoot createView(FacesContext facesContext, String viewId)
     {
-        UIViewRoot originalViewRoot = context.getViewRoot();
+        UIViewRoot originalViewRoot = facesContext.getViewRoot();
         UIViewRoot newViewRoot;
 
         Map<String, Object> viewMap = null;
@@ -63,18 +61,12 @@ public class SecurityAwareViewHandler
             }
         }
 
-        if(originalViewRoot instanceof TemporaryUIViewRoot)
-        {
-            //workaround for PreDestroyViewMapEvent which would be caused by the security check
-            ((TemporaryUIViewRoot)originalViewRoot).setTemporaryMode(true);
-        }
+        //workaround for PreDestroyViewMapEvent which would be caused by the security check
+        deactivatePreDestroyViewMapEvent(facesContext);
 
-        newViewRoot = super.createView(context, viewId);
+        newViewRoot = super.createView(facesContext, viewId);
 
-        if(originalViewRoot instanceof TemporaryUIViewRoot)
-        {
-            ((TemporaryUIViewRoot)originalViewRoot).setTemporaryMode(false);
-        }
+        activatePreDestroyViewMapEvent(facesContext);
 
         if(viewMap != null)
         {
@@ -82,4 +74,14 @@ public class SecurityAwareViewHandler
         }
         return newViewRoot;
     }
+
+    private void deactivatePreDestroyViewMapEvent(FacesContext facesContext)
+    {
+        facesContext.getExternalContext().getRequestMap().put(SecurityAwareViewHandler.class.getName(), Boolean.TRUE);
+    }
+
+    private void activatePreDestroyViewMapEvent(FacesContext facesContext)
+    {
+        facesContext.getExternalContext().getRequestMap().put(SecurityAwareViewHandler.class.getName(), Boolean.FALSE);
+    }
 }