Repository: wicket
Updated Branches:
  refs/heads/master 66730b423 -> ffdd0864c


WICKET-5898 method searchMarkupInTransparentResolversrewritten to use container 
markup fragment


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

Branch: refs/heads/master
Commit: ffdd0864c27a49f7ff1dbb616bf79e3f3b13987c
Parents: 66730b4
Author: Andrea Del Bene <“[email protected]”>
Authored: Thu May 14 18:13:49 2015 +0200
Committer: Andrea Del Bene <“[email protected]”>
Committed: Thu May 14 18:13:49 2015 +0200

----------------------------------------------------------------------
 .../panel/AbstractMarkupSourcingStrategy.java   | 79 +++++++++++---------
 .../panel/AssociatedMarkupSourcingStrategy.java |  2 +-
 .../panel/DefaultMarkupSourcingStrategy.java    | 18 ++---
 .../html/TransparentWebMarkupContainerTest.java |  4 -
 4 files changed, 51 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ffdd0864/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AbstractMarkupSourcingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AbstractMarkupSourcingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AbstractMarkupSourcingStrategy.java
index 27407cf..b49f2f4 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AbstractMarkupSourcingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AbstractMarkupSourcingStrategy.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.html.panel;
 
+import java.util.Iterator;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
@@ -26,8 +28,6 @@ import 
org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.util.lang.Classes;
-import org.apache.wicket.util.visit.IVisit;
-import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * Implements boilerplate as needed by many markup sourcing strategies.
@@ -55,53 +55,58 @@ public abstract class AbstractMarkupSourcingStrategy 
implements IMarkupSourcingS
         * 
         * @param container
         *            the parent container.
+        * @param
+        *                containerMarkup
+        *                        the markup of the container.           
         * @param child
         *            The component to find the markup for.
         * @return the markup fragment for the child, or {@code null}.
         */
-       protected IMarkupFragment searchMarkupInTransparentResolvers(final 
MarkupContainer container,
-               final Component child)
+       protected IMarkupFragment 
searchMarkupInTransparentResolvers(MarkupContainer container,
+               IMarkupFragment containerMarkup, Component child)
        {
-               return container.visitChildren(MarkupContainer.class, new 
IVisitor<MarkupContainer, IMarkupFragment>()
+               IMarkupFragment childMarkupFound = null;
+               Iterator<Component> siblingsIterator = container.iterator();
+               
+               while (siblingsIterator.hasNext() && childMarkupFound == null)
                {
-                       @Override
-                       public void component(MarkupContainer 
resolvingContainer, IVisit<IMarkupFragment> visit)
+                       Component sibling = siblingsIterator.next();
+                       
+                       if(sibling == child || !sibling.isVisible())
                        {
-                               //prevents possible searching loops
-                               if (child == resolvingContainer) 
-                               {
-                                       visit.dontGoDeeper();
-                                       return;
-                               }
+                               continue;
+                       }
+                       
+                       IMarkupFragment siblingMarkup = 
containerMarkup.find(sibling.getId());
+                       
+                       if (siblingMarkup != null && sibling instanceof 
MarkupContainer)
+                       {
+                               IMarkupFragment childMarkup  = 
siblingMarkup.find(child.getId());
                                
-                               if (resolvingContainer instanceof 
IComponentResolver)
+                               if (childMarkup != null && sibling instanceof 
IComponentResolver)
                                {
-                                       visit.dontGoDeeper();
-
-                                       IMarkupFragment childMarkup = 
resolvingContainer.getMarkup(child);
-
-                                       if (childMarkup != null && 
childMarkup.size() > 0)
+                                       IComponentResolver componentResolver = 
(IComponentResolver)sibling;
+                                       MarkupStream stream = new 
MarkupStream(childMarkup);
+                                       ComponentTag tag = stream.getTag();
+                                       
+                                       Component resolvedComponent = 
sibling.get(tag.getId());
+                                       if (resolvedComponent == null)
                                        {
-                                               IComponentResolver 
componentResolver = (IComponentResolver)resolvingContainer;
-
-                                               MarkupStream stream = new 
MarkupStream(childMarkup);
-
-                                               ComponentTag tag = 
stream.getTag();
-
-                                               Component resolvedComponent = 
resolvingContainer.get(tag.getId());
-                                               if (resolvedComponent == null)
-                                               {
-                                                       resolvedComponent = 
componentResolver.resolve(resolvingContainer, stream, tag);
-                                               }
-
-                                               if (child == resolvedComponent)
-                                               {
-                                                       visit.stop(childMarkup);
-                                               }
+                                               resolvedComponent = 
componentResolver.resolve((MarkupContainer)sibling, stream, tag);
+                                       }
+                                       
+                                       if (child == resolvedComponent)
+                                       {
+                                               childMarkupFound = childMarkup;
                                        }
-                               }                               
+                               }
+                               else 
+                               {
+                                       childMarkupFound = 
searchMarkupInTransparentResolvers((MarkupContainer)sibling, siblingMarkup, 
child);
+                               }
                        }
-               });
+               }
+               return childMarkupFound;
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/ffdd0864/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
index 0ac0647..5f547ac 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
@@ -120,7 +120,7 @@ public abstract class AssociatedMarkupSourcingStrategy 
extends AbstractMarkupSou
                        return associatedMarkup;
                }
 
