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);
