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;
 	}
 
 	/**