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 2010/11/30 16:52:14 UTC

svn commit: r1040590 - in /myfaces/extensions/cdi/trunk/jee-modules: jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/ jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ jsf-module/im...

Author: gpetracek
Date: Tue Nov 30 15:52:13 2010
New Revision: 1040590

URL: http://svn.apache.org/viewvc?rev=1040590&view=rev
Log:
EXTCDI-76 and first draft for EXTCDI-82

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java Tue Nov 30 15:52:13 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.myfaces.extensions.cdi.jsf.api.config.view;
 
+//import org.apache.myfaces.extensions.cdi.core.api.config.view.ViewConfig;
+
 import javax.enterprise.inject.Stereotype;
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
@@ -49,6 +51,11 @@ public @interface Page
     //TODO config for default navigation mode
     NavigationMode navigation() default NavigationMode.DEFAULT;
 
+    ViewParameter viewParams() default ViewParameter.DEFAULT;
+
+    //TODO
+    //Class<? extends ViewConfig> sharedViewConfig() default ViewConfig.class;
+
     public interface Extension
     {
         String XHTML = "xhtml";
@@ -61,4 +68,9 @@ public @interface Page
     {
         DEFAULT, FORWARD, REDIRECT
     }
+
+    public enum ViewParameter
+    {
+        DEFAULT, INCLUDE, EXCLUDE
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java Tue Nov 30 15:52:13 2010
@@ -23,6 +23,9 @@ import org.apache.myfaces.extensions.cdi
 import static org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCacheStore.*;
 import static org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCacheStore.setDefaultErrorView;
 
+import java.util.Map;
+import java.util.Collection;
+
 /**
  * TODO move exceptions to util class
  *
@@ -76,6 +79,13 @@ public class ViewConfigCache
         return getViewIdToViewDefinitionEntryMapping().get(viewId);
     }
 
+    public static Collection<ViewConfigEntry> getViewConfigEntries()
+    {
+        Map<String, ViewConfigEntry> entryMap = getViewIdToViewDefinitionEntryMapping();
+
+        return entryMap.values();
+    }
+
     public static ViewConfigEntry getViewDefinition(Class<? extends ViewConfig> viewDefinitionClass)
     {
         return getViewDefinitionToViewDefinitionEntryMapping().get(viewDefinitionClass);

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java Tue Nov 30 15:52:13 2010
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.provider.BeanManagerProvider;
 import static org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils.getOrCreateScopedInstanceOfBeanByName;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.ViewParameter;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.PageBean;
 
 import javax.inject.Named;
@@ -50,6 +51,7 @@ public class ViewConfigEntry
     private final Class<? extends AccessDecisionVoter>[] accessDecisionVoters;
     private final Class<? extends ViewConfig> customErrorView;
 
+    private ViewParameter viewParameter;
     //meta-data
     private List<Annotation> metaDataList;
 
@@ -60,6 +62,7 @@ public class ViewConfigEntry
     public ViewConfigEntry(String viewId,
                            Class<? extends ViewConfig> viewDefinitionClass,
                            NavigationMode navigationMode,
+                           ViewParameter viewParameter,
                            List<Class<? extends AccessDecisionVoter>> accessDecisionVoters,
                            Class<? extends ViewConfig> errorView,
                            List<Annotation> metaDataList)
@@ -67,6 +70,7 @@ public class ViewConfigEntry
         this.viewId = viewId;
         this.viewDefinitionClass = viewDefinitionClass;
         this.navigationMode = navigationMode;
+        this.viewParameter = viewParameter;
 
         this.metaDataList = metaDataList;
 
@@ -101,6 +105,11 @@ public class ViewConfigEntry
         return navigationMode;
     }
 
+    public ViewParameter getViewParameter()
+    {
+        return viewParameter;
+    }
+
     List<PageBeanConfigEntry> getPageBeanDefinitions()
     {
         return beanDefinition;

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java Tue Nov 30 15:52:13 2010
@@ -28,6 +28,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.ViewParameter;
 import org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.ViewControllerInterceptor;
 
 import javax.enterprise.event.Observes;
@@ -174,6 +175,9 @@ public class ViewConfigExtension impleme
         NavigationMode defaultNavigationMode = NavigationMode.DEFAULT;
         NavigationMode navigationMode = null;
 
+        ViewParameter defaultViewParameter = ViewParameter.DEFAULT;
+        ViewParameter viewParameter = null;
+
         //security
         List<Class<? extends AccessDecisionVoter>> foundVoters = new ArrayList<Class<? extends AccessDecisionVoter>>();
         Class<? extends ViewConfig> errorView = null;
@@ -232,6 +236,11 @@ public class ViewConfigExtension impleme
                     navigationMode = pageAnnotation.navigation();
                 }
 
+                if(viewParameter == null && !pageAnnotation.viewParams().equals(defaultViewParameter))
+                {
+                    viewParameter = pageAnnotation.viewParams();
+                }
+
                 if(!pageAnnotation.name().equals(defaultPageName))
                 {
                     pageName = pageAnnotation.name();
@@ -245,7 +254,12 @@ public class ViewConfigExtension impleme
         {
             navigationMode = defaultNavigationMode;
         }
-        
+
+        if(viewParameter == null)
+        {
+            viewParameter = defaultViewParameter;
+        }
+
         StringBuilder viewId = new StringBuilder(basePath);
         if(pageName.equals(""))
         {
@@ -305,7 +319,7 @@ public class ViewConfigExtension impleme
         result = ensureValidViewIds(result);
 
         return new ViewConfigEntry(
-                result, viewDefinitionClass, navigationMode, foundVoters, errorView, viewMetaDataList);
+                result, viewDefinitionClass, navigationMode, viewParameter, foundVoters, errorView, viewMetaDataList);
     }
 
     private String ensureValidViewIds(String result)

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -38,7 +38,7 @@ public class CodiNavigationHandler exten
         if(isActivated())
         {
             ViewConfigAwareNavigationHandler viewConfigAwareNavigationHandler =
-                    new ViewConfigAwareNavigationHandler(navigationHandler);
+                    new ViewConfigAwareNavigationHandler(navigationHandler, false);
 
             this.wrapped = new AccessScopeAwareNavigationHandler(viewConfigAwareNavigationHandler);
         }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -25,9 +25,11 @@ import org.apache.myfaces.extensions.cdi
 import static org.apache.myfaces.extensions.cdi.core.impl.util.SecurityUtils.invokeVoters;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
 import org.apache.myfaces.extensions.cdi.jsf.api.config.view.PreViewConfigNavigateEvent;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
 import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCache;
 import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigEntry;
 import static org.apache.myfaces.extensions.cdi.jsf.impl.util.SecurityUtils.tryToHandleSecurityViolation;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.JsfUtils;
 
 import javax.faces.FacesException;
 import javax.faces.application.NavigationHandler;
@@ -37,6 +39,7 @@ import javax.faces.context.ExternalConte
 import javax.faces.context.FacesContext;
 import javax.enterprise.inject.spi.BeanManager;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -51,12 +54,14 @@ public class ViewConfigAwareNavigationHa
     private Map<String, ViewConfigEntry> viewConfigs = new ConcurrentHashMap<String, ViewConfigEntry>();
 
     private NavigationHandler navigationHandler;
+    private boolean delegateCall;
 
     private BeanManager beanManager;
 
-    public ViewConfigAwareNavigationHandler(NavigationHandler navigationHandler)
+    public ViewConfigAwareNavigationHandler(NavigationHandler navigationHandler, boolean delegateCall)
     {
         this.navigationHandler = navigationHandler;
+        this.delegateCall = delegateCall;
     }
 
     @Override
@@ -111,7 +116,7 @@ public class ViewConfigAwareNavigationHa
 
                     entry = tryToUpdateEntry(entry, navigateEvent);
 
-                    if(entry != null) //entry might be null after the update
+                    if(entry != null && !this.delegateCall) //entry might be null after the update
                     {
                         processViewDefinitionEntry(facesContext, entry);
 
@@ -119,6 +124,10 @@ public class ViewConfigAwareNavigationHa
                         this.navigationHandler.handleNavigation(facesContext, null, null);
                         return;
                     }
+                    else if(entry != null)
+                    {
+                        outcome = convertEntryToOutcome(facesContext.getExternalContext(), entry);
+                    }
                 }
             }
         }
@@ -126,6 +135,42 @@ public class ViewConfigAwareNavigationHa
         this.navigationHandler.handleNavigation(facesContext, fromAction, outcome);
     }
 
+    private String convertEntryToOutcome(ExternalContext externalContext, ViewConfigEntry entry)
+    {
+        boolean performRedirect = Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode());
+        boolean includeViewParameters = Page.ViewParameter.INCLUDE.equals(entry.getViewParameter());
+
+        StringBuilder result = new StringBuilder(entry.getViewId());
+
+        if(performRedirect)
+        {
+            result.append("?faces-redirect=true");
+        }
+        if(includeViewParameters)
+        {
+            if(performRedirect)
+            {
+                result.append("&");
+            }
+            else
+            {
+                result.append("?");
+            }
+            result.append("includeViewParams=true");
+
+            try
+            {
+                return JsfUtils.addRequestParameter(externalContext, result.toString());
+            }
+            catch (UnsupportedEncodingException e)
+            {
+                throw new RuntimeException(e);
+            }
+        }
+
+        return result.toString();
+    }
+
     private ViewConfigEntry tryToUpdateEntry(ViewConfigEntry viewConfigEntry, PreViewConfigNavigateEvent navigateEvent)
     {
         if(navigateEvent == null)

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java Tue Nov 30 15:52:13 2010
@@ -28,8 +28,6 @@ import javax.faces.context.ExternalConte
 import javax.faces.context.FacesContext;
 import javax.inject.Inject;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
@@ -82,7 +80,7 @@ public class DefaultWindowHandler implem
 
         if(addRequestParameter)
         {
-            url = addRequestParameter(externalContext, url);
+            url = JsfUtils.addRequestParameter(externalContext, url);
         }
 
         // call encodeActionURL() after all parameters have been added
@@ -91,27 +89,6 @@ public class DefaultWindowHandler implem
         externalContext.redirect(url);
     }
 
-    protected String addRequestParameter(ExternalContext externalContext, String url)
-            throws UnsupportedEncodingException
-    {
-        StringBuilder finalUrl = new StringBuilder(url);
-
-        Map<String, String> requestParms = externalContext.getRequestParameterMap();
-        for(Map.Entry<String, String> requestParam : requestParms.entrySet())
-        {
-            String key = requestParam.getKey();
-
-            if(!url.contains(key + "="))
-            {
-                finalUrl.append("&");
-                finalUrl.append(key);
-                finalUrl.append("=");
-                finalUrl.append(JsfUtils.encodeURLParameterValue(requestParam.getValue(), externalContext));
-            }
-        }
-        return finalUrl.toString();
-    }
-
     //TODO add a counter in case of project stage dev
     public String createWindowId()
     {

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java Tue Nov 30 15:52:13 2010
@@ -32,6 +32,7 @@ import java.net.URLEncoder;
 import java.util.Iterator;
 import java.util.ResourceBundle;
 import java.util.Locale;
+import java.util.Map;
 
 /**
  * keep in sync with extval!
@@ -124,4 +125,38 @@ public class JsfUtils
         }
     }
 
+    public static String addRequestParameter(ExternalContext externalContext, String url)
+            throws UnsupportedEncodingException
+    {
+        StringBuilder finalUrl = new StringBuilder(url);
+        boolean existingParameters = url.contains("?");
+
+        Map<String, String> requestParms = externalContext.getRequestParameterMap();
+        for(Map.Entry<String, String> requestParam : requestParms.entrySet())
+        {
+            String key = requestParam.getKey();
+
+            if("javax.faces.ViewState".equals(key))
+            {
+                continue;
+            }
+            
+            if(!url.contains(key + "="))
+            {
+                if(!existingParameters)
+                {
+                    finalUrl.append("?");
+                    existingParameters = true;
+                }
+                else
+                {
+                    finalUrl.append("&");
+                }
+                finalUrl.append(key);
+                finalUrl.append("=");
+                finalUrl.append(JsfUtils.encodeURLParameterValue(requestParam.getValue(), externalContext));
+            }
+        }
+        return finalUrl.toString();
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.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/navigation/CodiNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -19,6 +19,9 @@
 package org.apache.myfaces.extensions.cdi.jsf2.impl.navigation;
 
 import org.apache.myfaces.extensions.cdi.jsf.impl.navigation.ViewConfigAwareNavigationHandler;
+import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCache;
+import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigEntry;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
 import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
 import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
 
@@ -29,6 +32,8 @@ import javax.faces.context.FacesContext;
 import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Collection;
+import java.util.HashSet;
 
 /**
  * We have to ensure the invocation order for the type-safe navigation feature/s.
@@ -39,7 +44,7 @@ public class CodiNavigationHandler exten
 {
     private final NavigationHandler wrapped;
     private final boolean deactivated;
-    private Map<String, Set<NavigationCase>> navigationCases;
+    private final boolean addViewConfigsAsNavigationCase = false; //TODO add config
 
     public CodiNavigationHandler(NavigationHandler navigationHandler)
     {
@@ -63,7 +68,7 @@ public class CodiNavigationHandler exten
     private NavigationHandler getWrappedNavigationHandler()
     {
         ViewConfigAwareNavigationHandler viewConfigAwareNavigationHandler =
-                new ViewConfigAwareNavigationHandler(this.wrapped);
+                new ViewConfigAwareNavigationHandler(this.wrapped, true);
 
         return new AccessScopeAwareNavigationHandler(viewConfigAwareNavigationHandler);
     }
@@ -80,17 +85,38 @@ public class CodiNavigationHandler exten
 
     public Map<String, Set<NavigationCase>> getNavigationCases()
     {
+        Map<String, Set<NavigationCase>> result = new HashMap<String, Set<NavigationCase>>();
+
         if (this.wrapped instanceof ConfigurableNavigationHandler)
         {
-            return ((ConfigurableNavigationHandler) this.wrapped).getNavigationCases();
+            result.putAll(((ConfigurableNavigationHandler) this.wrapped).getNavigationCases());
+        }
+
+        if(!this.addViewConfigsAsNavigationCase || this.deactivated)
+        {
+            return result;
         }
 
-        //workaround for mojarra
-        if(this.navigationCases == null)
+        Collection<ViewConfigEntry> viewConfigEntries = ViewConfigCache.getViewConfigEntries();
+
+        if(!viewConfigEntries.isEmpty())
         {
-            this.navigationCases = new HashMap<String, Set<NavigationCase>>();
+            Set<NavigationCase> navigationCase = new HashSet<NavigationCase>();
+            for(ViewConfigEntry entry : viewConfigEntries)
+            {
+                navigationCase.add(new NavigationCase("*",
+                                                      null,
+                                                      null,
+                                                      null,
+                                                      entry.getViewId(),
+                                                      null,
+                                                      Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
+                                                      Page.ViewParameter.INCLUDE.equals(entry.getViewParameter())));
+
+                result.put(entry.getViewId(), navigationCase);
+            }
         }
-        return this.navigationCases;
+        return result;
     }
 
     public boolean isActivated()

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.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/scope/conversation/ServerSideWindowHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java Tue Nov 30 15:52:13 2010
@@ -23,6 +23,7 @@ import org.apache.myfaces.extensions.cdi
 import static org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager
         .WINDOW_CONTEXT_ID_PARAMETER_KEY;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.DefaultWindowHandler;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.JsfUtils;
 
 import javax.enterprise.inject.Alternative;
 import javax.faces.context.ExternalContext;
@@ -73,7 +74,7 @@ public abstract class ServerSideWindowHa
 
         if(addRequestParameter)
         {
-            url = addRequestParameter(externalContext, url);
+            url = JsfUtils.addRequestParameter(externalContext, url);
         }
 
         externalContext.redirect(url);