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