WICKET-3335 Attempt to add support for Border component

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

Branch: refs/heads/master
Commit: ec84bb57fbfadce914a1af79b1c47c3267de5d4b
Parents: d2493d3
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Feb 10 16:16:59 2014 +0200
Committer: Igor Vaynberg <[email protected]>
Committed: Thu Feb 20 23:37:14 2014 -0800

----------------------------------------------------------------------
 .../java/org/apache/wicket/MarkupContainer.java | 42 +++++++++++---
 .../wicket/markup/html/border/Border.java       | 23 +++++++-
 .../wicket/queueing/ComponentQueueingTest.java  | 59 +++++++++++++++++++-
 3 files changed, 112 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ec84bb57/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 ffd5488..b34a6fc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -2018,7 +2018,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
 
        private transient ComponentQueue queue;
 
-       public void queue(Component... components)
+       public MarkupContainer queue(Component... components)
        {
                if (queue == null)
                {
@@ -2049,6 +2049,8 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                        // TODO WICKET-3335: should we check if 
(!region.dequeueing) ?
                        region.dequeue();
                }
+
+               return this;
        }
 
        ComponentQueue getQueue()
@@ -2107,9 +2109,9 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                        return;
                }
                // use arraydeque?
-               ArrayListStack<ComponentTag> tags = new 
ArrayListStack<ComponentTag>();
-               ArrayListStack<MarkupContainer> containers = new 
ArrayListStack<MarkupContainer>();
-               ArrayListStack<Repeater> repeaters = new 
ArrayListStack<Repeater>();
+               ArrayListStack<ComponentTag> tags = new ArrayListStack<>();
+               ArrayListStack<MarkupContainer> containers = new 
ArrayListStack<>();
+               ArrayListStack<Repeater> repeaters = new ArrayListStack<>();
 
                containers.push(this);
 
