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 21:19:12 UTC
svn commit: r1040754 - in /myfaces/extensions/cdi/trunk/jee-modules:
jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/
jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/
jsf-module/impl/src/mai...
Author: gpetracek
Date: Tue Nov 30 20:19:11 2010
New Revision: 1040754
URL: http://svn.apache.org/viewvc?rev=1040754&view=rev
Log:
EXTCDI-36 optional support for getNavigationCases
Added:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestParameter.java
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/JsfModuleConfig.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/DefaultWindowContextConfig.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
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/JsfModuleConfig.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/JsfModuleConfig.java?rev=1040754&r1=1040753&r2=1040754&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/JsfModuleConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/JsfModuleConfig.java Tue Nov 30 20:19:11 2010
@@ -33,4 +33,11 @@ public interface JsfModuleConfig extends
* @return true for activating it, false otherwise
*/
boolean isInitialRedirectEnabled();
+
+ /**
+ * esp useful for JSF 2.0
+ * @return true for creating additional navigation-cases based on view configs for
+ * ConfigurableNavigationHandler#getNavigationCases
+ */
+ boolean isUseViewConfigsAsNavigationCasesEnabled();
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/DefaultWindowContextConfig.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/DefaultWindowContextConfig.java?rev=1040754&r1=1040753&r2=1040754&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/DefaultWindowContextConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/DefaultWindowContextConfig.java Tue Nov 30 20:19:11 2010
@@ -115,4 +115,9 @@ public class DefaultWindowContextConfig
{
return true;
}
+
+ public boolean isUseViewConfigsAsNavigationCasesEnabled()
+ {
+ return false;
+ }
}
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=1040754&r1=1040753&r2=1040754&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 20:19:11 2010
@@ -33,6 +33,8 @@ import java.util.Iterator;
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
/**
* keep in sync with extval!
@@ -131,32 +133,48 @@ public class JsfUtils
StringBuilder finalUrl = new StringBuilder(url);
boolean existingParameters = url.contains("?");
- Map<String, String> requestParms = externalContext.getRequestParameterMap();
- for(Map.Entry<String, String> requestParam : requestParms.entrySet())
+ for(RequestParameter requestParam : getRequestParameters(externalContext, true))
{
String key = requestParam.getKey();
- if("javax.faces.ViewState".equals(key))
+ for(String parameterValue : requestParam.getValues())
{
- continue;
- }
-
- if(!url.contains(key + "="))
- {
- if(!existingParameters)
- {
- finalUrl.append("?");
- existingParameters = true;
- }
- else
+ if(!url.contains(key + "=" + parameterValue))
{
- finalUrl.append("&");
+ if(!existingParameters)
+ {
+ finalUrl.append("?");
+ existingParameters = true;
+ }
+ else
+ {
+ finalUrl.append("&");
+ }
+ finalUrl.append(key);
+ finalUrl.append("=");
+ finalUrl.append(JsfUtils.encodeURLParameterValue(parameterValue, externalContext));
}
- finalUrl.append(key);
- finalUrl.append("=");
- finalUrl.append(JsfUtils.encodeURLParameterValue(requestParam.getValue(), externalContext));
}
}
return finalUrl.toString();
}
+
+ public static Set<RequestParameter> getRequestParameters(ExternalContext externalContext, boolean filterViewState)
+ {
+ Set<RequestParameter> result = new HashSet<RequestParameter>();
+
+ String key;
+ for(Map.Entry<String, String[]> entry : externalContext.getRequestParameterValuesMap().entrySet())
+ {
+ key = entry.getKey();
+ if(filterViewState && "javax.faces.ViewState".equals(key))
+ {
+ continue;
+ }
+
+ result.add(new RequestParameter(key, entry.getValue()));
+ }
+
+ return result;
+ }
}
Added: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestParameter.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/RequestParameter.java?rev=1040754&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestParameter.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestParameter.java Tue Nov 30 20:19:11 2010
@@ -0,0 +1,52 @@
+/*
+ * 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.jsf.impl.util;
+
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * @author Gerhard Petracek
+ */
+public class RequestParameter
+{
+ private final String key;
+ private final String[] values;
+
+ public RequestParameter(String key, String[] values)
+ {
+ this.key = key;
+ this.values = values;
+ }
+
+ public String getKey()
+ {
+ return key;
+ }
+
+ public List<String> getValueList()
+ {
+ return Arrays.asList(this.values);
+ }
+
+ public String[] getValues()
+ {
+ return values;
+ }
+}
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=1040754&r1=1040753&r2=1040754&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 20:19:11 2010
@@ -21,9 +21,13 @@ package org.apache.myfaces.extensions.cd
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.impl.util.JsfUtils;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.RequestParameter;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.JsfModuleConfig;
import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
+import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.application.NavigationHandler;
@@ -31,9 +35,11 @@ import javax.faces.application.Navigatio
import javax.faces.context.FacesContext;
import java.util.Set;
import java.util.Map;
+import java.util.List;
import java.util.HashMap;
import java.util.Collection;
import java.util.HashSet;
+import javax.faces.context.ExternalContext;
/**
* We have to ensure the invocation order for the type-safe navigation feature/s.
@@ -44,15 +50,23 @@ public class CodiNavigationHandler exten
{
private final NavigationHandler wrapped;
private final boolean deactivated;
- private final boolean addViewConfigsAsNavigationCase = false; //TODO add config
+ private final boolean addViewConfigsAsNavigationCase;
public CodiNavigationHandler(NavigationHandler navigationHandler)
{
this.wrapped = navigationHandler;
this.deactivated = !isActivated();
+
+ if(!this.deactivated)
+ {
+ this.addViewConfigsAsNavigationCase = isAddViewConfigsAsNavigationCaseActivated();
+ }
+ else
+ {
+ this.addViewConfigsAsNavigationCase = false;
+ }
}
- //TODO
public void handleNavigation(FacesContext context, String fromAction, String outcome)
{
if(this.deactivated)
@@ -102,6 +116,9 @@ public class CodiNavigationHandler exten
if(!viewConfigEntries.isEmpty())
{
Set<NavigationCase> navigationCase = new HashSet<NavigationCase>();
+
+ Map<String, List<String>> parameters = resolveParameters();
+
for(ViewConfigEntry entry : viewConfigEntries)
{
navigationCase.add(new NavigationCase("*",
@@ -109,7 +126,7 @@ public class CodiNavigationHandler exten
null,
null,
entry.getViewId(),
- null,
+ parameters,
Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
Page.ViewParameter.INCLUDE.equals(entry.getViewParameter())));
@@ -119,8 +136,29 @@ public class CodiNavigationHandler exten
return result;
}
+ private Map<String, List<String>> resolveParameters()
+ {
+ Map<String, List<String>> parameters = new HashMap<String, List<String>>();
+
+ ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
+
+ for(RequestParameter parameter : JsfUtils.getRequestParameters(externalContext, true))
+ {
+ parameters.put(parameter.getKey(), parameter.getValueList());
+ }
+
+ return parameters;
+ }
+
public boolean isActivated()
{
return ClassDeactivation.isClassActivated(getClass());
}
+
+ private boolean isAddViewConfigsAsNavigationCaseActivated()
+ {
+ JsfModuleConfig config = CodiUtils.getContextualReferenceByClass(JsfModuleConfig.class);
+
+ return config.isUseViewConfigsAsNavigationCasesEnabled();
+ }
}