Markup driven tree - add functionality to make Enclosure first class citizen in 
the component tree


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

Branch: refs/heads/markup-driven-component-tree
Commit: fa68ce99a4c478c4d966ad310e36c0c22a0bc716
Parents: e801a5f
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Jan 23 15:44:24 2014 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Jan 23 15:44:24 2014 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/ComponentTreeBuilder.java | 47 ++++++++++++++------
 .../wicket/markup/html/internal/Enclosure.java  |  6 +++
 .../markupdriventree/MarkupDrivenTreeTest.java  | 19 +++++++-
 .../PageWithAutoPanelWithinEnclosure.html       | 30 +++++++++++++
 .../PageWithAutoPanelWithinEnclosure.java       | 18 ++++++++
 .../markupdriventree/components/PanelA.html     |  2 -
 6 files changed, 105 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/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 28d487e..556581f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ComponentTreeBuilder.java
@@ -3,10 +3,10 @@ package org.apache.wicket;
 import java.lang.reflect.Field;
 
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.IMarkup;
 import org.apache.wicket.markup.IMarkupFragment;
-import org.apache.wicket.markup.Markup;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.WicketTag;
+import org.apache.wicket.markup.resolver.ComponentResolvers;
 
 /**
  *
@@ -30,28 +30,47 @@ class ComponentTreeBuilder
                        while (stream.skipUntil(ComponentTag.class))
                        {
                                ComponentTag tag = stream.getTag();
+
                                if (!tag.isAutoComponentTag() && (tag.isOpen() 
|| tag.isOpenClose()))
                                {
                                        String componentId = tag.getId();
-                                       Component component = 
container.get(componentId);
-                                       if (component == null)
+
+                                       if (tag instanceof WicketTag)
                                        {
-                                               try
+                                               Component component = 
ComponentResolvers.resolve(container, stream, tag, null);
+                                               if ((component != null) && 
(component.getParent() == null))
                                                {
-                                                       component = 
findAutoAnnotatedComponent(container, componentId);
-
-                                                       if (component != null)
+                                                       if 
(component.getId().equals(tag.getId()) == false)
                                                        {
-                                                               
container.add(component);
+                                                               // make sure we 
are able to get() the component during rendering
+                                                               
tag.setId(component.getId());
+                                                               
tag.setModified(true);
                                                        }
-
-                                               } catch (Exception e)
-                                               {
-                                                       throw new 
WicketRuntimeException(e);
+                                                       
container.add(component);
                                                }
                                        }
+                                       else
+                                       {
+                                               Component component = 
container.get(componentId);
+                                               if (component == null)
+                                               {
+                                                       try
+                                                       {
+                                                               component = 
findAutoAnnotatedComponent(container, componentId);
+
+                                                               if (component 
!= null)
+                                                               {
+                                                                       
container.add(component);
+                                                               }
 
-                                       print(tag);
+                                                       } catch (Exception e)
+                                                       {
+                                                               throw new 
WicketRuntimeException(e);
+                                                       }
+                                               }
+
+                                               print(tag);
+                                       }
                                }
 
                                if (tag.isOpen())

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
index 8a3c8e5..22866ae 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
@@ -178,6 +178,12 @@ public class Enclosure extends WebMarkupContainer 
implements IComponentResolver
        {
                String fullChildId = getChildId();
 
+               Component child = get(fullChildId);
+               if (child != null)
+               {
+                       return child;
+               }
+
                Component controller = enclosureParent.get(fullChildId);
                if (controller == null)
                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java
index 5b2af28..1a42cda 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java
@@ -1,10 +1,14 @@
 package org.apache.wicket.markupdriventree;
 
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.html.internal.Enclosure;
 import org.apache.wicket.markupdriventree.components.ComponentA;
 import org.apache.wicket.markupdriventree.components.ComponentB;
 import org.apache.wicket.markupdriventree.components.ComponentC;
 import org.apache.wicket.markupdriventree.components.PanelA;
+import org.hamcrest.Matchers;
 import org.junit.Test;
 
 /**
@@ -55,7 +59,6 @@ public class MarkupDrivenTreeTest extends WicketTestCase
                tester.assertComponent("panelA:a", ComponentA.class);
        }
 
-
        @Test
        public void pageWithManuallyAddedPanel()
        {
@@ -68,4 +71,18 @@ public class MarkupDrivenTreeTest extends WicketTestCase
                tester.assertComponent("panelA", PanelA.class);
                tester.assertComponent("panelA:a", ComponentA.class);
        }
+
+       @Test
+       public void pageWithManuallyAddedPanelPlusEnclosure()
+       {
+               PageWithAutoPanelWithinEnclosure page = 
tester.startPage(PageWithAutoPanelWithinEnclosure.class);
+
+               tester.assertComponent("c", ComponentC.class);
+               tester.assertComponent("b", ComponentB.class);
+               tester.assertComponent("b:a", ComponentA.class);
+
+               Component panelA = page.panelA;
+               MarkupContainer parent = panelA.getParent();
+               assertThat("PanelA's parent must be the Enclosure", parent, 
Matchers.instanceOf(Enclosure.class));
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.html
 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.html
new file mode 100644
index 0000000..4c3e9e5
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+       <head>
+               <meta charset="utf-8" />
+               <title>Page with panel</title>
+       </head>
+       <body>
+               <div id="hd">
+                       <div id="logo">
+                               <img src="logo.png" width="50px" height="50px" 
alt="Wicket Logo" />
+                               <h1>Apache Wicket</h1>
+                       </div>
+               </div>
+               <div id="bd">
+
+            <div wicket:id="c">
+            </div>
+
+            <div wicket:id="b">
+                <div wicket:id="a"></div>
+            </div>
+
+            <wicket:enclosure child="panelA">
+                <div wicket:id="panelA"></div>
+            </wicket:enclosure>
+
+        </div>
+
+       </body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.java
 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.java
new file mode 100644
index 0000000..d9ebe99
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/PageWithAutoPanelWithinEnclosure.java
@@ -0,0 +1,18 @@
+package org.apache.wicket.markupdriventree;
+
+import org.apache.wicket.Auto;
+import org.apache.wicket.markupdriventree.components.PanelA;
+
+/**
+ *
+ */
+public class PageWithAutoPanelWithinEnclosure extends BasePage
+{
+       @Auto
+       PanelA panelA;
+
+       public PageWithAutoPanelWithinEnclosure()
+       {
+               panelA = new PanelA("panelA");
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa68ce99/wicket-core/src/test/java/org/apache/wicket/markupdriventree/components/PanelA.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/components/PanelA.html
 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/components/PanelA.html
index 9700fcc..4519cde 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/components/PanelA.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/components/PanelA.html
@@ -6,8 +6,6 @@
 
     <div wicket:id="a">
 
-
-
     </div>
 
 </wicket:panel>

Reply via email to