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]);
+	}
 }