diff options
Diffstat (limited to 'org/madore/damlengine/TodoItem.java')
| -rw-r--r-- | org/madore/damlengine/TodoItem.java | 42 | 
1 files changed, 39 insertions, 3 deletions
| 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<String,Object> context; -    protected Map<String,Object> options; +    protected static Map<String,Method> damlHandlers; +    protected static Method defaultHandler; + +    { +	Class[] handlerArgTypes = new Class[]{ TodoItem.class }; +	damlHandlers = new HashMap<String,Method>(); +	try { +	    defaultHandler = DefaultHandler.class.getMethod("handle", handlerArgTypes); +	} catch (NoSuchMethodException e) { +	    // FIXME: this isn't good... +	    throw new Error("this is impossible"); +	} +    } + +    Node node; +    Map<String,Object> context; +    Map<String,Object> options;      public TodoItem(Node node, Map<String,Object> context, Map<String,Object> 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"); +	} +    } +  } | 
