diff options
Diffstat (limited to 'org/madore/damlengine/TodoElement.java')
-rw-r--r-- | org/madore/damlengine/TodoElement.java | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/org/madore/damlengine/TodoElement.java b/org/madore/damlengine/TodoElement.java index a069b36..e2293ef 100644 --- a/org/madore/damlengine/TodoElement.java +++ b/org/madore/damlengine/TodoElement.java @@ -1,17 +1,23 @@ package org.madore.damlengine; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; import java.util.Map; import java.util.HashMap; import org.w3c.dom.Element; public abstract class TodoElement extends TodoItem { - protected static Map<String,Constructor<? extends TodoElement>> damlConstructors; + public static abstract class Factory { + public abstract TodoElement newItem(Element node, + Map<String,Object> context, + Map<String,Object> options); + } + + protected static Map<String,Factory> damlFactories; + protected static Factory damlDefaultFactory; static { - damlConstructors = new HashMap<String,Constructor<? extends TodoElement>>(); + damlFactories = new HashMap<String,Factory>(); + damlDefaultFactory = new TodoDefaultElement.Factory(); } Element node; @@ -27,21 +33,13 @@ public abstract class TodoElement extends TodoItem { public static TodoElement getTodoElement(Element node, Map<String,Object> context, Map<String,Object> options) { - Constructor<? extends TodoElement> constructor = null; + Factory factory = null; String nsuri = node.getNamespaceURI(); if ( nsuri != null && nsuri.equals(DamlEngine.DAML_NS) ) - constructor = damlConstructors.get(node.getLocalName()); - if ( constructor != null ) - try { - return constructor.newInstance(new Object[]{node, context, options}); - } catch (InstantiationException e) { - // FIXME: Do something intelligent here! - } catch (IllegalAccessException e) { - // FIXME: Do something intelligent here! - } catch (InvocationTargetException e) { - // FIXME: Do something intelligent here! - } - return new TodoDefaultElement(node, context, options); + factory = damlFactories.get(node.getLocalName()); + if ( factory == null ) + factory = damlDefaultFactory; + return factory.newItem(node, context, options); } } |