You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/05/06 18:25:41 UTC
svn commit: r1100263 - in
/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared:
renderkit/html/HtmlRendererUtils.java util/SelectItemsIterator.java
util/_EmptyIterator.java
Author: lu4242
Date: Fri May 6 16:25:40 2011
New Revision: 1100263
URL: http://svn.apache.org/viewvc?rev=1100263&view=rev
Log:
MYFACES-3129 [PERF] Call first getChildCount() or getFacetCount() before try to create the iterator
Added:
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/_EmptyIterator.java
Modified:
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/SelectItemsIterator.java
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java?rev=1100263&r1=1100262&r2=1100263&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java Fri May 6 16:25:40 2011
@@ -1798,27 +1798,40 @@ public final class HtmlRendererUtils {
return null;
}
+ Map<String, List<String>> parameters = null;
// handle URL parameters
- Map<String, List<String>> parameters = new HashMap<String, List<String>>();
- List<UIParameter> validParams = getValidUIParameterChildren(
- facesContext, component.getChildren(), true, false);
- for (UIParameter param : validParams) {
- String name = param.getName();
- Object value = param.getValue();
- if (parameters.containsKey(name)) {
- parameters.get(name).add(value.toString());
- } else {
- List<String> list = new ArrayList<String>(1);
- list.add(value.toString());
- parameters.put(name, list);
+ if (component.getChildCount() > 0)
+ {
+ parameters = new HashMap<String, List<String>>();
+ List<UIParameter> validParams = getValidUIParameterChildren(
+ facesContext, component.getChildren(), true, false);
+ for (UIParameter param : validParams) {
+ String name = param.getName();
+ Object value = param.getValue();
+ if (parameters.containsKey(name)) {
+ parameters.get(name).add(value.toString());
+ } else {
+ List<String> list = new ArrayList<String>(1);
+ list.add(value.toString());
+ parameters.put(name, list);
+ }
}
}
// handle NavigationCase parameters
Map<String, List<String>> navigationCaseParams = navigationCase.getParameters();
if (navigationCaseParams != null) {
+ if (parameters == null)
+ {
+ parameters = new HashMap<String, List<String>>();
+ }
parameters.putAll(navigationCaseParams);
}
+
+ if (parameters == null)
+ {
+ parameters = Collections.emptyMap();
+ }
// In theory the precedence order to deal with params is this:
// component parameters, navigation-case parameters, view parameters
@@ -2326,22 +2339,34 @@ public final class HtmlRendererUtils {
* @return
*/
public static Map<String, String> mapAttachedParamsToStringValues(FacesContext facesContext, UIComponent uiComponent) {
- Map<String, String> retVal = new HashMap<String, String>();
+ Map<String, String> retVal = null;
- List<UIParameter> validParams = getValidUIParameterChildren(
- facesContext, uiComponent.getChildren(), true, true);
- for (UIParameter param : validParams) {
- String name = param.getName();
- Object value = param.getValue();
- if (value instanceof String)
- {
- retVal.put(name, (String) value);
- }
- else
- {
- retVal.put(name, value.toString());
+ if (uiComponent.getChildCount() > 0)
+ {
+ List<UIParameter> validParams = getValidUIParameterChildren(
+ facesContext, uiComponent.getChildren(), true, true);
+ for (UIParameter param : validParams) {
+ String name = param.getName();
+ Object value = param.getValue();
+ if (retVal == null)
+ {
+ retVal = new HashMap<String, String>();
+ }
+ if (value instanceof String)
+ {
+ retVal.put(name, (String) value);
+ }
+ else
+ {
+ retVal.put(name, value.toString());
+ }
}
}
+
+ if (retVal == null)
+ {
+ retVal = Collections.emptyMap();
+ }
return retVal;
}
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/SelectItemsIterator.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/SelectItemsIterator.java?rev=1100263&r1=1100262&r2=1100263&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/SelectItemsIterator.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/SelectItemsIterator.java Fri May 6 16:25:40 2011
@@ -59,6 +59,8 @@ public class SelectItemsIterator impleme
private static final String ITEM_LABEL_ESCAPED_ATTR = JSFAttr.ITEM_LABEL_ESCAPED_ATTR;
private static final String NO_SELECTION_VALUE_ATTR = JSFAttr.NO_SELECTION_VALUE_ATTR;
+ private static final Iterator<UIComponent> _EMPTY_UICOMPONENT_ITERATOR = new _EmptyIterator<UIComponent>();
+
private final Iterator<UIComponent> _children;
private Iterator<? extends Object> _nestedItems;
private SelectItem _nextItem;
@@ -67,7 +69,7 @@ public class SelectItemsIterator impleme
public SelectItemsIterator(UIComponent selectItemsParent, FacesContext facesContext)
{
- _children = selectItemsParent.getChildren().iterator();
+ _children = selectItemsParent.getChildCount() > 0 ? selectItemsParent.getChildren().iterator() : _EMPTY_UICOMPONENT_ITERATOR;
_facesContext = facesContext;
}
Added: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/_EmptyIterator.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/_EmptyIterator.java?rev=1100263&view=auto
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/_EmptyIterator.java (added)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/_EmptyIterator.java Fri May 6 16:25:40 2011
@@ -0,0 +1,41 @@
+/*
+ * 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.shared.util;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+class _EmptyIterator<T> implements Iterator<T>
+{
+
+ public boolean hasNext()
+ {
+ return false;
+ }
+
+ public T next()
+ {
+ throw new NoSuchElementException();
+ }
+
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+}