Updated Branches:
  refs/heads/wicket-1.5.x 52c174a26 -> cf33db490

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/cf33db49
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cf33db49
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cf33db49

Branch: refs/heads/wicket-1.5.x
Commit: cf33db490e40f0b8c891b0571cedcd6b7a0e9a6f
Parents: 3261688
Author: martin-g <[email protected]>
Authored: Wed Jan 11 14:55:28 2012 +0200
Committer: martin-g <[email protected]>
Committed: Wed Jan 11 14:57:36 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/cf33db49/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/cf33db49/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 985cc4a..d06fc75 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
         */
@@ -140,4 +152,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/cf33db49/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 ba7029f..640a9e1 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
@@ -172,17 +169,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/cf33db49/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 c6dfaa0..3f79e24 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();
@@ -170,4 +194,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/cf33db49/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/cf33db49/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/cf33db49/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 fa4122a..ef929fa 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
@@ -168,7 +168,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/cf33db49/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>

Reply via email to