From 5c6ccfca16a421860cd57d11e41d94d8a70cda76 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Wed, 14 Apr 2010 20:52:52 +0200 Subject: Make handlers instances instead of using static methods. --- org/madore/damlengine/AttrHandler.java | 10 +++++++ org/madore/damlengine/DefaultHandler.java | 36 +----------------------- org/madore/damlengine/ElementHandler.java | 41 ++++++++++++++++++++++++++++ org/madore/damlengine/TodoAttr.java | 31 +++++---------------- org/madore/damlengine/TodoElement.java | 28 ++++--------------- org/madore/damlengine/XemptyAttrHandler.java | 6 ++-- 6 files changed, 67 insertions(+), 85 deletions(-) create mode 100644 org/madore/damlengine/AttrHandler.java create mode 100644 org/madore/damlengine/ElementHandler.java (limited to 'org/madore') diff --git a/org/madore/damlengine/AttrHandler.java b/org/madore/damlengine/AttrHandler.java new file mode 100644 index 0000000..df1e18a --- /dev/null +++ b/org/madore/damlengine/AttrHandler.java @@ -0,0 +1,10 @@ +package org.madore.damlengine; + +import org.w3c.dom.*; + +public abstract class AttrHandler { + + public void handle(TodoAttr that) { + } + +} diff --git a/org/madore/damlengine/DefaultHandler.java b/org/madore/damlengine/DefaultHandler.java index ae23a3b..d22d8f4 100644 --- a/org/madore/damlengine/DefaultHandler.java +++ b/org/madore/damlengine/DefaultHandler.java @@ -4,40 +4,6 @@ import java.util.Vector; import java.util.HashMap; import org.w3c.dom.*; -public class DefaultHandler { - - private DefaultHandler() { } - - public static void handleAttributes(TodoElement that) { - NamedNodeMap attrs = that.node.getAttributes(); - Node attr; - Vector toProcess = new Vector(); - for ( int i=0 ; (attr=attrs.item(i)) != null ; i++ ) { - TodoAttr it = new TodoAttr((Attr)attr, that.node, that.context, - new HashMap()); - toProcess.add(it); - } - TodoDeque.registerAtStart(toProcess); - } - - public static void handleNodeOnly(TodoElement that) { - System.err.println("handling a "+that.node.getNodeName()+" element"); - 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 ) { - TodoElement it = new TodoElement((Element)child, that.context, - new HashMap()); - toProcess.add(it); - } - } - TodoDeque.registerAtStart(toProcess); - } - - public static void handle(TodoElement that) { - handleAttributes(that); - handleNodeOnly(that); - } +public class DefaultHandler extends ElementHandler { } diff --git a/org/madore/damlengine/ElementHandler.java b/org/madore/damlengine/ElementHandler.java new file mode 100644 index 0000000..4e14756 --- /dev/null +++ b/org/madore/damlengine/ElementHandler.java @@ -0,0 +1,41 @@ +package org.madore.damlengine; + +import java.util.Vector; +import java.util.HashMap; +import org.w3c.dom.*; + +public abstract class ElementHandler { + + public void handleAttributes(TodoElement that) { + NamedNodeMap attrs = that.node.getAttributes(); + Node attr; + Vector toProcess = new Vector(); + for ( int i=0 ; (attr=attrs.item(i)) != null ; i++ ) { + TodoAttr it = new TodoAttr((Attr)attr, that.node, that.context, + new HashMap()); + toProcess.add(it); + } + TodoDeque.registerAtStart(toProcess); + } + + public void handleNodeOnly(TodoElement that) { + System.err.println("handling a "+that.node.getNodeName()+" element"); + 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 ) { + TodoElement it = new TodoElement((Element)child, that.context, + new HashMap()); + toProcess.add(it); + } + } + TodoDeque.registerAtStart(toProcess); + } + + public void handle(TodoElement that) { + handleAttributes(that); + handleNodeOnly(that); + } + +} diff --git a/org/madore/damlengine/TodoAttr.java b/org/madore/damlengine/TodoAttr.java index c4e554a..e11abac 100644 --- a/org/madore/damlengine/TodoAttr.java +++ b/org/madore/damlengine/TodoAttr.java @@ -1,7 +1,5 @@ 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.Element; @@ -9,18 +7,11 @@ import org.w3c.dom.Attr; public class TodoAttr extends TodoItem { - protected static Map damlHandlers; + protected static Map damlAttrHandlers; { - Class[] handlerArgTypes = new Class[]{ TodoAttr.class }; - damlHandlers = new HashMap(); - try { - damlHandlers.put("xempty", - XemptyAttrHandler.class.getMethod("handle", handlerArgTypes)); - } catch (NoSuchMethodException e) { - // FIXME: this isn't good... - throw new Error("this is impossible"); - } + damlAttrHandlers = new HashMap(); + damlAttrHandlers.put("xempty", new XemptyAttrHandler()); } Attr attr; @@ -37,22 +28,14 @@ public class TodoAttr extends TodoItem { } public void dispatch() { - Method handler; + AttrHandler handler; String nsuri = attr.getNamespaceURI(); if ( nsuri != null && nsuri.equals(DamlEngine.DAML_NS) ) { - handler = damlHandlers.get(attr.getLocalName()); + handler = damlAttrHandlers.get(attr.getLocalName()); } else handler = null; - try { - if ( handler != null ) - 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"); - } + if ( handler != null ) + handler.handle(this); } } diff --git a/org/madore/damlengine/TodoElement.java b/org/madore/damlengine/TodoElement.java index f8eaeec..c3dbf0b 100644 --- a/org/madore/damlengine/TodoElement.java +++ b/org/madore/damlengine/TodoElement.java @@ -1,25 +1,17 @@ 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.Element; public class TodoElement extends TodoItem { - protected static Map damlHandlers; - protected static Method defaultHandler; + protected static Map damlHandlers; + protected static ElementHandler defaultHandler; { - Class[] handlerArgTypes = new Class[]{ TodoElement.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"); - } + damlHandlers = new HashMap(); + defaultHandler = new DefaultHandler(); } Element node; @@ -33,7 +25,7 @@ public class TodoElement extends TodoItem { } public void dispatch() { - Method handler; + ElementHandler handler; String nsuri = node.getNamespaceURI(); if ( nsuri != null && nsuri.equals(DamlEngine.DAML_NS) ) { handler = damlHandlers.get(node.getLocalName()); @@ -41,15 +33,7 @@ public class TodoElement extends TodoItem { 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"); - } + handler.handle(this); } } diff --git a/org/madore/damlengine/XemptyAttrHandler.java b/org/madore/damlengine/XemptyAttrHandler.java index 3120d26..16f8173 100644 --- a/org/madore/damlengine/XemptyAttrHandler.java +++ b/org/madore/damlengine/XemptyAttrHandler.java @@ -2,11 +2,9 @@ package org.madore.damlengine; import org.w3c.dom.*; -public class XemptyAttrHandler { +public class XemptyAttrHandler extends AttrHandler { - private XemptyAttrHandler() { } - - public static void handle(TodoAttr that) { + public void handle(TodoAttr that) { that.owner.removeAttribute(that.attr.getName()); that.owner.appendChild(DamlEngine.doc.createComment(" EMPTY ")); } -- cgit v1.2.3