Author: mgrigorov
Date: Mon Jul 18 09:24:58 2011
New Revision: 1147797

URL: http://svn.apache.org/viewvc?rev=1147797&view=rev
Log:
WICKET-3906 PageParameters#set not follow INamedParameters#set behavior


Modified:
    
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
    
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
    
wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java

Modified: 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java?rev=1147797&r1=1147796&r2=1147797&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
 (original)
+++ 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/INamedParameters.java
 Mon Jul 18 09:24:58 2011
@@ -60,6 +60,15 @@ public interface INamedParameters
        List<NamedPair> getAllNamed();
 
        /**
+        * Returns the position of a named parameter.
+        * 
+        * @param name
+        *            the name of the parameter to look for
+        * @return the position of the parameter. {@code -1} if there is no 
parameter with that name.
+        */
+       int getPosition(String name);
+
+       /**
         * Removes named parameter with given name.
         * 
         * @param name

Modified: 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java?rev=1147797&r1=1147796&r2=1147797&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
 (original)
+++ 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
 Mon Jul 18 09:24:58 2011
@@ -369,6 +369,27 @@ public class PageParameters implements I
        }
 
        /**
+        * @see 
org.apache.wicket.request.mapper.parameter.INamedParameters#getPosition(String)
+        */
+       public int getPosition(final String name)
+       {
+               int index = -1;
+               if (namedParameters != null)
+               {
+                       for (int i = 0; i < namedParameters.size(); i++)
+                       {
+                               Entry entry = namedParameters.get(i);
+                               if (entry.key.equals(name))
+                               {
+                                       index = i;
+                                       break;
+                               }
+                       }
+               }
+               return index;
+       }
+
+       /**
         * @see 
org.apache.wicket.request.mapper.parameter.INamedParameters#remove(java.lang.String)
         */
        public PageParameters remove(final String name)
@@ -429,7 +450,7 @@ public class PageParameters implements I
                        entry.key = name;
                        entry.value = val;
 
-                       if (index < 0)
+                       if (index < 0 || index > namedParameters.size())
                        {
                                namedParameters.add(entry);
                        }

Modified: 
wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java?rev=1147797&r1=1147796&r2=1147797&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
 (original)
+++ 
wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
 Mon Jul 18 09:24:58 2011
@@ -19,12 +19,13 @@ package org.apache.wicket.request.mapper
 import java.util.List;
 
 import org.apache.wicket.util.string.StringValue;
+import org.junit.Assert;
 import org.junit.Test;
 
 /**
  * Tests for {@link PageParameters}
  */
-public class PageParametersTest
+public class PageParametersTest extends Assert
 {
 
        /**
@@ -60,4 +61,28 @@ public class PageParametersTest
                        }
                }
        }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-3906
+        */
+       @Test
+       public void getPosition()
+       {
+               PageParameters parameters = new PageParameters();
+               parameters.set("named1", "value1", 3);
+               assertEquals(
+                       "Adding a parameter at position out of the size of the 
list will just append it", 0,
+                       parameters.getPosition("named1"));
+
+               parameters.set("named2", "value2", 0);
+               assertEquals(0, parameters.getPosition("named2"));
+               assertEquals("'named1' should be moved back", 1, 
parameters.getPosition("named1"));
+
+
+               parameters.set("named3", "value3", -100);
+               assertEquals(0, parameters.getPosition("named2"));
+               assertEquals(1, parameters.getPosition("named1"));
+               assertEquals("Adding a parameter with negative position will 
just append it.", 2,
+                       parameters.getPosition("named3"));
+       }
 }


Reply via email to