Repository: wicket
Updated Branches:
  refs/heads/master 32af2c8cc -> e64f4de91


WICKET-5903 Regression in mount resolution when using optional parameters


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

Branch: refs/heads/master
Commit: e64f4de91a32179c0641ac23b57d556bd12ca5ce
Parents: 32af2c8
Author: Andrea Del Bene <“[email protected]”>
Authored: Mon May 11 17:47:41 2015 +0200
Committer: Andrea Del Bene <“[email protected]”>
Committed: Mon May 11 17:47:41 2015 +0200

----------------------------------------------------------------------
 .../wicket/request/mapper/AbstractMapper.java   | 46 +++++++++++++-------
 1 file changed, 30 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e64f4de9/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
index 83e7810..44c7947 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
@@ -100,29 +100,43 @@ public abstract class AbstractMapper implements 
IRequestMapper
                {
                        return false;
                }
-               else
+
+               List<String> urlSegments = url.getSegments();
+               
+               for (int i = 0; i < segments.length; ++i)
                {
-                       List<String> urlSegments = url.getSegments();
-                       if (urlSegments.size() < segments.length)
+                       if (!segments[i].equals(safeSegmentGetter(urlSegments, 
i , "")) &&
+                               (getPlaceholder(segments[i]) == null && 
+                                getOptionalPlaceholder(segments[i]) == null))
                        {
                                return false;
                        }
-                       else
-                       {
-                               for (int i = 0; i < segments.length; ++i)
-                               {
-                                       if 
((segments[i].equals(urlSegments.get(i)) == false) &&
-                                               (getPlaceholder(segments[i]) == 
null && 
-                                                
getOptionalPlaceholder(segments[i]) == null))
-                                       {
-                                               return false;
-                                       }
-                               }
-                       }
                }
+                       
                return true;
        }
-
+       
+       /**
+        * Utility method to safely get an element from a list of String.
+        * If the specified index is bigger than the size of the list
+        * the default value is returned.
+        * 
+        * @param segments
+        * @param index
+        * @param defaultValue
+        * @return the element at the specified position or the default value 
if the list size is smaller.
+        * 
+        */
+       protected String safeSegmentGetter(List<String> segments, int index, 
String defaultValue)
+       {
+               if (index < segments.size())
+               {
+                       return segments.get(index);
+               }
+               
+               return defaultValue;
+       }
+       
        /**
         * Extracts {@link PageParameters} from the URL using the given {@link 
IPageParametersEncoder} .
         * 

Reply via email to