package it.cnr.isti.driver.utils;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xerces.parsers.DOMParser;
import org.springframework.core.io.Resource;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class ResultFormatter {
	protected Log log = LogFactory.getLog(ResultFormatter.class);
	
	private DOMParser parser;
	private Resource xsltResource;

	public ResultFormatter() {
		parser = new DOMParser();
	}
	
	public String viewDocument(String docXML) {

		try {
			parser.parse(new InputSource(new StringReader(docXML)));
			Document doc = parser.getDocument();
			DOMSource xmlDomSource = new DOMSource(doc);
			TransformerFactory tFactory = TransformerFactory.newInstance();
			Transformer transformer = tFactory.newTransformer(new StreamSource(
					xsltResource.getInputStream()));
			// Transformer transformer = tFactory.newTransformer(new
			// javax.xml.transform.stream.StreamSource("howto.xsl"));
			StringWriter strw = new StringWriter();

			transformer.transform(xmlDomSource,
					new javax.xml.transform.stream.StreamResult(strw));

			return strw.toString();
			// transformer.transform(
			// new javax.xml.transform.stream.StreamSource("howto.xml"),
			// new javax.xml.transform.stream.StreamResult(StringWriter result);

			// transformer.transform(xmlDomSource, domResult);
			// System.out.println(domResult.toString());

		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return null;
	}

	public void setXslt(Resource xslt) {
		this.xsltResource = xslt;
		log.info("got XSLT " + xsltResource );
	}
}
