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/01/05 12:47:59 UTC
svn commit: r1055436 - in /myfaces/extensions/cdi/trunk/jee-modules:
jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/
jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/
Author: gpetracek
Date: Wed Jan 5 11:47:58 2011
New Revision: 1055436
URL: http://svn.apache.org/viewvc?rev=1055436&view=rev
Log:
EXTCDI-117 first draft
Added:
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/NavigationCaseMapWrapper.java
Modified:
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/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=1055436&r1=1055435&r2=1055436&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 Wed Jan 5 11:47:58 2011
@@ -162,6 +162,11 @@ public class JsfUtils
{
Set<RequestParameter> result = new HashSet<RequestParameter>();
+ if(externalContext == null || externalContext.getRequestParameterValuesMap() == null)
+ {
+ return result;
+ }
+
String key;
for(Map.Entry<String, String[]> entry : externalContext.getRequestParameterValuesMap().entrySet())
{
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=1055436&r1=1055435&r2=1055436&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 Wed Jan 5 11:47:58 2011
@@ -19,11 +19,6 @@
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.spi.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;
@@ -35,11 +30,7 @@ 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.
@@ -107,57 +98,24 @@ public class CodiNavigationHandler exten
public Map<String, Set<NavigationCase>> getNavigationCases()
{
- Map<String, Set<NavigationCase>> result = new HashMap<String, Set<NavigationCase>>();
+ Map<String, Set<NavigationCase>> result = null;
if (this.wrapped instanceof ConfigurableNavigationHandler)
{
- result.putAll(((ConfigurableNavigationHandler) this.wrapped).getNavigationCases());
+ result = ((ConfigurableNavigationHandler) this.wrapped).getNavigationCases();
}
- if(!this.addViewConfigsAsNavigationCase || this.deactivated)
+ if(result == null)
{
- return result;
+ result = new HashMap<String, Set<NavigationCase>>();
}
- Collection<ViewConfigEntry> viewConfigEntries = ViewConfigCache.getViewConfigEntries();
-
- if(!viewConfigEntries.isEmpty())
- {
- Set<NavigationCase> navigationCase = new HashSet<NavigationCase>();
-
- Map<String, List<String>> parameters = resolveParameters();
- boolean includeParameters;
-
- for(ViewConfigEntry entry : viewConfigEntries)
- {
- includeParameters = Page.ViewParameter.INCLUDE.equals(entry.getViewParameter());
- navigationCase.add(new NavigationCase("*",
- null,
- null,
- null,
- entry.getViewId(),
- includeParameters ? parameters : null,
- Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
- includeParameters));
-
- result.put(entry.getViewId(), navigationCase);
- }
- }
- 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))
+ if(!this.addViewConfigsAsNavigationCase || this.deactivated)
{
- parameters.put(parameter.getKey(), parameter.getValueList());
+ return result;
}
- return parameters;
+ return new NavigationCaseMapWrapper(result);
}
public boolean isActivated()
Added: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/NavigationCaseMapWrapper.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/NavigationCaseMapWrapper.java?rev=1055436&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/NavigationCaseMapWrapper.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/NavigationCaseMapWrapper.java Wed Jan 5 11:47:58 2011
@@ -0,0 +1,185 @@
+/*
+ * 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.jsf2.impl.navigation;
+
+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.spi.ViewConfigEntry;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.JsfUtils;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.RequestParameter;
+
+import javax.faces.application.NavigationCase;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import java.util.List;
+import java.util.Set;
+import java.util.Map;
+import java.util.HashSet;
+import java.util.HashMap;
+import java.util.Collection;
+
+/**
+ * Destructive operations aren't supported (compared to the SubKeyMap used in MyFaces).
+ * Reason: It isn't allowed to remove navigation cases btw. View-Configs
+ *
+ * @author Gerhard Petracek
+ */
+class NavigationCaseMapWrapper implements Map<String, Set<NavigationCase>>
+{
+ private Map<String, Set<NavigationCase>> wrappedNavigationCaseMap;
+ private final Map<String, Set<NavigationCase>> viewConfigBasedNavigationCaseCache;
+
+ public NavigationCaseMapWrapper(Map<String, Set<NavigationCase>> navigationCases)
+ {
+ this.wrappedNavigationCaseMap = navigationCases;
+ this.viewConfigBasedNavigationCaseCache = createViewConfigBasedNavigationCases(false);
+ }
+
+ private Map<String, Set<NavigationCase>> createViewConfigBasedNavigationCases(boolean allowParameters)
+ {
+ Map<String, Set<NavigationCase>> result = new HashMap<String, Set<NavigationCase>>();
+
+ Collection<ViewConfigEntry> viewConfigEntries = ViewConfigCache.getViewConfigEntries();
+
+ if(!viewConfigEntries.isEmpty())
+ {
+ Set<NavigationCase> navigationCase = new HashSet<NavigationCase>();
+
+ Map<String, List<String>> parameters = null;
+
+ if(allowParameters)
+ {
+ parameters = resolveParameters();
+ }
+
+ boolean includeParameters;
+
+ for(ViewConfigEntry entry : viewConfigEntries)
+ {
+ includeParameters = Page.ViewParameter.INCLUDE.equals(entry.getViewParameter());
+ navigationCase.add(new NavigationCase("*",
+ null,
+ null,
+ null,
+ entry.getViewId(),
+ includeParameters ? parameters : null,
+ Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
+ includeParameters));
+
+ result.put(entry.getViewId(), navigationCase);
+ }
+ }
+ 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 int size()
+ {
+ return this.wrappedNavigationCaseMap.size() +
+ this.viewConfigBasedNavigationCaseCache.size();
+ }
+
+ public boolean isEmpty()
+ {
+ return this.wrappedNavigationCaseMap.isEmpty() &&
+ this.viewConfigBasedNavigationCaseCache.isEmpty();
+ }
+
+ public boolean containsKey(Object key)
+ {
+ return this.wrappedNavigationCaseMap.containsKey(key) ||
+ this.viewConfigBasedNavigationCaseCache.containsKey(key);
+ }
+
+ public boolean containsValue(Object value)
+ {
+ return this.wrappedNavigationCaseMap.containsValue(value) ||
+ this.viewConfigBasedNavigationCaseCache.containsValue(value);
+ }
+
+ public Set<NavigationCase> get(Object key)
+ {
+ Set<NavigationCase> result = this.wrappedNavigationCaseMap.get(key);
+
+ if(result == null)
+ {
+ return createViewConfigBasedNavigationCases(true).get(key);
+ }
+ return result;
+ }
+
+ public Set<NavigationCase> put(String key, Set<NavigationCase> value)
+ {
+ return this.wrappedNavigationCaseMap.put(key, value);
+ }
+
+ public Set<NavigationCase> remove(Object key)
+ {
+ return this.wrappedNavigationCaseMap.remove(key);
+ }
+
+ public void putAll(Map<? extends String, ? extends Set<NavigationCase>> m)
+ {
+ this.wrappedNavigationCaseMap.putAll(m);
+ }
+
+ public void clear()
+ {
+ this.wrappedNavigationCaseMap.clear();
+ }
+
+ public Set<String> keySet()
+ {
+ Set<String> result = new HashSet<String>();
+ result.addAll(this.wrappedNavigationCaseMap.keySet());
+ result.addAll(this.viewConfigBasedNavigationCaseCache.keySet());
+ return result;
+ }
+
+ public Collection<Set<NavigationCase>> values()
+ {
+ Collection<Set<NavigationCase>> result = new HashSet<Set<NavigationCase>>();
+
+ result.addAll(this.wrappedNavigationCaseMap.values());
+ result.addAll(createViewConfigBasedNavigationCases(true).values());
+ return result;
+ }
+
+ public Set<Entry<String, Set<NavigationCase>>> entrySet()
+ {
+ Set<Entry<String, Set<NavigationCase>>> result = new HashSet<Entry<String, Set<NavigationCase>>>();
+
+ result.addAll(this.wrappedNavigationCaseMap.entrySet());
+ result.addAll(createViewConfigBasedNavigationCases(true).entrySet());
+ return result;
+ }
+}