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