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/07/15 01:01:36 UTC

svn commit: r964247 - in /myfaces/extensions/cdi/trunk: jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/ jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/j...

Author: gpetracek
Date: Wed Jul 14 23:01:35 2010
New Revision: 964247

URL: http://svn.apache.org/viewvc?rev=964247&view=rev
Log:
EXTCDI-1, EXTCDI-2 and EXTCDI-3 refactored redirects

Added:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/UuidEntry.java
Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/BeanStorage.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultCompositeMessageHandler.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java Wed Jul 14 23:01:35 2010
@@ -19,19 +19,17 @@
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
 
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request.CodiFacesContextFactory.wrapFacesContext;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsOldViewId;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsNewViewId;
 
 import javax.faces.application.NavigationHandler;
 import javax.faces.context.FacesContext;
-import java.util.Map;
 
 /**
  * @author Gerhard Petracek
  */
 public class AccessScopeAwareNavigationHandler extends NavigationHandler
 {
-    public static final String OLD_VIEW_ID_KEY = "oldViewId";
-    public static final String NEW_VIEW_ID_KEY = "newViewId";
-
     private NavigationHandler navigationHandler;
 
     public AccessScopeAwareNavigationHandler(NavigationHandler navigationHandler)
@@ -43,16 +41,11 @@ public class AccessScopeAwareNavigationH
     {
         //TODO check myfaces core - issue? facesContext is not wrapped here
         facesContext = wrapFacesContext(facesContext);
-        String oldViewId = facesContext.getViewRoot().getViewId();
 
-        Map requestMap = facesContext.getExternalContext().getRequestMap();
-        requestMap.put(OLD_VIEW_ID_KEY, oldViewId); //don't change the order
+        storeCurrentViewIdAsOldViewId(facesContext); //don't change the order
 
         this.navigationHandler.handleNavigation(facesContext, s, s1);
 
-        String newViewId = facesContext.getViewRoot().getViewId();
-
-
-        requestMap.put(NEW_VIEW_ID_KEY, newViewId);
+        storeCurrentViewIdAsNewViewId(facesContext);
     }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/BeanStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/BeanStorage.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/BeanStorage.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/BeanStorage.java Wed Jul 14 23:01:35 2010
@@ -37,7 +37,7 @@ class BeanStorage implements Serializabl
 
     private transient BeanManager beanManager;
 
-    private final Map<Class, BeanEntry<Serializable>> beanMap = new ConcurrentHashMap<Class, BeanEntry<Serializable>>();
+    private Map<Class, BeanEntry<Serializable>> beanMap = new ConcurrentHashMap<Class, BeanEntry<Serializable>>();
 
     public BeanEntry getBean(Class beanClass)
     {

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java Wed Jul 14 23:01:35 2010
@@ -23,11 +23,12 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.getOldViewIdFromRequest;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.getNewViewIdFromRequest;
 
 import javax.faces.context.FacesContext;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.Map;
 
 /**
  * @author Gerhard Petracek
@@ -138,20 +139,25 @@ public class DefaultConversation impleme
 
         if (this.lastViewId != null)
         {
-            Map requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
-            String fromViewId = (String) requestMap.get(AccessScopeAwareNavigationHandler.OLD_VIEW_ID_KEY);
-
-            if (fromViewId != null && fromViewId.endsWith(this.lastViewId))
-            {
-                this.lastViewId = (String) requestMap.get(AccessScopeAwareNavigationHandler.NEW_VIEW_ID_KEY);
-            }
-            return !this.lastViewId.equals(getCurrentViewId());
+            return isInvalidConversationForCurrentView();
         }
 
         return this.lastAccess == null ||
                 (this.lastAccess.getTime() + this.conversationTimeoutInMs) < System.currentTimeMillis();
     }
 
+    private boolean isInvalidConversationForCurrentView()
+    {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        String fromViewId = getOldViewIdFromRequest(facesContext);
+
+        if (fromViewId != null && fromViewId.endsWith(this.lastViewId))
+        {
+            this.lastViewId = getNewViewIdFromRequest(facesContext);
+        }
+        return !this.lastViewId.equals(getCurrentViewId());
+    }
+
     private void touchConversation(boolean updateViewId)
     {
         this.active = true;

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java Wed Jul 14 23:01:35 2010
@@ -29,6 +29,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.api.request.RequestTypeResolver;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.resolveWindowContextId;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.restoreInformationOfRequest;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.DeactivationAwareWindowContext;
 
 import javax.annotation.PostConstruct;
@@ -102,18 +103,7 @@ public class DefaultWindowContextManager
         //restore view-id in case of a get request - we need it esp. for redirects
         if (!requestTypeResolver.isPostRequest())
         {
-            phaseEvent.getFacesContext().getExternalContext().getRequestMap()
-                    .put(AccessScopeAwareNavigationHandler.NEW_VIEW_ID_KEY,
-                            phaseEvent.getFacesContext().getViewRoot().getViewId());
-
-            String oldViewId = phaseEvent.getFacesContext().getExternalContext().getRequestParameterMap()
-                    .get(AccessScopeAwareNavigationHandler.OLD_VIEW_ID_KEY);
-
-            if (oldViewId != null)
-            {
-                phaseEvent.getFacesContext().getExternalContext().getRequestMap()
-                        .put(AccessScopeAwareNavigationHandler.OLD_VIEW_ID_KEY, oldViewId);
-            }
+            restoreInformationOfRequest(phaseEvent.getFacesContext());
         }
     }
 

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java Wed Jul 14 23:01:35 2010
@@ -46,7 +46,7 @@ public class JsfWindowContext implements
 
     private final WindowContextConfig config;
 
-    private final Map<ConversationKey, Conversation> groupedConversations
+    private Map<ConversationKey, Conversation> groupedConversations
             = new ConcurrentHashMap<ConversationKey, Conversation>();
 
     public JsfWindowContext(Long windowContextId, WindowContextConfig config)

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java Wed Jul 14 23:01:35 2010
@@ -18,8 +18,10 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
 
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeUuidEntry;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.getOldViewIdFromRequest;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.UUID_ID_KEY;
 
 import javax.faces.context.ExternalContext;
 import java.io.IOException;
@@ -266,9 +268,10 @@ public class RedirectedConversationAware
 
         if (windowContextId != null)
         {
-            url = url + "?" + WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY + "=" + windowContextId
-                    + "&" + AccessScopeAwareNavigationHandler.OLD_VIEW_ID_KEY + "=" +
-                    getRequestMap().get(AccessScopeAwareNavigationHandler.OLD_VIEW_ID_KEY);
+            UuidEntry uuidEntry = storeUuidEntry(
+                    getSessionMap(), windowContextId, getOldViewIdFromRequest(getRequestMap()));
+
+            url = url + "?" + UUID_ID_KEY + "=" + uuidEntry.getUuid();
             url = this.wrapped.encodeActionURL(url);
         }
 

Added: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/UuidEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/UuidEntry.java?rev=964247&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/UuidEntry.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/UuidEntry.java Wed Jul 14 23:01:35 2010
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
+
+import java.util.UUID;
+
+/**
+ * TODO
+ * @author Gerhard Petracek
+ */
+public class UuidEntry
+{
+    private final String uuid;
+    private final long windowContextId;
+    private final String viewId;
+
+    public UuidEntry(long windowContextId, String viewId)
+    {
+        this.uuid = UUID.randomUUID().toString().replace("-", "");
+        this.viewId = viewId;
+        this.windowContextId = windowContextId;
+    }
+
+    public String getUuid()
+    {
+        return uuid;
+    }
+
+    public long getWindowContextId()
+    {
+        return windowContextId;
+    }
+
+    public String getViewId()
+    {
+        return viewId;
+    }
+}

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java Wed Jul 14 23:01:35 2010
@@ -26,6 +26,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.api.qualifier.Jsf;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.WindowContextIdHolderComponent;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.UuidEntry;
 
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
@@ -34,17 +35,25 @@ import javax.faces.context.FacesContext;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
 import java.lang.annotation.Annotation;
 
 /**
+ * internal! utils
  * @author Gerhard Petracek
  */
 public class ConversationUtils
 {
+    public static final String UUID_ID_KEY = "uuid";
+
     private static final ViewAccessScoped VIEW_ACCESS_SCOPED = DefaultAnnotation.of(ViewAccessScoped.class);
 
     private static final Jsf JSF_QUALIFIER = DefaultAnnotation.of(Jsf.class);
 
+    private static final String OLD_VIEW_ID_KEY = "oldViewId";
+    private static final String NEW_VIEW_ID_KEY = "newViewId";
+
     /**
      * @return the descriptor of a custom
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
@@ -140,18 +149,33 @@ public class ConversationUtils
         return beanManager.getBeans(WindowContextManager.class);
     }
 
+    //TODO
     public static Long resolveWindowContextId(boolean requestParameterSupported)
     {
         FacesContext facesContext = FacesContext.getCurrentInstance();
 
-        Map requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, Object> requestMap = facesContext.getExternalContext().getRequestMap();
+
+        String uuidKey = requestParameterMap.get(UUID_ID_KEY);
+
+        //try to restore {@link UuidEntry}
+        if(uuidKey != null)
+        {
+            UuidEntry uuidEntry = getUuidEntryMap(facesContext.getExternalContext().getSessionMap()).remove(uuidKey);
 
+            if (uuidEntry != null)
+            {
+                restoreInformationFromUuidEntry(requestMap, uuidEntry);
+            }
+        }
+
+        //try to restore get-request parameter
         String idViaGetRequest = null;
 
         if (requestParameterSupported)
         {
-            idViaGetRequest = (String) requestParameterMap
-                    .get(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY);
+            idViaGetRequest = requestParameterMap.get(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY);
         }
 
         Long id = null;
@@ -167,11 +191,11 @@ public class ConversationUtils
             }
         }
 
+        //TODO test if we can move it to the beginning
+        //try to find id in request map
         if (id == null)
         {
-            Map requestMap = facesContext.getExternalContext().getRequestMap();
-
-            id = (Long) requestMap.get(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY);
+            id = tryToFindWindowIdInRequestMap(requestMap);
         }
 
         if (id != null)
@@ -179,6 +203,7 @@ public class ConversationUtils
             return id;
         }
 
+        //try to restore id from component
         WindowContextIdHolderComponent windowContextIdHolder = getWindowContextIdHolderComponent(facesContext);
 
         if (windowContextIdHolder != null)
@@ -189,6 +214,95 @@ public class ConversationUtils
         return null;
     }
 
+    private static void restoreInformationFromUuidEntry(Map<String, Object> requestMap, UuidEntry uuidEntry)
+    {
+        requestMap.put(OLD_VIEW_ID_KEY, uuidEntry.getViewId());
+
+        requestMap.put(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY, uuidEntry.getWindowContextId());
+    }
+
+    private static Long tryToFindWindowIdInRequestMap(Map<String, Object> requestMap)
+    {
+        return (Long) requestMap.get(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY);
+    }
+
+    public static UuidEntry storeUuidEntry(Map<String, Object> sessionMap, Long windowContextId, String oldViewId)
+    {
+        UuidEntry uuidEntry = new UuidEntry(windowContextId, oldViewId);
+        getUuidEntryMap(sessionMap).put(uuidEntry.getUuid(), uuidEntry);
+        return uuidEntry;
+    }
+
+    private static Map<String, UuidEntry> getUuidEntryMap(Map<String, Object> sessionMap)
+    {
+        String key = ConversationUtils.class.getName() + ":uuid:map";
+        if(!sessionMap.containsKey(key))
+        {
+            sessionMap.put(key, new ConcurrentHashMap<String, UuidEntry>());
+        }
+
+        //noinspection unchecked
+        return (Map<String, UuidEntry>)sessionMap.get(key);
+    }
+
+    //TODO
+    public static void restoreInformationOfRequest(FacesContext facesContext)
+    {
+        Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, Object> requstMap = facesContext.getExternalContext().getRequestMap();
+        Map<String, Object> sessionMap = facesContext.getExternalContext().getSessionMap();
+
+        requstMap.put(NEW_VIEW_ID_KEY, facesContext.getViewRoot().getViewId());
+
+        String uuidKey = requestParameterMap.get(UUID_ID_KEY);
+
+        if(uuidKey != null)
+        {
+            UuidEntry uuidEntry = getUuidEntryMap(sessionMap).remove(uuidKey);
+
+            if (uuidEntry != null)
+            {
+                requstMap.put(OLD_VIEW_ID_KEY, uuidEntry.getViewId());
+
+                requstMap.put(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY, uuidEntry.getWindowContextId());
+            }
+        }
+
+        String oldViewId = requestParameterMap.get(OLD_VIEW_ID_KEY);
+
+        if (oldViewId != null)
+        {
+            requstMap.put(OLD_VIEW_ID_KEY, oldViewId);
+        }
+    }
+
+    public static void storeCurrentViewIdAsOldViewId(FacesContext facesContext)
+    {
+        String oldViewId = facesContext.getViewRoot().getViewId();
+        facesContext.getExternalContext().getRequestMap().put(OLD_VIEW_ID_KEY, oldViewId);
+    }
+
+    public static void storeCurrentViewIdAsNewViewId(FacesContext facesContext)
+    {
+        String newViewId = facesContext.getViewRoot().getViewId();
+        facesContext.getExternalContext().getRequestMap().put(NEW_VIEW_ID_KEY, newViewId);
+    }
+
+    public static String getOldViewIdFromRequest(FacesContext facesContext)
+    {
+        return getOldViewIdFromRequest(facesContext.getExternalContext().getRequestMap());
+    }
+
+    public static String getOldViewIdFromRequest(Map<String, Object> requstMap)
+    {
+        return (String)requstMap.get(OLD_VIEW_ID_KEY);
+    }
+
+    public static String getNewViewIdFromRequest(FacesContext facesContext)
+    {
+        return (String)facesContext.getExternalContext().getRequestMap().get(NEW_VIEW_ID_KEY);
+    }
+
     public static WindowContextIdHolderComponent getWindowContextIdHolderComponent(FacesContext facesContext)
     {
         List<UIComponent> uiComponents = facesContext.getViewRoot().getChildren();

Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultCompositeMessageHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultCompositeMessageHandler.java?rev=964247&r1=964246&r2=964247&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultCompositeMessageHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultCompositeMessageHandler.java Wed Jul 14 23:01:35 2010
@@ -38,7 +38,7 @@ class DefaultCompositeMessageHandler imp
 {
     private static final long serialVersionUID = 3553885372006874180L;
 
-    private final List<MessageHandler> messageHandlers = new ArrayList<MessageHandler>();
+    private List<MessageHandler> messageHandlers = new ArrayList<MessageHandler>();
 
     DefaultCompositeMessageHandler(Iterable<MessageHandler> messageHandlerIterable)
     {