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 2012/01/11 13:55:49 UTC

[2/4] git commit: WICKET-4330 Non standard ("wicket") namespace causes incorrect relative URL in certain cases

WICKET-4330
Non standard ("wicket") namespace causes incorrect relative URL in certain cases

Consolidate the resolving of the markup namespace in all IMarkupFilter impls which need it.


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

Branch: refs/heads/master
Commit: 7f40ec1ce9092e8620454d53c243c7d75cf812ce
Parents: 3ad3d32
Author: martin-g <mg...@apache.org>
Authored: Wed Jan 11 14:55:28 2012 +0200
Committer: martin-g <mg...@apache.org>
Committed: Wed Jan 11 14:55:28 2012 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/markup/MarkupParser.java     |    2 +-
 .../wicket/markup/parser/AbstractMarkupFilter.java |   32 ++++++++++
 .../parser/filter/RelativePathPrefixHandler.java   |   18 +-----
 .../parser/filter/WicketMessageTagHandler.java     |   46 ++++++++++++---
 .../parser/filter/WicketNamespaceHandler.java      |    7 +--
 .../markup/parser/filter/WicketTagIdentifier.java  |    7 +--
 .../markup/resolver/WicketMessageResolver.java     |    1 -
 .../markup/html/link/HrefExpectedResult_2.html     |    4 +-
 8 files changed, 78 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
index 429e0d1..904426d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
@@ -156,7 +156,7 @@ public class MarkupParser extends AbstractMarkupParser
 			final ContainerInfo containerInfo = markupResourceStream.getContainerInfo();
 			if (containerInfo != null)
 			{
-				filters.add(new WicketMessageTagHandler());
+				filters.add(new WicketMessageTagHandler(markupResourceStream));
 
 				// Pages require additional handlers
 				if (Page.class.isAssignableFrom(containerInfo.getContainerClass()))

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
index 4de962c..27779c5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
@@ -22,6 +22,8 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.HtmlSpecialTag;
 import org.apache.wicket.markup.Markup;
 import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.MarkupParser;
+import org.apache.wicket.markup.MarkupResourceStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,6 +39,9 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(AbstractMarkupFilter.class);
 
+	/** The markup created by reading the markup file */
+	private final MarkupResourceStream markupResourceStream;
+
 	/** The next MarkupFilter in the chain */
 	private IMarkupFilter parent;
 
@@ -45,8 +50,15 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
 	 */
 	public AbstractMarkupFilter()
 	{
+		this(null);
+	}
+
+	public AbstractMarkupFilter(final MarkupResourceStream markupResourceStream)
+	{
+		this.markupResourceStream = markupResourceStream;
 	}
 
+
 	/**
 	 * @return The next MarkupFilter in the chain
 	 */
@@ -144,4 +156,24 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
 	public void postProcess(final Markup markup)
 	{
 	}
+
+	protected MarkupResourceStream getMarkupResourceStream() {
+		return markupResourceStream;
+	}
+
+	/**
+	 * @return the namespace of the loaded markup
+	 */
+	protected String getWicketNamespace()
+	{
+		String wicketNamespace;
+		if (markupResourceStream != null)
+		{
+			wicketNamespace = markupResourceStream.getWicketNamespace();
+		}
+		else {
+			wicketNamespace = MarkupParser.WICKET;
+		}
+		return wicketNamespace;
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
index 47f9f89..4b5f095 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
@@ -97,9 +97,6 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
 		}
 	};
 
-	/** The markup created by reading the markup file */
-	private final MarkupResourceStream markup;
-
 	/**
 	 * Constructor for the IComponentResolver role.
 	 */
@@ -115,7 +112,7 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
 	 */
 	public RelativePathPrefixHandler(final MarkupResourceStream markup)
 	{
-		this.markup = markup;
+		super(markup);
 	}
 
 	@Override
@@ -173,17 +170,4 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
 		}
 		return null;
 	}
-
-	private String getWicketNamespace()
-	{
-		String wicketNamespace;
-		if (markup != null)
-		{
-			wicketNamespace = markup.getWicketNamespace();
-		}
-		else {
-			wicketNamespace = MarkupParser.WICKET;
-		}
-		return wicketNamespace;
-	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
index 97852a5..2d67f51 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
@@ -24,6 +24,8 @@ import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.MarkupParser;
+import org.apache.wicket.markup.MarkupResourceStream;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.html.WebComponent;
@@ -50,22 +52,32 @@ public final class WicketMessageTagHandler extends AbstractMarkupFilter
 	/** */
 	private static final long serialVersionUID = 1L;
 
-	/** TODO Post 1.2: General: Namespace should not be a constant */
-	private final static String WICKET_MESSAGE_ATTRIBUTE_NAME = "wicket:message";
-
 	/**
 	 * The id automatically assigned to tags with wicket:message attribute but without id
 	 */
 	public final static String WICKET_MESSAGE_CONTAINER_ID = "_message_attr_";
 
-	/** singleton instance of {@link AttributeLocalizer} */
+	/**
+	 * singleton instance of {@link AttributeLocalizer}
+	 * @deprecated Do not use it because it is not aware of the markup namespace
+	 */
+	@Deprecated
 	public static final Behavior ATTRIBUTE_LOCALIZER = new AttributeLocalizer();
 
 	/**
-	 * Construct.
+	 * Constructor for the IComponentResolver role.
 	 */
 	public WicketMessageTagHandler()
 	{
+		this(null);
+	}
+
+	/**
+	 * Constructor for the IMarkupFilter role.
+	 */
+	public WicketMessageTagHandler(final MarkupResourceStream markupResourceStream)
+	{
+		super(markupResourceStream);
 	}
 
 	@Override
@@ -77,7 +89,7 @@ public final class WicketMessageTagHandler extends AbstractMarkupFilter
 		}
 
 		final String wicketMessageAttribute = tag.getAttributes().getString(
-			WICKET_MESSAGE_ATTRIBUTE_NAME);
+			getWicketMessageAttrName());
 
 		if ((wicketMessageAttribute != null) && (wicketMessageAttribute.trim().length() > 0))
 		{
@@ -91,7 +103,7 @@ public final class WicketMessageTagHandler extends AbstractMarkupFilter
 				tag.setAutoComponentTag(true);
 				tag.setModified(true);
 			}
