From 734a0b78ea5508f243caf18a50e36ac8918e11db Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Tue, 13 Apr 2010 11:58:51 +0200 Subject: Create a todo deque class, and use it. --- org/madore/damlengine/DamlEngine.java | 10 +++--- org/madore/damlengine/DefaultHandler.java | 15 +++++++++ org/madore/damlengine/TodoDeque.java | 53 +++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 org/madore/damlengine/TodoDeque.java diff --git a/org/madore/damlengine/DamlEngine.java b/org/madore/damlengine/DamlEngine.java index 6afa628..f13d376 100644 --- a/org/madore/damlengine/DamlEngine.java +++ b/org/madore/damlengine/DamlEngine.java @@ -18,14 +18,12 @@ public final class DamlEngine { private DamlEngine() { } // Forbid instantiation public static void processDocument() { - LinkedList todoStack = new LinkedList(); HashMap options = new HashMap(); options.put("isRoot", true); - todoStack.add(new TodoItem(doc.getDocumentElement(), - new HashMap(), - options)); - todoStack.removeFirst().dispatch(); - // ... + TodoDeque.registerAtEnd(new TodoItem(doc.getDocumentElement(), + new HashMap(), + options)); + TodoDeque.dispatchLoop(); } public static void main(String[] args) diff --git a/org/madore/damlengine/DefaultHandler.java b/org/madore/damlengine/DefaultHandler.java index 6a2c174..4720f67 100644 --- a/org/madore/damlengine/DefaultHandler.java +++ b/org/madore/damlengine/DefaultHandler.java @@ -1,11 +1,26 @@ package org.madore.damlengine; +import java.util.Vector; +import java.util.HashMap; +import org.w3c.dom.*; + public class DefaultHandler { private DefaultHandler() { } public static void handle(TodoItem that) { System.err.println("handling a "+that.node.getNodeName()+" node"); + NodeList children = that.node.getChildNodes(); + Node child; + Vector toProcess = new Vector(); + for ( int i=0 ; (child=children.item(i)) != null ; i++ ) { + if ( child.getNodeType() == Node.ELEMENT_NODE ) { + TodoItem it = new TodoItem(child, that.context, + new HashMap()); + toProcess.add(it); + } + } + TodoDeque.registerAtStart(toProcess); } } diff --git a/org/madore/damlengine/TodoDeque.java b/org/madore/damlengine/TodoDeque.java new file mode 100644 index 0000000..e030e29 --- /dev/null +++ b/org/madore/damlengine/TodoDeque.java @@ -0,0 +1,53 @@ +package org.madore.damlengine; + +import java.util.Collection; +import java.util.LinkedList; + +public final class TodoDeque { + + // FIXME: having everything static is ugly as hell... maybe this + // should be instantiatable? + + private TodoDeque() { } // Forbid instantiation + + private static LinkedList todoDeque = new LinkedList(); + + { + todoDeque = new LinkedList(); + } + + public static void registerAtEnd(TodoItem it) { + todoDeque.addLast(it); + } + + public static void registerAtEnd(Collection them) { + todoDeque.addAll(them); + } + + public static void registerAtStart(TodoItem it) { + todoDeque.addFirst(it); + } + + public static void registerAtStart(Collection them) { + todoDeque.addAll(0, them); + } + + public static TodoItem removeNext() { + return todoDeque.poll(); + } + + public static boolean dispatchOne() { + TodoItem it = removeNext(); + if ( it != null ) { + it.dispatch(); + return true; + } else + return false; + } + + public static void dispatchLoop() { + while ( dispatchOne() ) + ; + } + +} -- cgit v1.2.3