From 6775b5fc7de8884577533fa84ac703366539e043 Mon Sep 17 00:00:00 2001 From: abranson Date: Tue, 13 Mar 2012 15:50:44 +0100 Subject: More efficient DOM handling, getField() utility method for scripts --- source/com/c2kernel/persistency/outcome/Outcome.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/source/com/c2kernel/persistency/outcome/Outcome.java b/source/com/c2kernel/persistency/outcome/Outcome.java index a5ecb29..d321f69 100644 --- a/source/com/c2kernel/persistency/outcome/Outcome.java +++ b/source/com/c2kernel/persistency/outcome/Outcome.java @@ -11,6 +11,8 @@ import org.apache.xml.serialize.Method; import org.apache.xml.serialize.OutputFormat; import org.apache.xml.serialize.XMLSerializer; import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; import org.xml.sax.InputSource; import com.c2kernel.common.PersistencyException; @@ -23,6 +25,7 @@ public class Outcome implements C2KLocalObject { String mData; String mSchemaType; int mSchemaVersion; + Document dom; static DocumentBuilder parser; static { @@ -89,10 +92,12 @@ public class Outcome implements C2KLocalObject { public void setData(String data) { mData = data; + dom = null; } public void setData(Document data) { mData = serialize(data, false); + dom = data; } public String getData() { @@ -131,14 +136,24 @@ public class Outcome implements C2KLocalObject { * @return a DOM Document */ public Document getDOM() { + if (dom == null) try { synchronized (parser) { - return parser.parse(new InputSource(new StringReader(mData))); + dom = parser.parse(new InputSource(new StringReader(mData))); } } catch (Exception e) { Logger.error(e); return null; } + return dom; + } + + public String getField(String name) { + NodeList elements = getDOM().getDocumentElement().getElementsByTagName(name); + if (elements.getLength() == 1 && elements.item(0).hasChildNodes() && elements.item(0).getFirstChild() instanceof Text) + return ((Text)elements.item(0).getFirstChild()).getData(); + else + return null; } static public String serialize(Document doc, boolean prettyPrint) -- cgit v1.2.3