All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.daisy.pipeline.webserviceutils.xml.ScriptXmlWriter Maven / Gradle / Ivy

There is a newer version: 5.0.0
Show newest version
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