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 2012/01/07 08:17:06 UTC
git commit: added some old proof of concept dequeue() code
Updated Branches:
refs/heads/queuing [created] b3d52388b
added some old proof of concept dequeue() code
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b3d52388
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b3d52388
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b3d52388
Branch: refs/heads/queuing
Commit: b3d52388ba097caf2c4e5059f68faa1d7a12c5c0
Parents: eab8174
Author: Igor Vaynberg <ig...@gmail.com>
Authored: Fri Jan 6 23:16:55 2012 -0800
Committer: Igor Vaynberg <ig...@gmail.com>
Committed: Fri Jan 6 23:16:55 2012 -0800
----------------------------------------------------------------------
.../java/org/apache/wicket/MarkupContainer.java | 71 ++++++++++++++-
1 files changed, 70 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/b3d52388/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 d35051c..7e5d4c9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import java.util.Stack;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.IMarkupFragment;
@@ -345,7 +346,75 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
@Override
void dequeue()
{
- // FIXME
+ ArrayList<Component> queue = getMetaData(QUEUE);
+ if (queue == null)
+ {
+ return;
+ }
+
+
+ while (!queue.isEmpty())
+ {
+ Component resolved = dequeueChild(queue);
+ if (resolved == null)
+ {
+ // TODO message
+ throw new WicketRuntimeException("Could not unqueue any child with id");
+ }
+ else
+ {
+ queue.remove(resolved);
+ }
+ }
+
+ setMetaData(QUEUE, null);
+ }
+
+ private Component dequeueChild(ArrayList<Component> queue)
+ {
+ IMarkupFragment markup = getMarkup();
+ for (Component child : queue)
+ {
+ Stack<ComponentTag> stack = new Stack<ComponentTag>();
+
+ for (int i = 0, size = markup.size(); i < size; i++)
+ {
+ MarkupElement e = markup.get(i);
+ if (e instanceof ComponentTag)
+ {
+ ComponentTag ct = (ComponentTag)e;
+ if (ct.isClose())
+ {
+ stack.pop();
+ continue;
+ }
+ stack.push(ct);
+ if (ct.getId().equals(child.getId()))
+ {
+ Component parent = this;
+ for (int si = 0, ssize = stack.size(); si < ssize - 1; si++)
+ {
+ parent = parent.get(stack.get(si).getId());
+ if (parent == null)
+ {
+ break;
+ }
+ }
+ if (parent != null)
+ {
+ ((MarkupContainer)parent).add(child);
+ return child;
+ }
+
+ }
+ if (ct.isOpenClose())
+ {
+ stack.pop();
+ }
+ }
+ }
+ }
+ return null;
}
/**