Repository: wicket Updated Branches: refs/heads/sandbox/component-queueing-2 63d15c5c3 -> 1fd9d57c0
WICKET-3335 test fixes Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1fd9d57c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1fd9d57c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1fd9d57c Branch: refs/heads/sandbox/component-queueing-2 Commit: 1fd9d57c0954f393e7cf6b6391d2f69c2815674d Parents: 63d15c5 Author: Igor Vaynberg <[email protected]> Authored: Thu Feb 20 23:09:43 2014 -0800 Committer: Igor Vaynberg <[email protected]> Committed: Thu Feb 20 23:18:25 2014 -0800 ---------------------------------------------------------------------- .../java/org/apache/wicket/DequeueContext.java | 44 +++++++++++++----- .../java/org/apache/wicket/MarkupContainer.java | 48 ++++++++++++++++---- .../wicket/markup/html/border/Border.java | 12 +++-- .../markup/repeater/AbstractRepeater.java | 4 +- .../markupFragments/MarkupFragmentTest.java | 2 + 5 files changed, 85 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1fd9d57c/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java b/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java index 99c102d..a5bb925 100644 --- a/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java +++ b/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java @@ -1,9 +1,26 @@ +/* + * 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; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.IMarkupFragment; import org.apache.wicket.markup.MarkupElement; import org.apache.wicket.util.collections.ArrayListStack; +import org.apache.wicket.util.lang.Args; /** * Context for component dequeueing. Keeps track of markup position and container stack. @@ -71,7 +88,7 @@ public final class DequeueContext } /** - * Peeks markup tag that would be retrieved by call to {@link #popTag()} + * Peeks markup tag that would be retrieved by call to {@link #takeTag()} * * @return */ @@ -85,27 +102,30 @@ public final class DequeueContext * * @return */ - public ComponentTag popTag() + public ComponentTag takeTag() { - ComponentTag taken = next; - tags.push(taken); - next = nextTag(); + ComponentTag taken=next; + if (taken.isOpen() && !taken.hasNoCloseTag()) + { + tags.push(taken); + } + else if (tags.size() > 0 && taken.closes(tags.peek())) + { + tags.pop(); + } + next=nextTag(); return taken; } /** - * Skips to the closing tag of the tag retrieved from last call to {@link #popTag()} + * Skips to the closing tag of the tag retrieved from last call to {@link #takeTag()} */ public void skipToCloseTag() { - if (tags.peek().isOpen()) - { while (!next.closes(tags.peek())) { next = nextTag(); } - tags.pop(); - } } private ComponentTag nextTag() @@ -117,7 +137,7 @@ public final class DequeueContext { ComponentTag tag = (ComponentTag)element; ComponentTag open = tag.isClose() ? tag.getOpenTag() : tag; - if (canDequeueTag(open)) + if (open != null && canDequeueTag(open)) { index++; return tag; @@ -129,6 +149,8 @@ public final class DequeueContext private boolean canDequeueTag(ComponentTag open) { + Args.notNull(open, "open"); + if (containers.size() < 1) { // TODO queueing message: called too early http://git-wip-us.apache.org/repos/asf/wicket/blob/1fd9d57c/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 f6f0255..3cc5fcc 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -1715,6 +1715,17 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp return result; } + @Override + protected void onBeforeRender() + { + super.onBeforeRender(); + // if (this instanceof IQueueRegion) + // { + // dequeue(); + // } + } + + /** * * @see org.apache.wicket.Component#onBeforeRenderChildren() @@ -2079,9 +2090,10 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp { while (dequeue.isAtOpenOrOpenCloseTag()) { - ComponentTag tag = dequeue.popTag(); - + ComponentTag tag = dequeue.takeTag(); + // see if child is already added to parent + Component child = get(tag.getId()); // TODO queueing add this into findInQueue and // rename it to dequeue @@ -2101,24 +2113,40 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp } } } - - if (child == null || tag.isOpenClose() || !(child instanceof MarkupContainer)) + if (child == null || !(child instanceof MarkupContainer)) { // could not dequeue, or does not contain children - dequeue.skipToCloseTag(); + + if (tag.isOpen()) + { + dequeue.skipToCloseTag(); + } } else { MarkupContainer container = (MarkupContainer)child; - dequeue.pushContainer(container); - container.dequeue(dequeue); - dequeue.popContainer(); + if (container instanceof IQueueRegion) + { + // if this is a dequeue container we do not process its markup, it will do so + // itself when it is dequeued for the first time + if (tag.isOpen()) + { + dequeue.skipToCloseTag(); + } + } + else if (tag.isOpen()) + { + // this component has more markup and possibly more children to dequeue + dequeue.pushContainer(container); + container.dequeue(dequeue); + dequeue.popContainer(); + } } - if (tag.isOpen() && tag.hasNoCloseTag() == false) + if (tag.isOpen() && !tag.hasNoCloseTag()) { // pull the close tag off - ComponentTag close = dequeue.popTag(); + ComponentTag close = dequeue.takeTag(); if (!close.closes(tag)) { // sanity check http://git-wip-us.apache.org/repos/asf/wicket/blob/1fd9d57c/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java index 057553c..c44d60b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java @@ -163,7 +163,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes super(id, model); body = new BorderBodyContainer(id + "_" + BODY); - queueToBorder(body); + addToBorder(body); } /** @@ -540,8 +540,14 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes @Override public IMarkupFragment getDequeueMarkup() { - Border border = findParent(Border.class); - IMarkupFragment fragment = border.getMarkup(); + Border border=findParent(Border.class); + IMarkupFragment fragment=findParent(Border.class).getMarkup(); + + if (fragment == null) + { + return null; + } + /* * we want to get the contents of the border here (the markup that * is represented by the body tag) to do this we need to strip the http://git-wip-us.apache.org/repos/asf/wicket/blob/1fd9d57c/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java index 7b7bb4e..c71ef08 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java @@ -177,6 +177,8 @@ public abstract class AbstractRepeater extends WebMarkupContainer } } } - dequeue.skipToCloseTag(); + + dequeue.skipToCloseTag(); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/1fd9d57c/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java b/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java index 83b518f..fa91473 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java @@ -178,6 +178,7 @@ public class MarkupFragmentTest extends WicketTestCase assertNull(border.getBodyContainer().getAssociatedMarkup()); + border.dequeue(); markup = border.getBodyContainer().getMarkup(); compareMarkupWithString(markup, "<wicket:body/>"); @@ -218,6 +219,7 @@ public class MarkupFragmentTest extends WicketTestCase assertNull(border.getBodyContainer().getAssociatedMarkup()); // See explanation in BaseBorder.BorderBodyContainer.getMarkup() + border.dequeue(); markup = border.getBodyContainer().getParent().getMarkup(border.getBodyContainer()); compareMarkupWithString(markup, "<wicket:body>333</wicket:body>");
