Author: jafl Date: Wed Jun 1 00:30:25 2011 New Revision: 1129979 URL: http://svn.apache.org/viewvc?rev=1129979&view=rev Log: XW-386 allow x['y'] as well as x.y
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java?rev=1129979&r1=1129978&r2=1129979&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java Wed Jun 1 00:30:25 2011 @@ -1,12 +1,12 @@ /* * Copyright 2002-2007,2009 The Apache Software Foundation. - * + * * Licensed 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. @@ -160,18 +160,22 @@ public class ParametersInterceptor exten } } + static private int countOGNLCharacters(String s) { + int count = 0; + for (int i = s.length() - 1; i >= 0; i--) { + char c = s.charAt(i); + if (c == '.' || c == '[') count++; + } + return count; + } + /** - * Compares based on number of '.' characters (fewer is higher) + * Compares based on number of '.' and '[' characters (fewer is higher) */ static final Comparator<String> rbCollator = new Comparator<String>() { public int compare(String s1, String s2) { - int l1 = 0, l2 = 0; - for (int i = s1.length() - 1; i >= 0; i--) { - if (s1.charAt(i) == '.') l1++; - } - for (int i = s2.length() - 1; i >= 0; i--) { - if (s2.charAt(i) == '.') l2++; - } + int l1 = countOGNLCharacters(s1), + l2 = countOGNLCharacters(s2); return l1 < l2 ? -1 : (l2 < l1 ? 1 : s1.compareTo(s2)); } @@ -328,7 +332,7 @@ public class ParametersInterceptor exten if (entry.getValue() instanceof Object[]) { Object[] valueArray = (Object[]) entry.getValue(); logEntry.append("[ "); - if (valueArray.length > 0 ) { + if (valueArray.length > 0 ) { for (int indexA = 0; indexA < (valueArray.length - 1); indexA++) { Object valueAtIndex = valueArray[indexA]; logEntry.append(String.valueOf(valueAtIndex)); Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java?rev=1129979&r1=1129978&r2=1129979&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java (original) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java Wed Jun 1 00:30:25 2011 @@ -394,20 +394,23 @@ public class ParametersInterceptorTest e Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("user.address.city", "London"); + parameters.put("user.address['postal']", "QJR387"); parameters.put("user.name", "Superman"); Action action = new SimpleAction(); pi.setParameters(action, stack, parameters); assertEquals(true, pi.isOrdered()); - assertEquals(2, actual.size()); + assertEquals(3, actual.size()); assertEquals("London", actual.get("user.address.city")); + assertEquals("QJR387", actual.get("user.address['postal']")); assertEquals("Superman", actual.get("user.name")); // should be ordered so user.name should be first List<Object> values = new ArrayList<Object>(actual.values()); assertEquals("Superman", values.get(0)); assertEquals("London", values.get(1)); + assertEquals("QJR387", values.get(2)); } public void testSetOrdered() throws Exception {