You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2014/02/21 08:37:39 UTC
[14/31] git commit: WICKET-3335 nested borders working. everything
should be working. needs more cleanup and javadoc
WICKET-3335 nested borders working. everything should be working. needs more cleanup and javadoc
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2e57d8db
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2e57d8db
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2e57d8db
Branch: refs/heads/master
Commit: 2e57d8db33b88889413f1396dbd4389904cf7e7f
Parents: b9ddb88
Author: Igor Vaynberg <ig...@gmail.com>
Authored: Sat Feb 15 00:40:48 2014 -0800
Committer: Igor Vaynberg <ig...@gmail.com>
Committed: Thu Feb 20 23:37:15 2014 -0800
----------------------------------------------------------------------
.../java/org/apache/wicket/DequeueContext.java | 5 +-
.../java/org/apache/wicket/MarkupContainer.java | 11 +-
.../wicket/markup/html/border/Border.java | 102 ++++++++++++++++++-
.../wicket/queueing/ComponentQueueingTest.java | 24 ++---
.../org/apache/wicket/queueing/HasPath.java | 7 +-
.../queueing/nestedborders/OuterBorder.html | 2 +-
6 files changed, 128 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/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 8324161..4e62c3e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java
+++ b/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java
@@ -1,13 +1,14 @@
package org.apache.wicket;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.MarkupElement;
import org.apache.wicket.util.collections.ArrayListStack;
public class DequeueContext
{
- private final Markup markup;
+ private final IMarkupFragment markup;
private int index;
private ComponentTag next;
private ArrayListStack<ComponentTag> tags = new ArrayListStack<>();
@@ -37,7 +38,7 @@ public class DequeueContext
}
}
- public DequeueContext(Markup markup, MarkupContainer root)
+ public DequeueContext(IMarkupFragment markup, MarkupContainer root)
{
this.markup = markup;
containers.push(root);
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/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 72f7cc9..e213f35 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -2080,7 +2080,7 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
private void internalDequeue()
{
- Markup markup = getAssociatedMarkup();
+ IMarkupFragment markup = getDequeueMarkup();
if (markup == null)
{
// markup not found, skip dequeuing
@@ -2121,7 +2121,7 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
if (child != null)
{
- add(child);
+ addDequeuedComponent(child, tag);
if (child instanceof IQueueRegion)
{
((MarkupContainer)child).dequeue();
@@ -2159,6 +2159,11 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
}
}
+
+ protected IMarkupFragment getDequeueMarkup() {
+ return getAssociatedMarkup();
+ }
+
protected boolean supportsDequeueingFrom(ComponentTag tag) {
if (tag instanceof WicketTag) {
WicketTag wicketTag=(WicketTag)tag;
@@ -2172,7 +2177,7 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
return true;
}
- protected Component findComponentToDequeue(ComponentTag tag)
+ public Component findComponentToDequeue(ComponentTag tag)
{
return queue == null ? null : queue.remove(tag.getId());
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/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 3c5b0d7..54fa141 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
@@ -26,6 +26,7 @@ import org.apache.wicket.markup.MarkupException;
import org.apache.wicket.markup.MarkupFragment;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.TagUtils;
+import org.apache.wicket.markup.WicketTag;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.BorderMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
@@ -162,7 +163,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
super(id, model);
body = new BorderBodyContainer(id + "_" + BODY);
- addToBorder(body);
+ queueToBorder(body);
}
/**
@@ -398,7 +399,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
/**
* The container to be associated with the <wicket:body> tag
*/
- public class BorderBodyContainer extends WebMarkupContainer
+ public class BorderBodyContainer extends WebMarkupContainer implements IQueueRegion
{
private static final long serialVersionUID = 1L;
@@ -535,5 +536,102 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
return markup.find(child.getId());
}
+
+ protected IMarkupFragment getDequeueMarkup() {
+ Border border=findParent(Border.class);
+ IMarkupFragment fragment=findParent(Border.class).getMarkup();
+ /*
+ * 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
+ * tag that the border is attached to (usually the first tag)
+ */
+
+ int i=0;
+ while (i<fragment.size()) {
+ MarkupElement element=fragment.get(i);
+ if (element instanceof ComponentTag&&((ComponentTag)element).getId().equals(border.getId()) ){
+ break;
+ }
+ i++;
+ }
+
+ if (i>=fragment.size()) {
+ throw new IllegalStateException("Could not find starting border tag for border: "+border.getId()+" in markup: "+fragment);
+ }
+
+
+ /*
+ * (i) is now at the border tag, find the next component tag which
+ */
+
+ i++;
+ while (i<fragment.size()) {
+ MarkupElement element = fragment.get(i);
+ if (element instanceof ComponentTag) {
+ break;
+ }
+ i++;
+ }
+
+ ComponentTag tag=(ComponentTag) fragment.get(i);
+ if (tag.isClose()) {
+ // this closes the border tag, border only has raw markup
+ return null;
+ }
+
+ return new MarkupFragment(fragment, i);
+
+
+ }
+
+ @Override
+ public Component findComponentToDequeue(ComponentTag tag) {
+ /* the body container is allowed to search for queued components
+ * all the way to the page even though it is an IQueueRegion so it can
+ * find components queueud below the border
+ */
+
+ Component component=super.findComponentToDequeue(tag);
+ if (component!=null) {
+ return component;
+ }
+
+ MarkupContainer cursor=getParent();
+ while (cursor!=null) {
+ component=cursor.findComponentToDequeue(tag);
+ if (component!=null) {
+ return component;
+ }
+ if (cursor instanceof BorderBodyContainer) {
+ // optimization - find call above wouldve already recursed to page
+ break;
+ }
+ cursor=cursor.getParent();
+ }
+ return null;
+ }
+ }
+
+
+ @Override
+ protected boolean supportsDequeueingFrom(ComponentTag tag) {
+ if ((tag instanceof WicketTag)&&((WicketTag)tag).isBodyTag()) {
+ return true;
+ }
+
+ return super.supportsDequeueingFrom(tag);
+ }
+
+ @Override
+ public Component findComponentToDequeue(ComponentTag tag) {
+ if ((tag instanceof WicketTag)&&((WicketTag)tag).isBodyTag()) {
+ return getBodyContainer();
+ }
+ return super.findComponentToDequeue(tag);
+ }
+
+ @Override
+ protected void addDequeuedComponent(Component component, ComponentTag tag) {
+ addToBorder(component);
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/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 751462e..e716329 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
@@ -584,22 +584,21 @@ public class ComponentQueueingTest extends WicketTestCase
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.setBorderMarkup("<wicket:border><b1 wicket:id='r'><b2 wicket:id='s'>" +
+ "<wicket:body/></b2></b1></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.setPageMarkup("<out1 wicket:id='a'><p wicket:id='border'><in1 wicket:id='b'></in1></p></out1>");
p.queue(a, border, b);
tester.startPage(p);
- assertThat(p, hasPath(new Path(a, border, r, s)));
- assertThat(p, hasPath(new Path(a, border, border.getBodyContainer(), b)));
+ assertThat(p, hasPath(new Path(a, border, r, s, border.getBodyContainer(), b)));
}
- @Ignore
+
@Test
public void dequeueWithNestedBorders()
{
@@ -613,19 +612,18 @@ public class ComponentQueueingTest extends WicketTestCase
innerBorder.queueToBorder(c, d);
- // TODO WICKET-3335 Where to queue 's' to make it work ?!
- outerBorder.queue(s);
+ outerBorder.queueToBorder(s);
+
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='outerBorder'><p wicket:id='b'></p></p></p>");
-
+
p.queue(b, outerBorder, a);
tester.startPage(p);
-
- assertThat(p, hasPath(new Path(a, outerBorder, outerBorder.getBodyContainer(), b)));
- assertThat(p, hasPath(new Path(a, outerBorder, r, innerBorder, c, d)));
- assertThat(p, hasPath(new Path(a, outerBorder, r, innerBorder, innerBorder.getBodyContainer(), s)));
+
+ assertThat(p, hasPath(new Path(a, outerBorder, r, innerBorder, c, d, innerBorder.getBodyContainer(), s)));
+ assertThat(p, hasPath(new Path(a, outerBorder, r, outerBorder.getBodyContainer(), b)));
}
private static class A extends WebMarkupContainer
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/wicket-core/src/test/java/org/apache/wicket/queueing/HasPath.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/HasPath.java b/wicket-core/src/test/java/org/apache/wicket/queueing/HasPath.java
index 3095095..3613f1f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/HasPath.java
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/HasPath.java
@@ -48,11 +48,14 @@ class HasPath extends TypeSafeMatcher<Component>
return false;
}
- cursor = ((MarkupContainer)cursor).get(path.get(i).getId());
- if (cursor == null)
+ String id = path.get(i).getId();
+ Component child = ((MarkupContainer)cursor).get(id);
+ if (child== null)
{
return false;
}
+
+ cursor=child;
if (!path.get(i).getType().isAssignableFrom(cursor.getClass()))
{
return false;
http://git-wip-us.apache.org/repos/asf/wicket/blob/2e57d8db/wicket-core/src/test/java/org/apache/wicket/queueing/nestedborders/OuterBorder.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/nestedborders/OuterBorder.html b/wicket-core/src/test/java/org/apache/wicket/queueing/nestedborders/OuterBorder.html
index cbe392d..4986b1d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/nestedborders/OuterBorder.html
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/nestedborders/OuterBorder.html
@@ -3,7 +3,7 @@
<wicket:border>
<p wicket:id="r">
<p wicket:id="innerBorder">
- <p wicket="s"></p>
+ <p wicket:id="s"></p>
</p>
<wicket:body/>
</p>