package logica.reportes;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * Transformador de xml con xsl generalizado el cual utiliza un objeto Transformer.
 */
public class XslTransformer {

    /**
     * Transforma un xml a un archivo deseado con un xsl creado con anterioridad
     * @param xslDocS Ruta del archivo xsl que realizara la transformacion
     * @param xmlDocS Ruta al archivo xml al que se le aplicara la transformacion
     * @param outputDocS Ruta en la cual se guardara el archivo resultante
     * @throws FileNotFoundException
     * @throws TransformerException
     */
    public static void transform(String xslDocS, String xmlDocS, String outputDocS) throws FileNotFoundException, TransformerException {
        //Se crea transformer factory el cual creara el objeto transformer
        TransformerFactory tFactory = TransformerFactory.newInstance();
        //Fuente del archivo xsl
        Source xslDoc = new StreamSource(xslDocS);
        //Fuente archivo xml
        Source xmlDoc = new StreamSource(xmlDocS);
        //Path del archivo de salida
        String outputFileName = outputDocS;
        //Se crea OutputStream con direccion al path de archivo de salida
        OutputStream htmlFile = new FileOutputStream(outputFileName);
        //Se crea el transformer respecto al archivo xsl
        Transformer trasform = tFactory.newTransformer(xslDoc);
        //Se transforma el documento xsl y se envia al documento de salida
        trasform.transform(xmlDoc, new StreamResult(htmlFile));
    }
}
