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 {