@@ -2182,7 +2184,16 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
 
                                        if (child != null)
                                        {
-                                               containers.peek().add(child);
+                                               MarkupContainer parentContainer 
= containers.peek();
+//                                             boolean isInBorder = 
isInBorder(tags, parentContainer);
+                                               if (parentContainer instanceof 
Border) //(isInBorder)
+                                               {
+                                                       ((Border) 
parentContainer).addToBorder(child);
+                                               }
+                                               else
+                                               {
+                                                       
parentContainer.add(child);
+                                               }
 
                                                if (child instanceof 
IQueueRegion)
                                                {
@@ -2200,7 +2211,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                                                for (i = i + 1; i < 
markup.size(); i++)
                                                {
                                                        MarkupElement e = 
markup.get(i);
-                                                       if (e instanceof 
ComponentTag && ((ComponentTag)e).closes(tag))
+                                                       if (e instanceof 
ComponentTag && e.closes(tag))
                                                        {
                                                                break;
                                                        }
@@ -2240,8 +2251,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                                                                        for (i 
= i + 1; i < markup.size(); i++)
                                                                        {
                                                                                
MarkupElement e = markup.get(i);
-                                                                               
if (e instanceof ComponentTag
-                                                                               
        && ((ComponentTag)e).closes(tag))
+                                                                               
if (e instanceof ComponentTag && e.closes(tag))
                                                                                
{
                                                                                
        break;
                                                                                
}
@@ -2257,7 +2267,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                                                        for (i = i + 1; i < 
markup.size(); i++)
                                                        {
                                                                MarkupElement e 
= markup.get(i);
-                                                               if (e 
instanceof ComponentTag && ((ComponentTag)e).closes(tag))
+                                                               if (e 
instanceof ComponentTag && e.closes(tag))
                                                                {
                                                                        break;
                                                                }
@@ -2275,4 +2285,18 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
 
 
        }
+
+       private boolean isInBorder(ArrayListStack<ComponentTag> tags, 
MarkupContainer parentContainer)
+       {
+               boolean result = false;
+               if (parentContainer instanceof Border && tags.empty() == false)
+               {
+                       ComponentTag parentsTag = tags.peek();
+                       if (parentsTag instanceof WicketTag && 
((WicketTag)parentsTag).isBorderTag())
+                       {
+                               result = true;
+                       }
+               }
+               return result;
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec84bb57/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 705c124..3c5b0d7 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
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.html.border;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.IQueueRegion;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
@@ -132,7 +133,7 @@ import org.apache.wicket.util.lang.Args;
  * @author Jonathan Locke
  * @author Juergen Donnerstag
  */
-public abstract class Border extends WebMarkupContainer implements 
IComponentResolver
+public abstract class Border extends WebMarkupContainer implements 
IComponentResolver, IQueueRegion
 {
        private static final long serialVersionUID = 1L;
 
@@ -212,6 +213,13 @@ public abstract class Border extends WebMarkupContainer 
implements IComponentRes
        }
 
        @Override
+       public Border queue(Component... components)
+       {
+               getBodyContainer().queue(components);
+               return this;
+       }
+
+       @Override
        public Border remove(final Component component)
        {
                if (component == body)
@@ -263,6 +271,19 @@ public abstract class Border extends WebMarkupContainer 
implements IComponentRes
        }
 
        /**
+        * Queues children components to the Border itself
+        *
+        * @param children
+        *            the children components to queue
+        * @return this
+        */
+       public Border queueToBorder(final Component... children)
+       {
+               super.queue(children);
+               return this;
+       }
+
+       /**
         * Removes child from the Border itself
         * 
         * @param child

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec84bb57/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
index 98d15be..c96ea7b 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
@@ -28,6 +28,7 @@ import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.border.Border;
 import org.apache.wicket.markup.html.internal.Enclosure;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -37,6 +38,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class ComponentQueueingTest extends WicketTestCase
@@ -255,6 +257,7 @@ public class ComponentQueueingTest extends WicketTestCase
                tester.startPage(p);
 
                assertThat(p, hasPath(new Path(q, r)));
+               tester.assertContains("<meta/>"); // contributed by 
<wicket:head>
        }
 
        @Test
@@ -544,6 +547,26 @@ public class ComponentQueueingTest extends WicketTestCase
                assertEquals("<div id=\"wicket__InlineEnclosure_01\" 
style=\"display:none\"></div>", tester.getLastResponseAsString());
        }
 
+       @Ignore
+       @Test
+       public void dequeueWithBorder1()
+       {
+               MarkupContainer a = new A(), b = new B(), r = new R(), s = new 
S();
+
+               TestBorder border = new TestBorder("border");
+               border.setBorderMarkup("<wicket:border><p wicket:id='r'><p 
wicket:id='s'>" +
+                               "<wicket:body/></p></p></wicket:border>");
+               border.queueToBorder(r, s);
+
+               TestPage p = new TestPage();
+               p.setPageMarkup("<p wicket:id='a'><p wicket:id='border'><p 
wicket:id='b'></p></p></p>");
+
+               p.queue(a, border, b);
+
+               tester.startPage(p);
+
+               assertThat(p, hasPath(new Path(a, border, r, s)));
+       }
 
        private static class A extends WebMarkupContainer
        {
@@ -624,7 +647,7 @@ public class ComponentQueueingTest extends WicketTestCase
                        ArrayList<Integer> values = new ArrayList<Integer>();
                        for (int i = 0; i < size; i++)
                                values.add(i);
-                       setModel(new Model<ArrayList<Integer>>(values));
+                       setModel(new Model<>(values));
                }
        }
 
@@ -684,7 +707,6 @@ public class ComponentQueueingTest extends WicketTestCase
 
        private static class TestPanel extends Panel implements 
IMarkupResourceStreamProvider
        {
-
                private String markup;
 
                public TestPanel(String id)
@@ -715,4 +737,37 @@ public class ComponentQueueingTest extends WicketTestCase
                        return new StringResourceStream(getPanelMarkup());
                }
        }
+
+       private static class TestBorder extends Border implements 
IMarkupResourceStreamProvider
+       {
+               private String markup;
+
+               public TestBorder(String id)
+               {
+                       super(id);
+               }
+
+               public TestBorder(String id, String markup)
+               {
+                       super(id);
+                       this.markup = markup;
+               }
+
+               protected void setBorderMarkup(String markup)
+               {
+                       this.markup = markup;
+               }
+
+               protected String getBorderMarkup()
+               {
+                       return markup;
+               }
+
+               @Override
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
+                                                              Class<?> 
containerClass)
+               {
+                       return new StringResourceStream(getBorderMarkup());
+               }
+       }
 }

Reply via email to