You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2009/04/13 00:10:49 UTC
svn commit: r764336 - in /wicket/trunk/wicket/src:
main/java/org/apache/wicket/ main/java/org/apache/wicket/util/value/
test/java/org/apache/wicket/ test/java/org/apache/wicket/util/value/
Author: jdonnerstag
Date: Sun Apr 12 22:10:48 2009
New Revision: 764336
URL: http://svn.apache.org/viewvc?rev=764336&view=rev
Log:
fixed WICKET-2172 PageParameters construced with keyValuePairs does not handle array values
Issue: WICKET-2172
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/PageParameters.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/value/ValueMap.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/PageParametersTest.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/value/ValueMapTest.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/PageParameters.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/PageParameters.java?rev=764336&r1=764335&r2=764336&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/PageParameters.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/PageParameters.java Sun Apr 12 22:10:48 2009
@@ -123,14 +123,14 @@
final String key = pair.substring(0, pos).trim();
final String value = pair.substring(pos + 1).trim();
- put(key, value);
+ add(key, value);
}
else
{
final String key = pair.trim();
final String value = null;
- put(key, value);
+ add(key, value);
}
}
}
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java?rev=764336&r1=764335&r2=764336&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Resource.java Sun Apr 12 22:10:48 2009
@@ -149,7 +149,7 @@
* @param parameters
* Map of query parameters that parameterize this resource
*/
- public final void setParameters(final Map<?, ?> parameters)
+ public final void setParameters(final Map<String, ?> parameters)
{
if (parameters == null)
{
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/value/ValueMap.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/value/ValueMap.java?rev=764336&r1=764335&r2=764336&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/value/ValueMap.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/value/ValueMap.java Sun Apr 12 22:10:48 2009
@@ -20,7 +20,6 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -91,7 +90,7 @@
* @param map
* the <code>ValueMap</code> to copy
*/
- public ValueMap(final Map map)
+ public ValueMap(final Map<? extends String, ? extends Object> map)
{
super();
@@ -152,7 +151,7 @@
}
String key = keyValuePairs.substring(start, equalsIndex);
String value = keyValuePairs.substring(equalsIndex + 1, delimiterIndex);
- put(key, value);
+ add(key, value);
if (delimiterIndex < keyValuePairs.length())
{
start = delimiterIndex + 1;
@@ -490,7 +489,7 @@
* @see java.util.Map#putAll(java.util.Map)
*/
@Override
- public void putAll(final Map map)
+ public void putAll(final Map<? extends String, ? extends Object> map)
{
checkMutability();
super.putAll(map);
@@ -535,9 +534,15 @@
public String toString()
{
final StringBuffer buffer = new StringBuffer();
- for (final Iterator iterator = entrySet().iterator(); iterator.hasNext();)
+ boolean first = true;
+ for (Map.Entry<String, Object> entry : entrySet())
{
- final Map.Entry entry = (Map.Entry)iterator.next();
+ if (first == false)
+ {
+ buffer.append(' ');
+ }
+ first = false;
+
buffer.append(entry.getKey());
buffer.append(" = \"");
final Object value = entry.getValue();
@@ -555,10 +560,6 @@
}
buffer.append('\"');
- if (iterator.hasNext())
- {
- buffer.append(' ');
- }
}
return buffer.toString();
}
@@ -585,7 +586,9 @@
public Boolean getAsBoolean(String key)
{
if (!containsKey(key))
+ {
return null;
+ }
try
{
@@ -619,7 +622,9 @@
public Integer getAsInteger(String key)
{
if (!containsKey(key))
+ {
return null;
+ }
try
{
@@ -652,7 +657,9 @@
public Long getAsLong(String key)
{
if (!containsKey(key))
+ {
return null;
+ }
try
{
@@ -685,7 +692,9 @@
public Double getAsDouble(String key)
{
if (!containsKey(key))
+ {
return null;
+ }
try
{
@@ -700,7 +709,7 @@
/**
* @see IValueMap#getAsDouble(String, double)
*/
- public double getAsDouble(String key, double defaultValue)
+ public double getAsDouble(final String key, final double defaultValue)
{
try
{
@@ -715,7 +724,7 @@
/**
* @see IValueMap#getAsDuration(String)
*/
- public Duration getAsDuration(String key)
+ public Duration getAsDuration(final String key)
{
return getAsDuration(key, null);
}
@@ -723,10 +732,12 @@
/**
* @see IValueMap#getAsDuration(String, Duration)
*/
- public Duration getAsDuration(String key, Duration defaultValue)
+ public Duration getAsDuration(final String key, final Duration defaultValue)
{
if (!containsKey(key))
+ {
return defaultValue;
+ }
try
{
@@ -741,7 +752,7 @@
/**
* @see IValueMap#getAsTime(String)
*/
- public Time getAsTime(String key)
+ public Time getAsTime(final String key)
{
return getAsTime(key, null);
}
@@ -749,10 +760,12 @@
/**
* @see IValueMap#getAsTime(String, Time)
*/
- public Time getAsTime(String key, Time defaultValue)
+ public Time getAsTime(final String key, final Time defaultValue)
{
if (!containsKey(key))
+ {
return defaultValue;
+ }
try
{
@@ -765,43 +778,59 @@
}
/**
- * @see IValueMap#getAsEnum(String, Class<T>)
+ * @see org.apache.wicket.util.value.IValueMap#getAsEnum(java.lang.String, java.lang.Class)
*/
- public <T extends Enum<T>> T getAsEnum(String key, Class<T> eClass)
+ public <T extends Enum<T>> T getAsEnum(final String key, final Class<T> eClass)
{
return getEnumImpl(key, eClass, null);
}
/**
- * @see IValueMap#getAsEnum
+ * @see org.apache.wicket.util.value.IValueMap#getAsEnum(java.lang.String, java.lang.Enum)
*/
- public <T extends Enum<T>> T getAsEnum(String key, T defaultValue)
+ public <T extends Enum<T>> T getAsEnum(final String key, final T defaultValue)
{
if (defaultValue == null)
+ {
throw new IllegalArgumentException("Default value cannot be null");
+ }
+
return getEnumImpl(key, defaultValue.getClass(), defaultValue);
}
/**
- * @see IValueMap#getAsEnum(String, Class<T>, T)
+ * @see org.apache.wicket.util.value.IValueMap#getAsEnum(java.lang.String, java.lang.Class,
+ * java.lang.Enum)
*/
- public <T extends Enum<T>> T getAsEnum(String key, Class<T> eClass, T defaultValue)
+ public <T extends Enum<T>> T getAsEnum(final String key, final Class<T> eClass,
+ final T defaultValue)
{
return getEnumImpl(key, eClass, defaultValue);
}
/**
* get enum implementation
+ *
+ * @param key
+ * @param eClass
+ * @param defaultValue
+ * @param <T>
+ * @return Enum
*/
@SuppressWarnings( { "unchecked" })
- private <T extends Enum<T>> T getEnumImpl(String key, Class<?> eClass, T defaultValue)
+ private <T extends Enum<T>> T getEnumImpl(final String key, final Class<?> eClass,
+ final T defaultValue)
{
if (eClass == null)
+ {
throw new IllegalArgumentException("eClass value cannot be null");
+ }
String value = getString(key);
if (value == null)
+ {
return defaultValue;
+ }
Method valueOf = null;
try
Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/PageParametersTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/PageParametersTest.java?rev=764336&r1=764335&r2=764336&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/PageParametersTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/PageParametersTest.java Sun Apr 12 22:10:48 2009
@@ -94,6 +94,16 @@
assertEquals("3", a[2]);
}
+ public void testArray2()
+ {
+ PageParameters parameters = new PageParameters("a=1,a=2,a=3");
+ String[] a = parameters.getStringArray("a");
+ assertEquals(3, a.length);
+ assertEquals("1", a[0]);
+ assertEquals("2", a[1]);
+ assertEquals("3", a[2]);
+ }
+
/**
* Parsing of negative numbers on the right side of the assignment didn't work, as the minus
* character was not part of the word pattern.
Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/util/value/ValueMapTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/util/value/ValueMapTest.java?rev=764336&r1=764335&r2=764336&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/util/value/ValueMapTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/util/value/ValueMapTest.java Sun Apr 12 22:10:48 2009
@@ -19,9 +19,10 @@
import java.io.NotSerializableException;
import junit.framework.TestCase;
+
import org.apache.wicket.util.io.SerializableChecker;
-import org.apache.wicket.util.time.Time;
import org.apache.wicket.util.time.Duration;
+import org.apache.wicket.util.time.Time;
/**
* @author jcompagner
@@ -38,7 +39,6 @@
assertEquals(1, vm.size());
assertEquals("value", vm.get("param"));
-
vm = new ValueMap("param1=value1,param2=value2");
assertEquals(2, vm.size());
assertEquals("value1", vm.get("param1"));
@@ -105,132 +105,135 @@
}
- /**
- * Enumeration for testing
- */
- public enum TestEnum {
- one, two, three
- }
-
- /**
- * Test getting enums from value map
- */
- public void testEnum()
- {
- String name = "name";
-
- TestEnum fetch = TestEnum.valueOf("one");
- assertEquals(fetch, TestEnum.one);
-
- ValueMap vm = new ValueMap();
- vm.put(name, "one");
-
- // test get
- TestEnum test = vm.getAsEnum(name, TestEnum.class, TestEnum.three);
- assertEquals(test, TestEnum.one);
-
- // test get alternate
- test = vm.getAsEnum(name, TestEnum.three);
- assertEquals(test, TestEnum.one);
-
- // test get alternate null
- try {
- vm.getAsEnum(name, (TestEnum) null);
- fail("Should have thrown an exception");
- }
- catch (IllegalArgumentException ignored)
- {
-
- }
-
- // test get if nothing there
- test = vm.getAsEnum("missing", TestEnum.class, TestEnum.two);
- assertEquals(test, TestEnum.two);
-
- test = vm.getAsEnum("missing", TestEnum.class, null);
- assertEquals(test, null);
-
- test = vm.getAsEnum("missing", TestEnum.class);
- assertEquals(test, null);
-
- // test get if value doesn't match enum
- vm.put(name, "bogus");
- test = vm.getAsEnum(name, TestEnum.class, TestEnum.one);
- assertEquals(test, TestEnum.one);
- }
-
- /**
- * test other getAs methods
- */
- public void testGetAs()
- {
- ValueMap vm = new ValueMap();
-
- Boolean booleanValue = true;
- Integer integerValue = 42;
- Long longValue = integerValue * 1L;
- Double doubleValue = integerValue * 1.0D;
- Time timeValue = Time.milliseconds(System.currentTimeMillis());
- Duration durationValue = Duration.hours(1);
-
- boolean defBoolean = !booleanValue;
- int defInteger = 10101;
- long defLong = defInteger * 1L;
- double defDouble = defInteger * 1.0D;
- Time defTime = Time.milliseconds(System.currentTimeMillis());
- Duration defDuration = Duration.hours(42);
-
- vm.put("num", integerValue.toString());
- vm.put("num.bad", "xxx");
- vm.put("time", timeValue.toString());
- vm.put("time.bad", "xxx");
- vm.put("duration", durationValue.toString());
- vm.put("duration.bad", "xxx");
- vm.put("boolean", booleanValue.toString());
- vm.put("boolean.bad", "xxx");
-
- // boolean
- assertEquals(booleanValue, vm.getAsBoolean("boolean"));
- assertNull(vm.getAsBoolean("boolean.bad"));
- assertEquals(defBoolean, vm.getAsBoolean("boolean.bad", defBoolean));
- assertNull(vm.getAsBoolean("boolean.missing"));
- assertEquals(defBoolean, vm.getAsBoolean("boolean.missing", defBoolean));
-
- // integer
- assertEquals(integerValue, vm.getAsInteger("num"));
- assertNull(vm.getAsInteger("num.bad"));
- assertEquals(defInteger, vm.getAsInteger("num.bad", defInteger));
- assertNull(vm.getAsInteger("num.missing"));
- assertEquals(defInteger, vm.getAsInteger("num.missing", defInteger));
-
- // long
- assertEquals(longValue, vm.getAsLong("num"));
- assertNull(vm.getAsLong("num.bad"));
- assertEquals(defLong, vm.getAsLong("num.bad", defLong));
- assertNull(vm.getAsLong("num.missing"));
- assertEquals(defLong, vm.getAsLong("num.missing", defLong));
-
- // double
- assertEquals(doubleValue, vm.getAsDouble("num"));
- assertNull(vm.getAsDouble("num.bad"));
- assertEquals(defDouble, vm.getAsDouble("num.bad", defDouble));
- assertNull(vm.getAsDouble("num.missing"));
- assertEquals(defDouble, vm.getAsDouble("num.missing", defDouble));
-
- // time
- assertEquals(timeValue.toString(), vm.getAsTime("time").toString()); // use toSTring since equals seems broken
- assertNull(vm.getAsTime("time.bad"));
- assertEquals(defTime, vm.getAsTime("time.bad", defTime));
- assertNull(vm.getAsTime("time.missing"));
- assertEquals(defTime, vm.getAsTime("time.missing", defTime));
-
- // duration
- assertEquals(durationValue, vm.getAsDuration("duration"));
- assertNull(vm.getAsDuration("duration.bad"));
- assertEquals(defDuration, vm.getAsDuration("duration.bad", defDuration));
- assertNull(vm.getAsDuration("duration.missing"));
- assertEquals(defDuration, vm.getAsDuration("duration.missing", defDuration));
- }
+ /**
+ * Enumeration for testing
+ */
+ public enum TestEnum {
+ one, two, three
+ }
+
+ /**
+ * Test getting enums from value map
+ */
+ public void testEnum()
+ {
+ String name = "name";
+
+ TestEnum fetch = TestEnum.valueOf("one");
+ assertEquals(fetch, TestEnum.one);
+
+ ValueMap vm = new ValueMap();
+ vm.put(name, "one");
+
+ // test get
+ TestEnum test = vm.getAsEnum(name, TestEnum.class, TestEnum.three);
+ assertEquals(test, TestEnum.one);
+
+ // test get alternate
+ test = vm.getAsEnum(name, TestEnum.three);
+ assertEquals(test, TestEnum.one);
+
+ // test get alternate null
+ try
+ {
+ vm.getAsEnum(name, (TestEnum)null);
+ fail("Should have thrown an exception");
+ }
+ catch (IllegalArgumentException ignored)
+ {
+
+ }
+
+ // test get if nothing there
+ test = vm.getAsEnum("missing", TestEnum.class, TestEnum.two);
+ assertEquals(test, TestEnum.two);
+
+ test = vm.getAsEnum("missing", TestEnum.class, null);
+ assertEquals(test, null);
+
+ test = vm.getAsEnum("missing", TestEnum.class);
+ assertEquals(test, null);
+
+ // test get if value doesn't match enum
+ vm.put(name, "bogus");
+ test = vm.getAsEnum(name, TestEnum.class, TestEnum.one);
+ assertEquals(test, TestEnum.one);
+ }
+
+ /**
+ * test other getAs methods
+ */
+ public void testGetAs()
+ {
+ ValueMap vm = new ValueMap();
+
+ Boolean booleanValue = true;
+ Integer integerValue = 42;
+ Long longValue = integerValue * 1L;
+ Double doubleValue = integerValue * 1.0D;
+ Time timeValue = Time.milliseconds(System.currentTimeMillis());
+ Duration durationValue = Duration.hours(1);
+
+ boolean defBoolean = !booleanValue;
+ int defInteger = 10101;
+ long defLong = defInteger * 1L;
+ double defDouble = defInteger * 1.0D;
+ Time defTime = Time.milliseconds(System.currentTimeMillis());
+ Duration defDuration = Duration.hours(42);
+
+ vm.put("num", integerValue.toString());
+ vm.put("num.bad", "xxx");
+ vm.put("time", timeValue.toString());
+ vm.put("time.bad", "xxx");
+ vm.put("duration", durationValue.toString());
+ vm.put("duration.bad", "xxx");
+ vm.put("boolean", booleanValue.toString());
+ vm.put("boolean.bad", "xxx");
+
+ // boolean
+ assertEquals(booleanValue, vm.getAsBoolean("boolean"));
+ assertNull(vm.getAsBoolean("boolean.bad"));
+ assertEquals(defBoolean, vm.getAsBoolean("boolean.bad", defBoolean));
+ assertNull(vm.getAsBoolean("boolean.missing"));
+ assertEquals(defBoolean, vm.getAsBoolean("boolean.missing", defBoolean));
+
+ // integer
+ assertEquals(integerValue, vm.getAsInteger("num"));
+ assertNull(vm.getAsInteger("num.bad"));
+ assertEquals(defInteger, vm.getAsInteger("num.bad", defInteger));
+ assertNull(vm.getAsInteger("num.missing"));
+ assertEquals(defInteger, vm.getAsInteger("num.missing", defInteger));
+
+ // long
+ assertEquals(longValue, vm.getAsLong("num"));
+ assertNull(vm.getAsLong("num.bad"));
+ assertEquals(defLong, vm.getAsLong("num.bad", defLong));
+ assertNull(vm.getAsLong("num.missing"));
+ assertEquals(defLong, vm.getAsLong("num.missing", defLong));
+
+ // double
+ assertEquals(doubleValue, vm.getAsDouble("num"));
+ assertNull(vm.getAsDouble("num.bad"));
+ assertEquals(defDouble, vm.getAsDouble("num.bad", defDouble));
+ assertNull(vm.getAsDouble("num.missing"));
+ assertEquals(defDouble, vm.getAsDouble("num.missing", defDouble));
+
+ // time
+ assertEquals(timeValue.toString(), vm.getAsTime("time").toString()); // use toSTring since
+ // equals seems
+ // broken
+ assertNull(vm.getAsTime("time.bad"));
+ assertEquals(defTime, vm.getAsTime("time.bad", defTime));
+ assertNull(vm.getAsTime("time.missing"));
+ assertEquals(defTime, vm.getAsTime("time.missing", defTime));
+
+ // duration
+ assertEquals(durationValue, vm.getAsDuration("duration"));
+ assertNull(vm.getAsDuration("duration.bad"));
+ assertEquals(defDuration, vm.getAsDuration("duration.bad", defDuration));
+ assertNull(vm.getAsDuration("duration.missing"));
+ assertEquals(defDuration, vm.getAsDuration("duration.missing", defDuration));
+ }
/**
* Make sure that ValueMap is serializable.
@@ -242,4 +245,17 @@
SerializableChecker checker = new SerializableChecker(new NotSerializableException());
checker.writeObject(new ValueMap());
}
+
+ /**
+ *
+ */
+ public void testArray2()
+ {
+ ValueMap parameters = new ValueMap("a=1,a=2,a=3");
+ String[] a = parameters.getStringArray("a");
+ assertEquals(3, a.length);
+ assertEquals("1", a[0]);
+ assertEquals("2", a[1]);
+ assertEquals("3", a[2]);
+ }
}