summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorabranson <andrew.branson@cern.ch>2012-03-13 15:50:44 +0100
committerabranson <andrew.branson@cern.ch>2012-03-13 15:50:44 +0100
commit6775b5fc7de8884577533fa84ac703366539e043 (patch)
treea1d0e192c24af8e95e37ad7de80fc744ca890ee7
parent612739b1dc0c78d45c0e6be995c094d1f284d3f6 (diff)
More efficient DOM handling, getField() utility method for scripts
-rw-r--r--source/com/c2kernel/persistency/outcome/Outcome.java17
1 files changed, 16 insertions, 1 deletions
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)