
org.daisy.pipeline.webserviceutils.xml.ScriptXmlWriter Maven / Gradle / Ivy
package org.daisy.pipeline.webserviceutils.xml;
import org.daisy.common.xproc.XProcOptionInfo;
import org.daisy.common.xproc.XProcPortInfo;
import org.daisy.pipeline.script.XProcOptionMetadata;
import org.daisy.pipeline.script.XProcOptionMetadata.Output;
import org.daisy.pipeline.script.XProcPortMetadata;
import org.daisy.pipeline.script.XProcScript;
import org.daisy.pipeline.webserviceutils.Routes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
public class ScriptXmlWriter {
XProcScript script = null;
boolean details = false;
private static Logger logger = LoggerFactory.getLogger(ScriptXmlWriter.class.getName());
public ScriptXmlWriter(XProcScript script) {
this.script = script;
}
public ScriptXmlWriter withDetails() {
details = true;
return this;
}
public Document getXmlDocument() {
if (script == null) {
logger.warn("Could not create XML for null script");
return null;
}
return scriptToXmlDocument(script);
}
// instead of creating a standalone XML document, add an element to an existing document
public void addAsElementChild(Element parent) {
Document doc = parent.getOwnerDocument();
Element scriptElm = doc.createElementNS(XmlUtils.NS_PIPELINE_DATA, "script");
addElementData(script, scriptElm);
parent.appendChild(scriptElm);
}
private Document scriptToXmlDocument(XProcScript script) {
Document doc = XmlUtils.createDom("script");
Element scriptElm = doc.getDocumentElement();
addElementData(script, scriptElm);
// for debugging only
if (!XmlValidator.validate(doc, XmlValidator.SCRIPT_SCHEMA_URL)) {
logger.error("INVALID XML:\n" + XmlUtils.DOMToString(doc));
}
return doc;
}
// element is