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/02/16 07:41:28 UTC
svn commit: r1071155 - in /myfaces/extensions/cdi/trunk:
core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/
jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversatio...
Author: gpetracek
Date: Wed Feb 16 06:41:27 2011
New Revision: 1071155
URL: http://svn.apache.org/viewvc?rev=1071155&view=rev
Log:
EXTCDI-137 first draft of eager window-id detection
Modified:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/WindowContextConfig.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowContextManager.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/EditableWindowContextManagerProxy.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java
Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/WindowContextConfig.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/WindowContextConfig.java?rev=1071155&r1=1071154&r2=1071155&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/WindowContextConfig.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/config/WindowContextConfig.java Wed Feb 16 06:41:27 2011
@@ -103,6 +103,17 @@ public class WindowContextConfig extends
return false;
}
+ /**
+ * Allows to restore the window-context before the component tree gets built.
+ * Per default it's only supported if {#isUrlParameterSupported} is true as well.
+ *
+ * @return true for activating it, false otherwise
+ */
+ public boolean isEagerWindowContextDetectionEnabled()
+ {
+ return isUrlParameterSupported();
+ }
+
/*
* event config
*/
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/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/jsf/impl/scope/conversation/DefaultWindowContextManager.java?rev=1071155&r1=1071154&r2=1071155&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowContextManager.java Wed Feb 16 06:41:27 2011
@@ -362,6 +362,13 @@ public class DefaultWindowContextManager
}
}
+ public boolean isWindowContextActive(String windowContextId)
+ {
+ EditableWindowContext editableWindowContext = this.windowContextMap.get(windowContextId);
+
+ return editableWindowContext != null && editableWindowContext.isActive();
+ }
+
private EditableWindowContext convert(WindowContext windowContext)
{
if(!(windowContext instanceof EditableWindowContext))
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/EditableWindowContextManagerProxy.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/EditableWindowContextManagerProxy.java?rev=1071155&r1=1071154&r2=1071155&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/EditableWindowContextManagerProxy.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/EditableWindowContextManagerProxy.java Wed Feb 16 06:41:27 2011
@@ -152,4 +152,9 @@ public class EditableWindowContextManage
{
return editableWindowContextManager.getWindowContext(windowContextId);
}
+
+ public boolean isWindowContextActive(String windowContextId)
+ {
+ return editableWindowContextManager.isWindowContextActive(windowContextId);
+ }
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.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/WindowContextManagerObserver.java?rev=1071155&r1=1071154&r2=1071155&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java Wed Feb 16 06:41:27 2011
@@ -21,6 +21,7 @@ package org.apache.myfaces.extensions.cd
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.WindowContextConfig;
import org.apache.myfaces.extensions.cdi.jsf.api.listener.phase.AfterPhase;
import org.apache.myfaces.extensions.cdi.jsf.api.listener.phase.JsfPhaseId;
+import org.apache.myfaces.extensions.cdi.jsf.api.listener.phase.BeforePhase;
import org.apache.myfaces.extensions.cdi.jsf.api.request.RequestTypeResolver;
import org.apache.myfaces.extensions.cdi.jsf.api.config.JsfModuleConfig;
import org.apache.myfaces.extensions.cdi.jsf.impl.listener.request.FacesMessageEntry;
@@ -29,6 +30,9 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.WindowHandler;
import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.RequestCache;
+import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.*;
+import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.resolveWindowContextId;
import org.apache.myfaces.extensions.cdi.message.api.Message;
import javax.enterprise.event.Observes;
@@ -41,10 +45,7 @@ import static org.apache.myfaces.extensi
.AUTOMATED_ENTRY_POINT_PARAMETER_KEY;
import static org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager
.WINDOW_CONTEXT_ID_PARAMETER_KEY;
-import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.cleanupInactiveWindowContexts;
-import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.resolveWindowContextId;
-import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsNewViewId;
-import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsOldViewId;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
/**
* @author Gerhard Petracek
@@ -52,6 +53,45 @@ import static org.apache.myfaces.extensi
@SuppressWarnings({"UnusedDeclaration"})
final class WindowContextManagerObserver
{
+ /**
+ * tries to restore the window-id and the window-context as early as possible
+ * @param phaseEvent the current jsf phase-event
+ * @param windowContextManager the current window-context-manager
+ * @param windowHandler current window-handler
+ * @param windowContextConfig the active window-context-config
+ */
+ protected void tryToRestoreWindowContext(@Observes @BeforePhase(JsfPhaseId.RESTORE_VIEW) PhaseEvent phaseEvent,
+ EditableWindowContextManager windowContextManager,
+ WindowHandler windowHandler,
+ WindowContextConfig windowContextConfig)
+ {
+ boolean requestParameterSupported = windowContextConfig.isUrlParameterSupported();
+ if(!(requestParameterSupported && windowContextConfig.isEagerWindowContextDetectionEnabled()) ||
+ RequestCache.getCurrentWindowContext() != null /*skip the process if there is a custom mechanism*/)
+ {
+ return;
+ }
+
+ //don't use: windowContextManager.getCurrentWindowContext(); it would create a new window-id immediately and
+ //it would break other features.
+ String windowId = resolveWindowContextId(windowHandler,
+ requestParameterSupported,
+ windowContextConfig.isUnknownWindowIdsAllowed());
+
+ if(windowId != null)
+ {
+ boolean active = windowContextManager.isWindowContextActive(windowId);
+
+ if(active)
+ {
+ RequestCache.setCurrentWindowContext(windowContextManager.getWindowContext(windowId));
+ //just for supporting e.g. el-expressions
+ phaseEvent.getFacesContext().getExternalContext().getRequestMap()
+ .put(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY, windowId);
+ }
+ }
+ }
+
//don't change/optimize this observer!!!
protected void cleanup(@Observes @AfterPhase(JsfPhaseId.RESTORE_VIEW) PhaseEvent phaseEvent,
RequestTypeResolver requestTypeResolver,
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/spi/EditableWindowContextManager.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/spi/EditableWindowContextManager.java?rev=1071155&r1=1071154&r2=1071155&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java Wed Feb 16 06:41:27 2011
@@ -54,4 +54,6 @@ public interface EditableWindowContextMa
Collection<EditableWindowContext> getWindowContexts();
void closeAllWindowContexts();
+
+ boolean isWindowContextActive(String windowContextId);
}