Updated Branches: refs/heads/markup-driven-component-tree 6ba324dba -> 7a5cfbbc6
Markup driven tree - better handling of cursor change while traversing the markup Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cbf118ec Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cbf118ec Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cbf118ec Branch: refs/heads/markup-driven-component-tree Commit: cbf118ece5d01667b3e2fbbfb2e3c7e733848c4f Parents: 6ba324d Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Jan 23 11:30:03 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Jan 23 11:30:03 2014 +0200 ---------------------------------------------------------------------- .../org/apache/wicket/ComponentTreeBuilder.java | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/cbf118ec/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java b/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java index 0b14ae7..66b9c1d 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java +++ b/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java @@ -1,6 +1,8 @@ package org.apache.wicket; import java.lang.reflect.Field; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.Iterator; import org.apache.wicket.markup.ComponentTag; @@ -12,11 +14,13 @@ import org.apache.wicket.markup.MarkupElement; */ class ComponentTreeBuilder { + private static final String USER_DATA_CURSOR_CHANGE = "cursorChanged"; + void rebuild(Page page) { MarkupContainer cursor = page; - boolean entered = false; + Deque<MarkupContainer> cursors = new ArrayDeque<>(); IMarkupFragment markup = page.getMarkup(); Iterator<MarkupElement> markupElementIterator = markup.iterator(); @@ -30,7 +34,6 @@ class ComponentTreeBuilder if (!tag.isAutoComponentTag() && (tag.isOpen() || tag.isOpenClose())) { - String componentId = tag.getId(); Component component = cursor.get(componentId); if (component == null) @@ -39,12 +42,16 @@ class ComponentTreeBuilder { component = findAutoAnnotatedComponent(cursor, componentId); - if (component instanceof MarkupContainer) + if (component != null) { cursor.add(component); - entered = true; - cursor = (MarkupContainer) component; + if (component instanceof MarkupContainer) + { + tag.setUserData(USER_DATA_CURSOR_CHANGE, Boolean.TRUE); + cursors.add(cursor); + cursor = (MarkupContainer) component; + } } } catch (Exception e) @@ -55,10 +62,14 @@ class ComponentTreeBuilder print(tag); } - else if (entered && tag.isClose()) + else if (tag.isClose()) { - entered = false; - cursor = cursor.getParent(); + ComponentTag openTag = tag.getOpenTag(); + Object cursorChanged = openTag.getUserData(USER_DATA_CURSOR_CHANGE); + if (cursorChanged != null) + { + cursor = cursors.pop(); + } } }
