You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/01/10 13:49:28 UTC
[04/10] git commit: WICKET-4686 MountMapper does not support
correctly parameter placeholders
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/master
Commit: 15403962c9d9afe0dc7c691184c6cb03ff5aae13
Parents: 7e032d2
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Jan 9 16:12:23 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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);
}