Example usage for javax.xml.transform.sax SAXTransformerFactory newTransformer

List of usage examples for javax.xml.transform.sax SAXTransformerFactory newTransformer

Introduction

In this page you can find the example usage for javax.xml.transform.sax SAXTransformerFactory newTransformer.

Prototype

public abstract Transformer newTransformer(Source source) throws TransformerConfigurationException;

Source Link

Document

Process the Source into a Transformer Object .

Usage

From source file:org.apache.fop.tools.EventProducerCollectorTask.java

/**
 * Updates the translation file with new entries for newly found event producer methods.
 * @param modelFile the model file to use
 * @throws IOException if an I/O error occurs
 *//*  ww  w.  ja v a  2 s.co  m*/
protected void updateTranslationFile(File modelFile) throws IOException {
    try {
        boolean resultExists = getTranslationFile().exists();
        SAXTransformerFactory tFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();

        //Generate fresh generated translation file as template
        Source src = new StreamSource(modelFile.toURI().toURL().toExternalForm());
        StreamSource xslt1 = new StreamSource(getClass().getResourceAsStream(MODEL2TRANSLATION));
        if (xslt1.getInputStream() == null) {
            throw new FileNotFoundException(MODEL2TRANSLATION + " not found");
        }
        DOMResult domres = new DOMResult();
        Transformer transformer = tFactory.newTransformer(xslt1);
        transformer.transform(src, domres);
        final Node generated = domres.getNode();

        Node sourceDocument;
        if (resultExists) {
            //Load existing translation file into memory (because we overwrite it later)
            src = new StreamSource(getTranslationFile().toURI().toURL().toExternalForm());
            domres = new DOMResult();
            transformer = tFactory.newTransformer();
            transformer.transform(src, domres);
            sourceDocument = domres.getNode();
        } else {
            //Simply use generated as source document
            sourceDocument = generated;
        }

        //Generate translation file (with potentially new translations)
        src = new DOMSource(sourceDocument);

        //The following triggers a bug in older Xalan versions
        //Result res = new StreamResult(getTranslationFile());
        OutputStream out = new java.io.FileOutputStream(getTranslationFile());
        out = new java.io.BufferedOutputStream(out);
        Result res = new StreamResult(out);
        try {
            StreamSource xslt2 = new StreamSource(getClass().getResourceAsStream(MERGETRANSLATION));
            if (xslt2.getInputStream() == null) {
                throw new FileNotFoundException(MERGETRANSLATION + " not found");
            }
            transformer = tFactory.newTransformer(xslt2);
            transformer.setURIResolver(new URIResolver() {
                public Source resolve(String href, String base) throws TransformerException {
                    if ("my:dom".equals(href)) {
                        return new DOMSource(generated);
                    }
                    return null;
                }
            });
            if (resultExists) {
                transformer.setParameter("generated-url", "my:dom");
            }
            transformer.transform(src, res);
            if (resultExists) {
                log("Translation file updated: " + getTranslationFile());
            } else {
                log("Translation file generated: " + getTranslationFile());
            }
        } finally {
            IOUtils.closeQuietly(out);
        }
    } catch (TransformerException te) {
        throw new IOException(te.getMessage());
    }
}