Repository: wicket
Updated Branches:
  refs/heads/master 3f1e1dfe3 -> b92591f64


WICKET-5724 Queueing component in autocomponent

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

Branch: refs/heads/master
Commit: b92591f6496c15bf5615765539017ad702c67a43
Parents: 3f1e1df
Author: adelbene <[email protected]>
Authored: Mon Oct 13 20:07:01 2014 +0200
Committer: adelbene <[email protected]>
Committed: Mon Oct 13 20:07:01 2014 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/MarkupContainer.java |  2 +-
 .../org/apache/wicket/markup/ComponentTag.java  |  3 +-
 .../markup/parser/filter/EnclosureHandler.java  |  2 +-
 .../parser/filter/HtmlHeaderSectionHandler.java |  4 +-
 .../parser/filter/InlineEnclosureHandler.java   |  2 +-
 .../filter/RelativePathPrefixHandler.java       | 69 +++++++++++++++++---
 .../markup/resolver/IComponentResolver.java     |  2 +
 ...eueingTransparentWebMarkupContainerTest.java | 48 ++++++++++++--
 .../TransparentContainerQueuePage.html          | 12 ++++
 .../TransparentContainerQueuePage.java          | 32 +++++++++
 10 files changed, 155 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java 
b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index b607b4e..1ec4f02 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -1535,7 +1535,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                                ComponentTag.IAutoComponentFactory 
autoComponentFactory = tag.getAutoComponentFactory();
                                if (autoComponentFactory != null)
                                {
-                                       
queue(autoComponentFactory.newComponent(tag));
+                                       
queue(autoComponentFactory.newComponent(this, tag));
                                }
                        }
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
index b572677..bffde4e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.parser.XmlTag;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
@@ -65,7 +66,7 @@ public class ComponentTag extends MarkupElement
                /**
                 * Creates a new instance of auto component to be queued
                 */
-               Component newComponent(ComponentTag tag);
+               Component newComponent(MarkupContainer container, ComponentTag 
tag);
        }
 
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
index 4a47f38..098533c 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
@@ -56,7 +56,7 @@ public final class EnclosureHandler extends 
AbstractMarkupFilter implements ICom
        private static final IAutoComponentFactory FACTORY = new 
