Updated Branches:
  refs/heads/master 6f9efd41b -> 1ac055336

WICKET-4775: keep multiple named values and absent indexed values


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1ac05533
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1ac05533
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1ac05533

Branch: refs/heads/master
Commit: 1ac055336de5924d7df2b8106f3091df676a9df3
Parents: 6f9efd4
Author: Emond Papegaaij <[email protected]>
Authored: Fri Sep 21 21:59:29 2012 +0200
Committer: Emond Papegaaij <[email protected]>
Committed: Fri Sep 21 21:59:29 2012 +0200

----------------------------------------------------------------------
 .../request/mapper/parameter/PageParameters.java   |   15 ++++++-
 .../mapper/parameter/PageParametersTest.java       |   30 +++++++++++++++
 2 files changed, 43 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac05533/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
----------------------------------------------------------------------
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
index 5c5391f..956ea75 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
@@ -456,9 +456,20 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                if (this != other)
                {
                        for (int index = 0; index < other.getIndexedCount(); 
index++)
-                               set(index, other.get(index));
+                       {
+                               if (!other.get(index).isNull())
+                               {
+                                       set(index, other.get(index));
+                               }
+                       }
+                       for (String name : other.getNamedKeys())
+                       {
+                               remove(name);
+                       }
                        for (NamedPair curNamed : other.getAllNamed())
-                               set(curNamed.getKey(), curNamed.getValue());
+                       {
+                               add(curNamed.getKey(), curNamed.getValue());
+                       }
                }
                return this;
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac05533/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
 
b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
index 528ff0c..71fcb4c 100644
--- 
a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
+++ 
b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java
@@ -142,4 +142,34 @@ public class PageParametersTest extends Assert
                parameters.remove("named1", "value1");
                assertEquals("value2", parameters.get("named1").toString());
        }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-4775
+        * 
+        * Merge PageParameters, also when other has multiple values for the 
same name
+        */
+       @Test
+       public void mergeParameters()
+       {
+               PageParameters left = new PageParameters().add("left", "left")
+                       .add("both", "both1")
+                       .add("both", "both2")
+                       .set(0, "val0")
+                       .set(1, "val1");
+               PageParameters right = new PageParameters().add("right", 
"right")
+                       .add("both", "both1-r")
+                       .add("both", "both2-r")
+                       .set(1, "val1-r")
+                       .set(2, "val2");
+               left.mergeWith(right);
+
+               assertEquals("val0", left.get(0).toString());
+               assertEquals("val1-r", left.get(1).toString());
+               assertEquals("val2", left.get(2).toString());
+               assertEquals("left", left.get("left").toString());
+               assertEquals("right", left.get("right").toString());
+               assertEquals(2, left.getValues("both").size());
+               assertEquals("both1-r", 
left.getValues("both").get(0).toString());
+               assertEquals("both2-r", 
left.getValues("both").get(1).toString());
+       }
 }

Reply via email to