-			tag.addBehavior(new AttributeLocalizer());
+			tag.addBehavior(new AttributeLocalizer(getWicketMessageAttrName()));
 		}
 
 		return tag;
@@ -107,10 +119,22 @@ public final class WicketMessageTagHandler extends AbstractMarkupFilter
 	{
 		private static final long serialVersionUID = 1L;
 
+		private final String wicketMessageAttrName;
+
+		public AttributeLocalizer()
+		{
+			this(MarkupParser.WICKET+':'+"message");
+		}
+
+		public AttributeLocalizer(String wicketMessageAttrName)
+		{
+			this.wicketMessageAttrName = wicketMessageAttrName;
+		}
+		
 		@Override
 		public void onComponentTag(final Component component, final ComponentTag tag)
 		{
-			String expr = tag.getAttributes().getString(WICKET_MESSAGE_ATTRIBUTE_NAME);
+			String expr = tag.getAttributes().getString(wicketMessageAttrName);
 			if (!Strings.isEmpty(expr))
 			{
 				expr = expr.trim();
@@ -171,4 +195,10 @@ public final class WicketMessageTagHandler extends AbstractMarkupFilter
 		}
 		return null;
 	}
+	
+	private String getWicketMessageAttrName()
+	{
+		String wicketNamespace = getWicketNamespace();
+		return wicketNamespace + ':' + "message";
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketNamespaceHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketNamespaceHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketNamespaceHandler.java
index 8bf33b7..2f60fa7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketNamespaceHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketNamespaceHandler.java
@@ -40,9 +40,6 @@ public final class WicketNamespaceHandler extends AbstractMarkupFilter
 	/** Wicket URI */
 	private static final String WICKET_URI = "http://wicket.apache.org";
 
-	/** The markup created by reading the markup file */
-	private final MarkupResourceStream markup;
-
 	/**
 	 * namespace prefix: e.g. <html xmlns:wicket="http://wicket.apache.org">
 	 */
@@ -56,7 +53,7 @@ public final class WicketNamespaceHandler extends AbstractMarkupFilter
 	 */
 	public WicketNamespaceHandler(final MarkupResourceStream markup)
 	{
-		this.markup = markup;
+		super(markup);
 	}
 
 	@Override
@@ -67,7 +64,7 @@ public final class WicketNamespaceHandler extends AbstractMarkupFilter
 			final String namespace = determineWicketNamespace(tag);
 			if (namespace != null)
 			{
-				markup.setWicketNamespace(namespace);
+				getMarkupResourceStream().setWicketNamespace(namespace);
 			}
 		}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
index b28fd24..45b7ab9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
@@ -45,9 +45,6 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
 	/** List of well known wicket tag names */
 	private static List<String> wellKnownTagNames;
 
-	/** The current markup needed to get the markups namespace */
-	private final MarkupResourceStream markup;
-
 	/**
 	 * Construct.
 	 * 
@@ -56,7 +53,7 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
 	 */
 	public WicketTagIdentifier(final MarkupResourceStream markup)
 	{
-		this.markup = markup;
+		super(markup);
 	}
 
 	/**
@@ -73,7 +70,7 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
 	@Override
 	protected MarkupElement onComponentTag(ComponentTag tag) throws ParseException
 	{
-		final String namespace = markup.getWicketNamespace();
+		final String namespace = getWicketNamespace();
 
 		// If the form <tag wicket:id = "value"> is used
 		final String wicketIdValue = tag.getAttributes().getString(namespace + ":id");

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
index 6a3757a..5bd614c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
@@ -169,7 +169,6 @@ public class WicketMessageResolver implements IComponentResolver
 		 * 
 		 * @param id
 		 * @param messageKey
-		 * @param markupFragment
 		 */
 		public MessageContainer(final String id, final String messageKey)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f40ec1c/wicket-core/src/test/java/org/apache/wicket/markup/html/link/HrefExpectedResult_2.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/HrefExpectedResult_2.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/HrefExpectedResult_2.html
index 74c04b2..a1cac60 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/HrefExpectedResult_2.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/HrefExpectedResult_2.html
@@ -14,7 +14,7 @@
 -->
 <html>
 <body>
-  <a href="../../myHref.html"></a>
-  <a href="../../myHref.html"/>
+  <a href="myHref.html"></a>
+  <a href="myHref.html"></a>
 </body>
 </html>