-               associatedMarkup = searchMarkupInTransparentResolvers(parent, 
child);
+               associatedMarkup = searchMarkupInTransparentResolvers(parent, 
markup, child);
                if (associatedMarkup != null)
                {
                        return associatedMarkup;

http://git-wip-us.apache.org/repos/asf/wicket/blob/ffdd0864/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/DefaultMarkupSourcingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/DefaultMarkupSourcingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/DefaultMarkupSourcingStrategy.java
index 6699a68..7506d23 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/DefaultMarkupSourcingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/DefaultMarkupSourcingStrategy.java
@@ -78,26 +78,24 @@ public final class DefaultMarkupSourcingStrategy extends 
AbstractMarkupSourcingS
        {
                // If the sourcing strategy did not provide one, than ask the 
component.
                // Get the markup for the container
-               IMarkupFragment markup = container.getMarkup();
-               if (markup == null)
+               IMarkupFragment containerMarkup = container.getMarkup();
+               if (containerMarkup == null)
                {
                        return null;
                }
 
                if (child == null)
                {
-                       return markup;
+                       return containerMarkup;
                }
-
+               
                // Find the child's markup
-               markup = markup.find(child.getId());
-               if (markup != null)
+               IMarkupFragment childMarkup = 
containerMarkup.find(child.getId());
+               if (childMarkup != null)
                {
-                       return markup;
+                       return childMarkup;
                }
                
-               markup = searchMarkupInTransparentResolvers(container, child);
-               
-               return markup;
+               return searchMarkupInTransparentResolvers(container, 
containerMarkup, child);
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ffdd0864/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java
index 5cc8e46..4905aa9 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java
@@ -31,7 +31,6 @@ import org.apache.wicket.page.IPageManagerContext;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTester;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -177,7 +176,6 @@ public class TransparentWebMarkupContainerTest extends 
WicketTestCase
         * container and trying to update a label that was added to the outer 
TWMC.
         */
        @Test
-       @Ignore("Fails due to WICKET-5898")
        public void 
ajaxRequestForComponentInTransparentWebMarkupContainerShouldntCauseStackOverflow3()
        {
                
tester.startPage(DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.class);
@@ -198,7 +196,6 @@ public class TransparentWebMarkupContainerTest extends 
WicketTestCase
         * the outer TWMC.
         */
        @Test
-       @Ignore("Fails due to WICKET-5898")
        public void 
ajaxRequestForComponentInTransparentWebMarkupContainerShouldntCauseStackOverflow4()
        {
                
tester.startPage(TransparentContainerWithAutoTransparentContainerPage.class);
@@ -218,7 +215,6 @@ public class TransparentWebMarkupContainerTest extends 
WicketTestCase
         * label that was added to the outer TWMC.
         */
        @Test
-       @Ignore("Fails due to WICKET-5898")
        public void 
ajaxRequestForComponentInTransparentWebMarkupContainerShouldntCauseStackOverflow5()
        {
                
tester.startPage(TransparentContainerWithManualTransparentContainerPage.class);

Reply via email to