From 45fa82f3f6b98f3b6f81e8e753d8e7341dee14b5 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Tue, 13 Apr 2010 11:08:15 +0200 Subject: Start writing a todo item handling framework. --- org/madore/damlengine/DamlEngine.java | 3 +++ org/madore/damlengine/DefaultHandler.java | 11 ++++++++ org/madore/damlengine/TodoItem.java | 42 ++++++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 org/madore/damlengine/DefaultHandler.java (limited to 'org/madore/damlengine') diff --git a/org/madore/damlengine/DamlEngine.java b/org/madore/damlengine/DamlEngine.java index 441e970..6afa628 100644 --- a/org/madore/damlengine/DamlEngine.java +++ b/org/madore/damlengine/DamlEngine.java @@ -11,6 +11,8 @@ import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl; public final class DamlEngine { + public static final String DAML_NS = "http://www.madore.org/~david/NS/daml/"; + private static Document doc; private DamlEngine() { } // Forbid instantiation @@ -22,6 +24,7 @@ public final class DamlEngine { todoStack.add(new TodoItem(doc.getDocumentElement(), new HashMap(), options)); + todoStack.removeFirst().dispatch(); // ... } diff --git a/org/madore/damlengine/DefaultHandler.java b/org/madore/damlengine/DefaultHandler.java new file mode 100644 index 0000000..6a2c174 --- /dev/null +++ b/org/madore/damlengine/DefaultHandler.java @@ -0,0 +1,11 @@ +package org.madore.damlengine; + +public class DefaultHandler { + + private DefaultHandler() { } + + public static void handle(TodoItem that) { + System.err.println("handling a "+that.node.getNodeName()+" node"); + } + +} diff --git a/org/madore/damlengine/TodoItem.java b/org/madore/damlengine/TodoItem.java index e058ae2..941460e 100644 --- a/org/madore/damlengine/TodoItem.java +++ b/org/madore/damlengine/TodoItem.java @@ -1,13 +1,30 @@ package org.madore.damlengine; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; import java.util.Map; +import java.util.HashMap; import org.w3c.dom.Node; public class TodoItem { - protected Node node; - protected Map context; - protected Map options; + protected static Map damlHandlers; + protected static Method defaultHandler; + + { + Class[] handlerArgTypes = new Class[]{ TodoItem.class }; + damlHandlers = new HashMap(); + try { + defaultHandler = DefaultHandler.class.getMethod("handle", handlerArgTypes); + } catch (NoSuchMethodException e) { + // FIXME: this isn't good... + throw new Error("this is impossible"); + } + } + + Node node; + Map context; + Map options; public TodoItem(Node node, Map context, Map options) { this.node = node; @@ -15,4 +32,23 @@ public class TodoItem { this.options = options; } + public void dispatch() { + Method handler; + if ( node.getNamespaceURI().equals(DamlEngine.DAML_NS) ) { + handler = damlHandlers.get(node.getLocalName()); + if ( handler == null ) + handler = defaultHandler; + } else + handler = defaultHandler; + try { + handler.invoke(null, new Object[]{this}); + } catch (IllegalAccessException e) { + // FIXME: this isn't good... + throw new Error("this is impossible"); + } catch (InvocationTargetException e) { + // FIXME: this isn't good... + throw new Error("this is impossible"); + } + } + } -- cgit v1.2.3