Repository: wicket
Updated Branches:
  refs/heads/master 5e49b1669 -> 860668521


WICKET-5964 Queuing a component within an enclosure


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

Branch: refs/heads/master
Commit: 860668521f1d250038cd233d5dfe63c740e1fc19
Parents: 5e49b16
Author: Andrea Del Bene <[email protected]>
Authored: Wed Aug 12 14:30:26 2015 +0200
Committer: Andrea Del Bene <[email protected]>
Committed: Wed Aug 12 14:31:00 2015 +0200

----------------------------------------------------------------------
 .../wicket/markup/html/internal/Enclosure.java  | 46 +++++++++++++++++++-
 ...eueingTransparentWebMarkupContainerTest.java |  5 +++
 .../TransparentContainerQueuePage.html          |  8 ++--
 3 files changed, 55 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
index 49d55c3..882a3ba 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
@@ -16,12 +16,17 @@
  */
 package org.apache.wicket.markup.html.internal;
 
+import java.util.Iterator;
+
 import org.apache.wicket.Component;
+import org.apache.wicket.DequeueContext;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.EnclosureContainer;
 import org.apache.wicket.markup.parser.filter.EnclosureHandler;
@@ -125,7 +130,7 @@ public class Enclosure extends WebMarkupContainer 
implements IComponentResolver
                if (childComponent == null)
                {
                        // try to find child when queued
-                       childComponent = get(childId);
+                       childComponent = resolveChild(this);
                }
                if (childComponent == null)
                {
@@ -134,6 +139,33 @@ public class Enclosure extends WebMarkupContainer 
implements IComponentResolver
                }
                return childComponent;
        }
+       
+       /**
+        * Searches for the controlling child component looking also 
+        * through transparent components.
+        * 
+        * @param container
+        *                      the current container
+        * @return the controlling child component, null if no one is found 
+        */
+       private Component resolveChild(MarkupContainer container)
+       {
+               Component childController = container.get(childId);
+               
+               Iterator<Component> children = container.iterator();
+               
+               while (children.hasNext() && childController == null)
+               {
+                       Component transparentChild = children.next();
+                       
+                       if(transparentChild instanceof 
TransparentWebMarkupContainer)
+                       {
+                               childController = 
resolveChild((MarkupContainer)transparentChild);
+                       }
+               }
+               
+               return childController;
+       }
 
        @Override
        public boolean isVisible()
@@ -274,4 +306,16 @@ public class Enclosure extends WebMarkupContainer 
implements IComponentResolver
                                "Programming error: childComponent == enclose 
component; endless loop");
                }
        }
+       
+       @Override
+       public DequeueContext newDequeueContext()
+       {
+               IMarkupFragment markup = 
getMarkupSourcingStrategy().getMarkup(this, null);
+               if (markup == null)
+               {
+                       return null;
+               }
+
+               return new DequeueContext(markup, this, true);
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/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 d1a3d08..6ac7d4a 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
@@ -45,6 +45,11 @@ public class DequeueingTransparentWebMarkupContainerTest 
extends WicketTestCase
         * 
         * Transparent component inside page body must allow 
         * queued children components.
+        * 
+        * 
+        * https://issues.apache.org/jira/browse/WICKET-5964
+        * 
+        * Queuing a component within an enclosure
         */
        @Test
        public void queuedComponentsInsideTransparentContainer()

http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/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
index 06e8f3f..ce963d9 100644
--- 
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
@@ -5,8 +5,10 @@
 <title>Insert title here</title>
 </head>
 <body>
-    <a href="ref/transparentContainer.html">
-        <span wicket:id="queuedComponent"></span>
-    </a>
+    <wicket:enclosure child="queuedComponent">
+           <a href="ref/transparentContainer.html">
+               <span wicket:id="queuedComponent"></span>
+           </a>
+    </wicket:enclosure>
 </body>
 </html>
\ No newline at end of file

Reply via email to