You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/08/12 14:31:18 UTC

wicket git commit: WICKET-5964 Queuing a component within an enclosure

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 <ad...@apache.org>
Authored: Wed Aug 12 14:30:26 2015 +0200
Committer: Andrea Del Bene <ad...@apache.org>
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