Updated Branches:
  refs/heads/sandbox/WICKET-4686 7e032d211 -> 15403962c


WICKET-4686 MountMapper does not support correctly parameter placeholders

Remove duplicated code and add javadoc


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

Branch: refs/heads/sandbox/WICKET-4686
Commit: 15403962c9d9afe0dc7c691184c6cb03ff5aae13
Parents: 7e032d2
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Jan 9 16:12:23 2014 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Jan 9 16:12:23 2014 +0200

----------------------------------------------------------------------
 .../mapper/AbstractBookmarkableMapper.java      | 33 ++++++++++++++++++--
 .../core/request/mapper/MountedMapper.java      | 32 ++-----------------
 .../core/request/mapper/PackageMapper.java      |  6 +++-
 3 files changed, 38 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/15403962/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index 94a4b7a..1569468 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@ -655,8 +655,25 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                return ret;
        }
 
-       protected void setPlaceholders(PageParameters parameters, Url url)
+       /**
+        * Replaces mandatory and optional parameters with their values.
+        *
+        * If a mandatory parameter is not provided then the method returns 
{@code false}
+        * indicating that there is a problem.
+        * Optional parameters with missing values are just dropped.
+        *
+        * @param parameters
+        *          The parameters with the values
+        * @param url
+        *          The url with the placeholders
+        * @return
+        *          {@code true} if all mandatory parameters are properly 
substituted,
+        *          {@code false} - otherwise
+        */
+       protected boolean setPlaceholders(PageParameters parameters, Url url)
        {
+               boolean mandatoryParametersSet = true;
+
                int dropped = 0;
                for (int i = 0; i < mountSegments.length; ++i)
                {
@@ -664,8 +681,16 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                        String optionalPlaceholder = 
getOptionalPlaceholder(mountSegments[i]);
                        if (placeholder != null)
                        {
-                               url.getSegments().set(i - dropped, 
parameters.get(placeholder).toString(""));
-                               parameters.remove(placeholder);
+                               if 
(parameters.getNamedKeys().contains(placeholder))
+                               {
+                                       url.getSegments().set(i - dropped, 
parameters.get(placeholder).toString());
+                                       parameters.remove(placeholder);
+                               }
+                               else
+                               {
+                                       mandatoryParametersSet = false;
+                                       break;
+                               }
                        }
                        else if (optionalPlaceholder != null)
                        {
@@ -681,5 +706,7 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                                }
                        }
                }
+
+               return mandatoryParametersSet;
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/15403962/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
index 83e0374..53fb394 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
@@ -216,36 +216,10 @@ public class MountedMapper extends 
AbstractBookmarkableMapper
                encodePageComponentInfo(url, info.getPageComponentInfo());
 
                PageParameters copy = new 
PageParameters(info.getPageParameters());
-//             setPlaceholders(copy, url);
-
-               int dropped = 0;
-               for (int i = 0; i < mountSegments.length; ++i)
+               if (setPlaceholders(copy, url) == false)
                {
-                       String placeholder = getPlaceholder(mountSegments[i]);
-                       String optionalPlaceholder = 
getOptionalPlaceholder(mountSegments[i]);
-                       if (placeholder != null)
-                       {
-                               if (!copy.getNamedKeys().contains(placeholder))
-                               {
-                                       // no value for placeholder - cannot 
mount
-                                       return null;
-                               }
-                               url.getSegments().set(i - dropped, 
copy.get(placeholder).toString(""));
-                               copy.remove(placeholder);
-                       }
-                       else if (optionalPlaceholder != null)
-                       {
-                               if 
(copy.getNamedKeys().contains(optionalPlaceholder))
-                               {
-                                       url.getSegments().set(i - dropped, 
copy.get(optionalPlaceholder).toString(""));
-                                       copy.remove(optionalPlaceholder);
-                               }
-                               else
-                               {
-                                       url.getSegments().remove(i - dropped);
-                                       dropped++;
-                               }
-                       }
+                       // mandatory parameter is not provided => cannot build 
Url
+                       return null;
                }
 
                return encodePageParameters(url, copy, pageParametersEncoder);

http://git-wip-us.apache.org/repos/asf/wicket/blob/15403962/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 2cc3e46..41c6696 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@ -117,7 +117,11 @@ public class PackageMapper extends 
AbstractBookmarkableMapper
                        encodePageComponentInfo(url, 
info.getPageComponentInfo());
 
                        PageParameters copy = new 
PageParameters(info.getPageParameters());
-                       setPlaceholders(copy, url);
+                       if (setPlaceholders(copy, url) == false)
+                       {
+                               // mandatory parameter is not provided => 
cannot build Url
+                               return null;
+                       }
 
                        return encodePageParameters(url, copy, 
pageParametersEncoder);
                }

Reply via email to