IAutoComponentFactory()
        {
                @Override
-               public Component newComponent(ComponentTag tag)
+               public Component newComponent(MarkupContainer container, 
ComponentTag tag)
                {
                        return new Enclosure(tag.getId(), tag
                                
.getAttribute(EnclosureHandler.CHILD_ATTRIBUTE));

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
index 0f85964..6d08c95 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
@@ -49,8 +49,8 @@ import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
  */
 public final class HtmlHeaderSectionHandler extends AbstractMarkupFilter
 {
-       private static final String BODY = "body";
-       private static final String HEAD = "head";
+       public static final String BODY = "body";
+       public static final String HEAD = "head";
 
        /** The automatically assigned wicket:id to &gt;head&lt; tag */
        public static final String HEADER_ID = "_header_";

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/InlineEnclosureHandler.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/InlineEnclosureHandler.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/InlineEnclosureHandler.java
index e3c953a..0014b92 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/InlineEnclosureHandler.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/InlineEnclosureHandler.java
@@ -127,7 +127,7 @@ public final class InlineEnclosureHandler extends 
AbstractMarkupFilter
                                        tag.setAutoComponentFactory(new 
ComponentTag.IAutoComponentFactory()
                                        {
                                                @Override
-                                               public Component 
newComponent(ComponentTag tag)
+                                               public Component 
newComponent(MarkupContainer container, ComponentTag tag)
                                                {
                                                        String attributeName = 
getInlineEnclosureAttributeName(null);
                                                        String childId = 
tag.getAttribute(attributeName);

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/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 0ae97ee..79edb52 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
@@ -86,8 +86,8 @@ public final class RelativePathPrefixHandler extends 
AbstractMarkupFilter
                        {
                                String attrValue = 
tag.getAttributes().getString(attrName);
 
-                               if ((attrValue != null) && 
(attrValue.startsWith("/") == false) &&
-                                       (!attrValue.contains(":")) && 
!(attrValue.startsWith("#")))
+                               if ((attrValue != null) && 
(attrValue.startsWith("/") == false)
+                                       && (!attrValue.contains(":")) && 
!(attrValue.startsWith("#")))
                                {
                                        tag.getAttributes().put(attrName,
                                                
UrlUtils.rewriteToContextRelative(attrValue, RequestCycle.get()));
@@ -95,6 +95,14 @@ public final class RelativePathPrefixHandler extends 
AbstractMarkupFilter
                        }
                }
        };
+       
+       /** 
+        * https://issues.apache.org/jira/browse/WICKET-5724
+        * 
+        * Says if we are inside an head tag or wicket:head tag. 
+        * 
+        * */
+       private boolean insideHead;
 
        /**
         * Constructor for the IComponentResolver role.
@@ -106,8 +114,9 @@ public final class RelativePathPrefixHandler extends 
AbstractMarkupFilter
 
        /**
         * Constructor for the IMarkupFilter role
+        * 
         * @param markup
-        *      The markup created by reading the markup file
+        *            The markup created by reading the markup file
         */
        public RelativePathPrefixHandler(final MarkupResourceStream markup)
        {
@@ -119,30 +128,62 @@ public final class RelativePathPrefixHandler extends 
AbstractMarkupFilter
        {
                if (tag.isClose())
                {
+                       if (isHeadTag(tag))     
+                       {
+                               //outside head tag
+                               insideHead = false;
+                       }
+                       
                        return tag;
                }
 
+               if (isHeadTag(tag))     
+               {
+                       //inside head tag
+                       insideHead = true;
+               }
+
                String wicketIdAttr = getWicketNamespace() + ":" + "id";
 
                // Don't touch any wicket:id component and any auto-components
-               if ((tag instanceof WicketTag) || (tag.isAutolinkEnabled() == 
true) ||
-                       (tag.getAttributes().get(wicketIdAttr) != null))
+               if ((tag instanceof WicketTag) || (tag.isAutolinkEnabled() == 
true)
+                       || (tag.getAttributes().get(wicketIdAttr) != null))
                {
                        return tag;
                }
-
+               
                // Work out whether we have any attributes that require us to 
add a
                // behavior that prepends the relative path.
                for (String attrName : attributeNames)
                {
                        String attrValue = 
tag.getAttributes().getString(attrName);
-                       if ((attrValue != null) && (attrValue.startsWith("/") 
== false) &&
-                               (!attrValue.contains(":")) && 
!(attrValue.startsWith("#")))
+                       if ((attrValue != null) && (attrValue.startsWith("/") 
== false)
+                               && (!attrValue.contains(":")) && 
!(attrValue.startsWith("#")))
                        {
                                if (tag.getId() == null)
                                {
                                        
tag.setId(getWicketRelativePathPrefix(null));
                                        tag.setAutoComponentTag(true);
+                                       
+                                       /**
+                                        * 
https://issues.apache.org/jira/browse/WICKET-5724
+                                        * Transparent component inside page 
body must allow 
+                                        * queued children components.
+                                        */
+                                       if(!insideHead)
+                                       {
+                                               tag.setAutoComponentFactory(new 
ComponentTag.IAutoComponentFactory()
+                                               {
+                                                       @Override
+                                                       public Component 
newComponent(MarkupContainer container, ComponentTag tag)
+                                                       {
+                                                               String id = 
tag.getId() + container.getPage().getAutoIndex();
+                                                               tag.setId(id);
+       
+                                                               return new 
TransparentWebMarkupContainer(id);
+                                                       }
+                                               });     
+                                       }
                                }
                                tag.addBehavior(RELATIVE_PATH_BEHAVIOR);
                                tag.setModified(true);
@@ -152,7 +193,17 @@ public final class RelativePathPrefixHandler extends 
AbstractMarkupFilter
 
                return tag;
        }
-
+       
+       private boolean isHeadTag(ComponentTag tag)
+       {
+               if 
(HtmlHeaderSectionHandler.HEAD.equalsIgnoreCase(tag.getName()))
+               {
+                       return true;
+               }       
+               
+               return false;
+       }
+       
        @Override
        public Component resolve(final MarkupContainer container, final 
MarkupStream markupStream,
                final ComponentTag tag)

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
index b8d1588..9e83b71 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
@@ -28,6 +28,8 @@ import org.apache.wicket.util.io.IClusterable;
  * are first looked up in a component's hierarchy before falling back to a 
list of
  * IComponentResolvers maintained in {@link PageSettings}.
  * 
+ * NOTE: implementations for this interface must be thread-safe!
+ * 
  * @see ComponentResolvers
  * 
  * @author Juergen Donnerstag

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
index 4320aa0..7cc8e1d 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java
@@ -16,20 +16,56 @@
  */
 package org.apache.wicket.queueing.transparentresolvers;
 
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.junit.Test;
 
-/**
- * Test case for:
- *  - https://issues.apache.org/jira/browse/WICKET-5572
- *  - https://issues.apache.org/jira/browse/WICKET-5722
- */
 public class DequeueingTransparentWebMarkupContainerTest extends WicketTestCase
 {
+       /**
+        * Test case for:
+        *  - https://issues.apache.org/jira/browse/WICKET-5572
+        *  - https://issues.apache.org/jira/browse/WICKET-5722
+        */
        @Test
-       public void startSubPageWithTWMCinTheParentPage() {
+       public void startSubPageWithTWMCinTheParentPage() 
+       {
                tester.startPage(SubPage.class);
                tester.assertRenderedPage(SubPage.class);
                tester.assertComponent("html", HtmlTag.class);
        }
+       
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-5724
+        * 
+        * Transparent component inside page body must allow 
+        * queued children components.
+        */
+       @Test
+       public void queuedComponentsInsideTransparentContainer()
+       {
+               tester.startPage(TransparentContainerQueuePage.class);
+               tester.assertRenderedPage(TransparentContainerQueuePage.class);
+               
+               Page lastRenderedPage = tester.getLastRenderedPage();
+               
+               //test if page contains the queued label
+               boolean containsQueuedLabel = 
lastRenderedPage.visitChildren(new IVisitor<Component, Boolean>()
+               {
+                       @Override
+                       public void component(Component component, 
IVisit<Boolean> visit)
+                       {
+                               if(component instanceof Label)
+                               {
+                                       visit.stop(true);
+                               }
+                       }
+               });
+               
+               assertTrue(containsQueuedLabel);
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
new file mode 100644
index 0000000..06e8f3f
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+    <a href="ref/transparentContainer.html">
+        <span wicket:id="queuedComponent"></span>
+    </a>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/b92591f6/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
new file mode 100644
index 0000000..ba2c2d8
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.queueing.transparentresolvers;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class TransparentContainerQueuePage extends WebPage
+{
+
+       public TransparentContainerQueuePage(PageParameters parameters)
+       {
+               super(parameters);
+               queue(new Label("queuedComponent", "Queued label."));
+       }
+       
+}

Reply via email to