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();
+                                       }
                                }
                        }
 

Reply via email to