Author: lukaszlenart
Date: Thu May 23 06:31:48 2013
New Revision: 1485592

URL: http://svn.apache.org/r1485592
Log:
WW-3623 Extends id generation logic to support case when tag doesn't have id, 
key nor name defined and some generics fix

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java?rev=1485592&r1=1485591&r2=1485592&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
 Thu May 23 06:31:48 2013
@@ -53,7 +53,7 @@ public class Component {
     public static final String COMPONENT_STACK = "__component_stack";
 
     protected ValueStack stack;
-    protected Map parameters;
+    protected Map<String, Object> parameters;
     protected ActionMapper actionMapper;
     protected boolean throwExceptionOnELFailure;
     private UrlHelper urlHelper;
@@ -65,7 +65,7 @@ public class Component {
      */
     public Component(ValueStack stack) {
         this.stack = stack;
-        this.parameters = new LinkedHashMap();
+        this.parameters = new LinkedHashMap<String, Object>();
         getComponentStack().push(this);
     }
 
@@ -107,10 +107,10 @@ public class Component {
      * Gets the component stack of this component.
      * @return the component stack of this component, never <tt>null</tt>.
      */
-    public Stack getComponentStack() {
-        Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);
+    public Stack<Component> getComponentStack() {
+        Stack<Component> componentStack = (Stack<Component>) 
stack.getContext().get(COMPONENT_STACK);
         if (componentStack == null) {
-            componentStack = new Stack();
+            componentStack = new Stack<Component>();
             stack.getContext().put(COMPONENT_STACK, componentStack);
         }
         return componentStack;
@@ -449,7 +449,7 @@ public class Component {
      * Gets the parameters.
      * @return the parameters. Is never <tt>null</tt>.
      */
-    public Map getParameters() {
+    public Map<String, Object> getParameters() {
         return parameters;
     }
 
@@ -457,7 +457,7 @@ public class Component {
      * Adds all the given parameters to this component's own parameters.
      * @param params the parameters to add.
      */
-    public void addAllParameters(Map params) {
+    public void addAllParameters(Map<String, Object> params) {
         parameters.putAll(params);
     }
 
@@ -472,7 +472,7 @@ public class Component {
      */
     public void addParameter(String key, Object value) {
         if (key != null) {
-            Map params = getParameters();
+            Map<String, Object> params = getParameters();
 
             if (value == null) {
                 params.remove(key);

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java?rev=1485592&r1=1485591&r2=1485592&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 Thu May 23 06:31:48 2013
@@ -43,7 +43,6 @@ import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -806,7 +805,7 @@ public abstract class UIBean extends Com
 
             if ( name != null ) {
                 // list should have been created by the form component
-                List tags = (List) form.getParameters().get("tagNames");
+                List<String> tags = (List<String>) 
form.getParameters().get("tagNames");
                 tags.add(name);
             }
         }
@@ -829,8 +828,8 @@ public abstract class UIBean extends Com
                 Map overallTooltipConfigMap = getTooltipConfig(form);
                 overallTooltipConfigMap.putAll(tooltipConfigMap); // override 
parent form's tooltip config
 
-                for (Iterator i = 
overallTooltipConfigMap.entrySet().iterator(); i.hasNext(); ) {
-                    Map.Entry entry = (Map.Entry) i.next();
+                for (Object o : overallTooltipConfigMap.entrySet()) {
+                    Map.Entry entry = (Map.Entry) o;
                     addParameter((String) entry.getKey(), entry.getValue());
                 }
             }
@@ -930,14 +929,14 @@ public abstract class UIBean extends Com
 
     protected Map getTooltipConfig(UIBean component) {
         Object tooltipConfigObj = 
component.getParameters().get("tooltipConfig");
-        Map tooltipConfig = new LinkedHashMap();
+        Map<String, String> tooltipConfig = new LinkedHashMap<String, 
String>();
 
         if (tooltipConfigObj instanceof Map) {
             // we get this if its configured using
             // 1] UI component's tooltipConfig attribute  OR
             // 2] <param name="tooltip" value="" /> param tag value attribute
 
-            tooltipConfig = new LinkedHashMap((Map)tooltipConfigObj);
+            tooltipConfig = new LinkedHashMap<String, 
String>((Map)tooltipConfigObj);
         } else if (tooltipConfigObj instanceof String) {
 
             // we get this if its configured using
@@ -945,17 +944,16 @@ public abstract class UIBean extends Com
             String tooltipConfigStr = (String) tooltipConfigObj;
             String[] tooltipConfigArray = tooltipConfigStr.split("\\|");
 
-            for (int a=0; a<tooltipConfigArray.length; a++) {
-                String[] configEntry = 
((String)tooltipConfigArray[a].trim()).split("=");
+            for (String aTooltipConfigArray : tooltipConfigArray) {
+                String[] configEntry = aTooltipConfigArray.trim().split("=");
                 String key = configEntry[0].trim();
-                String value = null;
+                String value;
                 if (configEntry.length > 1) {
                     value = configEntry[1].trim();
                     tooltipConfig.put(key, value);
-                }
-                else {
+                } else {
                     if (LOG.isWarnEnabled()) {
-                       LOG.warn("component "+component+" tooltip config param 
"+key+" has no value defined, skipped");
+                        LOG.warn("component " + component + " tooltip config 
param " + key + " has no value defined, skipped");
                     }
                 }
             }
@@ -970,7 +968,7 @@ public abstract class UIBean extends Com
     }
 
     /**
-     * Create HTML id element for the component and populate this component 
parmaeter
+     * Create HTML id element for the component and populate this component 
parameter
      * map. Additionally, a parameter named escapedId is populated which 
contains the found id value filtered by
      * {@link #escape(String)}, needed eg. for naming Javascript identifiers 
based on the id value.
      *
@@ -981,18 +979,23 @@ public abstract class UIBean extends Com
      *   <li>[this_component_name]</li>
      * </ol>
      *
-     * @param form
+     * @param form enclosing form tag
      */
     protected void populateComponentHtmlId(Form form) {
         String tryId;
+        String generatedId;
         if (id != null) {
             // this check is needed for backwards compatibility with 2.1.x
             tryId = findStringIfAltSyntax(id);
+        } else if (null == (generatedId = escape(name != null ? 
findString(name) : null))) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Cannot determine id attribute for [#0], consider 
defining id, name or key attribute!", this);
+            }
+            tryId = null;
         } else if (form != null) {
-            tryId = form.getParameters().get("id") + "_"
-                    + escape(name != null ? findString(name) : null);
+            tryId = form.getParameters().get("id") + "_" + generatedId;
         } else {
-            tryId = escape(name != null ? findString(name) : null);
+            tryId = generatedId;
         }
         addParameter("id", tryId);
         addParameter("escapedId", escape(tryId));

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java?rev=1485592&r1=1485591&r2=1485592&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
 Thu May 23 06:31:48 2013
@@ -21,15 +21,14 @@
 
 package org.apache.struts2.components;
 
-import java.util.Collections;
-import java.util.Map;
-
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.struts2.StrutsTestCase;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
+import java.util.Collections;
+import java.util.Map;
 
 /**
  *
@@ -85,6 +84,21 @@ public class UIBeanTest extends StrutsTe
         assertEquals("formId_txtFldName", txtFld.getParameters().get("id"));
     }
 
+    public void testPopulateComponentHtmlWithoutNameAndId() throws Exception {
+        ValueStack stack = ActionContext.getContext().getValueStack();
+        MockHttpServletRequest req = new MockHttpServletRequest();
+        MockHttpServletResponse res = new MockHttpServletResponse();
+
+        Form form = new Form(stack, req, res);
+        form.getParameters().put("id", "formId");
+
+        TextField txtFld = new TextField(stack, req, res);
+
+        txtFld.populateComponentHtmlId(form);
+
+        assertEquals(null, txtFld.getParameters().get("id"));
+    }
+
     public void testEscape() throws Exception {
         ValueStack stack = ActionContext.getContext().getValueStack();
         MockHttpServletRequest req = new MockHttpServletRequest();
@@ -143,7 +157,7 @@ public class UIBeanTest extends StrutsTe
         ValueStack stack = ActionContext.getContext().getValueStack();
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        Map context = Collections.singletonMap("theme", new Integer(12));
+        Map context = Collections.singletonMap("theme", 12);
         ActionContext.getContext().put("attr", context);
 
         TextField txtFld = new TextField(stack, req, res);


Reply via email to