Example usage for javax.xml.transform Transformer setParameter

List of usage examples for javax.xml.transform Transformer setParameter

Introduction

In this page you can find the example usage for javax.xml.transform Transformer setParameter.

Prototype

public abstract void setParameter(String name, Object value);

Source Link

Document

Add a parameter for the transformation.

Usage

From source file:org.pentaho.di.trans.steps.dom.xslt.DOMXslt.java

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
    meta = (DOMXsltMeta) smi;/*  w  w w  . ja va2s  .  c o  m*/
    data = (DOMXsltData) sdi;

    Object[] row = getRow();

    if (row == null) { // no more input to be expected...
        setOutputDone();
        return false;
    }
    if (first) {
        first = false;
        data.outputRowMeta = getInputRowMeta().clone();
        meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore);

        // Check if The result field is given
        if (Const.isEmpty(meta.getResultfieldname())) {
            // Result Field is missing !
            logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorResultFieldMissing"));
            throw new KettleStepException(
                    BaseMessages.getString(PKG, "Xslt.Exception.ErrorResultFieldMissing"));
        }

        // Check if The XML field is given
        if (Const.isEmpty(meta.getFieldname())) {
            // Result Field is missing !
            logError(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing"));
            throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing"));
        }

        // Try to get XML Field index
        data.fieldposition = getInputRowMeta().indexOfValue(meta.getFieldname());
        // Let's check the Field
        if (data.fieldposition < 0) {
            // The field is unreachable !
            logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorFindingField") + "[" + meta.getFieldname()
                    + "]");
            throw new KettleStepException(
                    BaseMessages.getString(PKG, "Xslt.Exception.CouldnotFindField", meta.getFieldname()));
        }

        // Check if the XSL Filename is contained in a column
        if (meta.useXSLField()) {
            if (Const.isEmpty(meta.getXSLFileField())) {
                // The field is missing
                // Result field is missing !
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldMissing"));
                throw new KettleStepException(
                        BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldMissing"));
            }

            // Try to get Field index
            data.fielxslfiledposition = getInputRowMeta().indexOfValue(meta.getXSLFileField());

            // Let's check the Field
            if (data.fielxslfiledposition < 0) {
                // The field is unreachable !
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldFinding") + "["
                        + meta.getXSLFileField() + "]");
                throw new KettleStepException(BaseMessages.getString(PKG,
                        "Xslt.Exception.ErrorXSLFileFieldFinding", meta.getXSLFileField()));
            }

        } else {
            if (Const.isEmpty(meta.getXslFilename())) {
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFile"));
                throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFile"));
            }

            // Check if XSL File exists!
            data.xslfilename = environmentSubstitute(meta.getXslFilename());
            FileObject file = null;
            try {
                file = KettleVFS.getFileObject(data.xslfilename);
                if (!file.exists()) {
                    logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileNotExists", data.xslfilename));
                    throw new KettleStepException(BaseMessages.getString(PKG,
                            "Xslt.Exception.ErrorXSLFileNotExists", data.xslfilename));
                }
                if (file.getType() != FileType.FILE) {
                    logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLNotAFile", data.xslfilename));
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLNotAFile", data.xslfilename));
                }
            } catch (Exception e) {
                throw new KettleStepException(e);
            } finally {
                try {
                    if (file != null) {
                        file.close();
                    }
                } catch (Exception e) { /* Ignore */
                }
            }
        }

        // Check output parameters
        int nrOutputProps = meta.getOutputPropertyName() == null ? 0 : meta.getOutputPropertyName().length;
        if (nrOutputProps > 0) {
            data.outputProperties = new Properties();
            for (int i = 0; i < nrOutputProps; i++) {
                data.outputProperties.put(meta.getOutputPropertyName()[i],
                        environmentSubstitute(meta.getOutputPropertyValue()[i]));
            }
            data.setOutputProperties = true;
        }

        // Check parameters
        data.nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length;
        if (data.nrParams > 0) {
            data.indexOfParams = new int[data.nrParams];
            data.nameOfParams = new String[data.nrParams];
            for (int i = 0; i < data.nrParams; i++) {
                String name = environmentSubstitute(meta.getParameterName()[i]);
                String field = environmentSubstitute(meta.getParameterField()[i]);
                if (Const.isEmpty(field)) {
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldMissing", name, i));
                }
                data.indexOfParams[i] = getInputRowMeta().indexOfValue(field);
                if (data.indexOfParams[i] < 0) {
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldNotFound", name));
                }
                data.nameOfParams[i] = name;
            }
            data.useParameters = true;
        }

        data.factory = TransformerFactory.newInstance();

        if (meta.getXSLFactory().equals("SAXON")) {
            // Set the TransformerFactory to the SAXON implementation.
            data.factory = new net.sf.saxon.TransformerFactoryImpl();
        }

        try {
            data.builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
            throw new KettleStepException(e);
        }

    } // end if first

    // Get the field value
    Document xmlValue = (Document) row[data.fieldposition];
    if (meta.useXSLField()) {
        // Get the value
        data.xslfilename = getInputRowMeta().getString(row, data.fielxslfiledposition);
        if (log.isDetailed()) {
            logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslfileNameFromFied", data.xslfilename,
                    meta.getXSLFileField()));
        }
    }

    try {

        if (log.isDetailed()) {
            if (meta.isXSLFieldIsAFile()) {
                logDetailed(BaseMessages.getString(PKG, "Xslt.Log.Filexsl") + data.xslfilename);
            } else {
                logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslStream", data.xslfilename));
            }
        }

        // Get the template from the cache
        Transformer transformer = data.getTemplate(data.xslfilename, data.xslIsAfile);

        // Do we need to set output properties?
        if (data.setOutputProperties) {
            transformer.setOutputProperties(data.outputProperties);
        }

        // Do we need to pass parameters?
        if (data.useParameters) {
            for (int i = 0; i < data.nrParams; i++) {
                transformer.setParameter(data.nameOfParams[i], row[data.indexOfParams[i]]);
            }
        }

        Source source = new DOMSource(xmlValue);
        // Prepare output stream

        Document doc = data.builder.newDocument();

        // transform xml source
        DOMResult result = new DOMResult(doc);

        transformer.transform(source, result);

        //By default the DOMResult object creates a Document node to hold the output:
        Document outputDocument = (Document) result.getNode();

        if (log.isDetailed()) {
            logDetailed(BaseMessages.getString(PKG, "Xslt.Log.FileResult"));
            //logDetailed( xmlString );
        }
        Object[] outputRowData = RowDataUtil.addValueData(row, getInputRowMeta().size(), outputDocument);

        if (log.isRowLevel()) {
            logRowlevel(
                    BaseMessages.getString(PKG, "Xslt.Log.ReadRow") + " " + getInputRowMeta().getString(row));
        }

        // add new values to the row.
        putRow(data.outputRowMeta, outputRowData); // copy row to output rowset(s);

    } catch (Exception e) {
        String errorMessage = e.getMessage();
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        DefaultErrorHandler.printLocation(pw, e);
        pw.close();
        errorMessage = sw.toString() + "\n" + errorMessage;

        if (getStepMeta().isDoingErrorHandling()) {
            // Simply add this row to the error row
            putError(getInputRowMeta(), row, 1, errorMessage, meta.getResultfieldname(), "XSLT01");
        } else {
            logError(BaseMessages.getString(PKG, "Xslt.ErrorProcesing" + " : " + errorMessage));
            throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.ErrorProcesing"), e);
        }
    }

    return true;
}

From source file:org.pentaho.di.trans.steps.xslt.Xslt.java

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
    meta = (XsltMeta) smi;/*from  w  ww.java  2  s  . c o  m*/
    data = (XsltData) sdi;

    Object[] row = getRow();

    if (row == null) { // no more input to be expected...
        setOutputDone();
        return false;
    }
    if (first) {
        first = false;
        data.outputRowMeta = getInputRowMeta().clone();
        meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore);

        // Check if The result field is given
        if (Const.isEmpty(meta.getResultfieldname())) {
            // Result Field is missing !
            logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorResultFieldMissing"));
            throw new KettleStepException(
                    BaseMessages.getString(PKG, "Xslt.Exception.ErrorResultFieldMissing"));
        }

        // Check if The XML field is given
        if (Const.isEmpty(meta.getFieldname())) {
            // Result Field is missing !
            logError(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing"));
            throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing"));
        }

        // Try to get XML Field index
        data.fieldposition = getInputRowMeta().indexOfValue(meta.getFieldname());
        // Let's check the Field
        if (data.fieldposition < 0) {
            // The field is unreachable !
            logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorFindingField") + "[" + meta.getFieldname()
                    + "]");
            throw new KettleStepException(
                    BaseMessages.getString(PKG, "Xslt.Exception.CouldnotFindField", meta.getFieldname()));
        }

        // Check if the XSL Filename is contained in a column
        if (meta.useXSLField()) {
            if (Const.isEmpty(meta.getXSLFileField())) {
                // The field is missing
                // Result field is missing !
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldMissing"));
                throw new KettleStepException(
                        BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldMissing"));
            }

            // Try to get Field index
            data.fielxslfiledposition = getInputRowMeta().indexOfValue(meta.getXSLFileField());

            // Let's check the Field
            if (data.fielxslfiledposition < 0) {
                // The field is unreachable !
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldFinding") + "["
                        + meta.getXSLFileField() + "]");
                throw new KettleStepException(BaseMessages.getString(PKG,
                        "Xslt.Exception.ErrorXSLFileFieldFinding", meta.getXSLFileField()));
            }

        } else {
            if (Const.isEmpty(meta.getXslFilename())) {
                logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFile"));
                throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFile"));
            }

            // Check if XSL File exists!
            data.xslfilename = environmentSubstitute(meta.getXslFilename());
            FileObject file = null;
            try {
                file = KettleVFS.getFileObject(data.xslfilename);
                if (!file.exists()) {
                    logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileNotExists", data.xslfilename));
                    throw new KettleStepException(BaseMessages.getString(PKG,
                            "Xslt.Exception.ErrorXSLFileNotExists", data.xslfilename));
                }
                if (file.getType() != FileType.FILE) {
                    logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLNotAFile", data.xslfilename));
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLNotAFile", data.xslfilename));
                }
            } catch (Exception e) {
                throw new KettleStepException(e);
            } finally {
                try {
                    if (file != null) {
                        file.close();
                    }
                } catch (Exception e) { /* Ignore */
                }
            }
        }

        // Check output parameters
        int nrOutputProps = meta.getOutputPropertyName() == null ? 0 : meta.getOutputPropertyName().length;
        if (nrOutputProps > 0) {
            data.outputProperties = new Properties();
            for (int i = 0; i < nrOutputProps; i++) {
                data.outputProperties.put(meta.getOutputPropertyName()[i],
                        environmentSubstitute(meta.getOutputPropertyValue()[i]));
            }
            data.setOutputProperties = true;
        }

        // Check parameters
        data.nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length;
        if (data.nrParams > 0) {
            data.indexOfParams = new int[data.nrParams];
            data.nameOfParams = new String[data.nrParams];
            for (int i = 0; i < data.nrParams; i++) {
                String name = environmentSubstitute(meta.getParameterName()[i]);
                String field = environmentSubstitute(meta.getParameterField()[i]);
                if (Const.isEmpty(field)) {
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldMissing", name, i));
                }
                data.indexOfParams[i] = getInputRowMeta().indexOfValue(field);
                if (data.indexOfParams[i] < 0) {
                    throw new KettleStepException(
                            BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldNotFound", name));
                }
                data.nameOfParams[i] = name;
            }
            data.useParameters = true;
        }

        data.factory = TransformerFactory.newInstance();

        if (meta.getXSLFactory().equals("SAXON")) {
            // Set the TransformerFactory to the SAXON implementation.
            data.factory = new net.sf.saxon.TransformerFactoryImpl();
        }
    } // end if first

    // Get the field value
    String xmlValue = getInputRowMeta().getString(row, data.fieldposition);

    if (meta.useXSLField()) {
        // Get the value
        data.xslfilename = getInputRowMeta().getString(row, data.fielxslfiledposition);
        if (log.isDetailed()) {
            logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslfileNameFromFied", data.xslfilename,
                    meta.getXSLFileField()));
        }
    }

    try {

        if (log.isDetailed()) {
            if (meta.isXSLFieldIsAFile()) {
                logDetailed(BaseMessages.getString(PKG, "Xslt.Log.Filexsl") + data.xslfilename);
            } else {
                logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslStream", data.xslfilename));
            }
        }

        // Get the template from the cache
        Transformer transformer = data.getTemplate(data.xslfilename, data.xslIsAfile);

        // Do we need to set output properties?
        if (data.setOutputProperties) {
            transformer.setOutputProperties(data.outputProperties);
        }

        // Do we need to pass parameters?
        if (data.useParameters) {
            for (int i = 0; i < data.nrParams; i++) {
                transformer.setParameter(data.nameOfParams[i], row[data.indexOfParams[i]]);
            }
        }

        Source source = new StreamSource(new StringReader(xmlValue));
        // Prepare output stream
        StreamResult result = new StreamResult(new StringWriter());
        // transform xml source
        transformer.transform(source, result);

        String xmlString = result.getWriter().toString();
        if (log.isDetailed()) {
            logDetailed(BaseMessages.getString(PKG, "Xslt.Log.FileResult"));
            logDetailed(xmlString);
        }
        Object[] outputRowData = RowDataUtil.addValueData(row, getInputRowMeta().size(), xmlString);

        if (log.isRowLevel()) {
            logRowlevel(
                    BaseMessages.getString(PKG, "Xslt.Log.ReadRow") + " " + getInputRowMeta().getString(row));
        }

        // add new values to the row.
        putRow(data.outputRowMeta, outputRowData); // copy row to output rowset(s);

    } catch (Exception e) {
        String errorMessage = e.getMessage();
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        DefaultErrorHandler.printLocation(pw, e);
        pw.close();
        errorMessage = sw.toString() + "\n" + errorMessage;

        if (getStepMeta().isDoingErrorHandling()) {
            // Simply add this row to the error row
            putError(getInputRowMeta(), row, 1, errorMessage, meta.getResultfieldname(), "XSLT01");
        } else {
            logError(BaseMessages.getString(PKG, "Xslt.ErrorProcesing" + " : " + errorMessage));
            throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.ErrorProcesing"), e);
        }
    }

    return true;
}

From source file:org.pentaho.platform.util.xml.XmlHelper.java

/**
 * Use the transform specified by xslSrc and transform the document specified by docSrc, and return the resulting
 * document./*from ww w .  j  a v  a2  s .  co m*/
 * 
 * @param xslSrc
 *          StreamSrc containing the xsl transform
 * @param docSrc
 *          StreamSrc containing the document to be transformed
 * @param params
 *          Map of properties to set on the transform
 * @param resolver
 *          URIResolver instance to resolve URI's in the output document.
 * 
 * @return StringBuffer containing the XML results of the transform
 * @throws TransformerConfigurationException
 *           if the TransformerFactory fails to create a Transformer.
 * @throws TransformerException
 *           if actual transform fails.
 */
protected static final StringBuffer transformXml(final StreamSource xslSrc, final StreamSource docSrc,
        final Map params, final URIResolver resolver)
        throws TransformerConfigurationException, TransformerException {

    StringBuffer sb = null;
    StringWriter writer = new StringWriter();

    TransformerFactory tf = TransformerFactory.newInstance();
    if (null != resolver) {
        tf.setURIResolver(resolver);
    }
    // TODO need to look into compiling the XSLs...
    Transformer t = tf.newTransformer(xslSrc); // can throw
    // TransformerConfigurationException
    // Start the transformation
    if (params != null) {
        Set keys = params.keySet();
        Iterator it = keys.iterator();
        String key, val;
        while (it.hasNext()) {
            key = (String) it.next();
            val = (String) params.get(key);
            if (val != null) {
                t.setParameter(key, val);
            }
        }
    }
    t.transform(docSrc, new StreamResult(writer)); // can throw
    // TransformerException
    sb = writer.getBuffer();

    return sb;
}

From source file:org.pepstock.jem.ant.validator.transformer.TransformerValidator.java

/**
 * Inits the transformer, load the xslt and validate it, load jem properties
 * During the transformation, the transformer onbject is locked, so the file
 * listner is inhibited to do a refresh.
 * //from w  w w .  ja va 2  s .co m
 * @param xsltvalidatorFile the xslt file
 * @return the transformer
 * @throws ValidationException the validation exception
 */
private Transformer createTransformer(String xsltvalidatorFile) throws ValidationException {

    Transformer t = null;

    // Instantiate a TransformerFactory
    TransformerFactory tFactory = TransformerFactory.newInstance();

    // add error listner to capture validation error.
    ErrorListener tfel = new TransformerFactoryErrorListener();
    tFactory.setErrorListener(tfel);

    // check the transformer compliant
    if (!tFactory.getFeature(SAXTransformerFactory.FEATURE)) {
        throw new ValidationException(AntMessage.JEMA050E.toMessage().getFormattedMessage());
    }

    // activate xalan extension NodeInfo to map source xml code position
    tFactory.setAttribute(TransformerFactoryImpl.FEATURE_SOURCE_LOCATION, Boolean.TRUE);

    StreamSource ss = new StreamSource(xsltvalidatorFile);
    try {
        // A Transformer may be used multiple times.
        // Parameters and output properties are preserved across
        // transformations.
        t = tFactory.newTransformer(ss);
    } catch (TransformerConfigurationException e) {
        throw new ValidationException(AntMessage.JEMA047E.toMessage().getFormattedMessage(e.getMessage()), e);
    }

    // add custom error listener, necessary to avoid internal catch
    // of exception throwed by xslt
    ErrorListener el = new TransformerErrorListener();
    t.setErrorListener(el);

    // pass the parameter list to the xslt
    for (Object key : System.getProperties().keySet()) {
        String keyString = key.toString();
        String value = System.getProperty(keyString);
        t.setParameter(keyString, value);
    }
    for (String key : System.getenv().keySet()) {
        String value = System.getenv().get(key);
        t.setParameter(key, value);
    }

    return t;
}

From source file:org.portletbridge.portlet.PortletBridgePortlet.java

public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    try {//from w w w.j  a  va 2s  .c  om
        super.render(request, response);
    } catch (Throwable exception) {
        // getPortletConfig().getPortletContext().log(exception.getMessage(), exception);
        // using this instead because pluto doesn't seem to print out portletcontext logs
        log.warn(exception, exception);
        response.setContentType("text/html");
        try {
            Transformer transformer = errorTemplates.newTransformer();
            transformer.setParameter("portlet", new PortletFunctions(request, response));
            transformer.setParameter("exception", exception);
            transformer.transform(new StreamSource(new StringReader("<xml/>")),
                    new StreamResult(response.getWriter()));
        } catch (TransformerConfigurationException e) {
            throw new PortletException(e);
        } catch (TransformerException e) {
            throw new PortletException(e);
        } catch (IOException e) {
            throw new PortletException(e);
        }
    }
}

From source file:org.projectforge.framework.renderer.PdfRenderer.java

public byte[] render(final String stylesheet, final String groovyXml, final Map<String, Object> data) {
    final PFUserDO user = ThreadLocalUserContext.getUser();
    data.put("createdLabel", ThreadLocalUserContext.getLocalizedString("created"));
    data.put("loggedInUser", user);
    data.put("baseDir", configurationService.getResourceDir());
    data.put("logoFile", configurationService.getResourceDir() + "/images/" + logoFileName);
    data.put("appId", AppVersion.APP_ID);
    data.put("appVersion", AppVersion.NUMBER);
    data.put("organization", StringUtils.defaultString(
            Configuration.getInstance().getStringValue(ConfigurationParam.ORGANIZATION), AppVersion.APP_ID));
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    log.info("stylesheet=" + stylesheet + ", jellyXml=" + groovyXml + ", baseDir="
            + configurationService.getResourceDir() + ", fontBaseDir=" + getFontResourcePath());

    // configure fopFactory as desired
    final FopFactory fopFactory = FopFactory.newInstance();

    try {/* w  w  w.  ja v  a  2 s.  c o  m*/
        fopFactory.getFontManager().setFontBaseURL(getFontResourcePath());
    } catch (final MalformedURLException ex) {
        log.error(ex.getMessage(), ex);
    }

    final FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    try {
        foUserAgent.getFactory().getFontManager().setFontBaseURL(getFontResourcePath());
    } catch (final MalformedURLException ex) {
        log.error(ex.getMessage(), ex);
    }
    // configure foUserAgent as desired

    InputStream xsltInputStream = null;
    try {
        // Construct fop with desired output format
        final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, baos);

        // Setup XSLT
        final TransformerFactory factory = TransformerFactory.newInstance();
        Object[] result = configurationService.getResourceAsInputStream(stylesheet);
        xsltInputStream = (InputStream) result[0];
        final StreamSource xltStreamSource = new StreamSource(xsltInputStream);
        final String url = (String) result[1];
        if (url == null) {
            log.error("Url of xsl resource is null.");
            throw new InternalErrorException();
        }
        xltStreamSource.setSystemId(url);

        final Transformer transformer = factory.newTransformer(xltStreamSource);

        // Set the value of a <param> in the stylesheet
        for (final Map.Entry<String, Object> entry : data.entrySet()) {
            transformer.setParameter(entry.getKey(), entry.getValue());
        }

        // First run jelly through xmlData:
        result = configurationService.getResourceContentAsString(groovyXml);
        final GroovyEngine groovyEngine = new GroovyEngine(configurationService, data,
                ThreadLocalUserContext.getLocale(), ThreadLocalUserContext.getTimeZone());
        final String groovyXmlInput = groovyEngine.preprocessGroovyXml((String) result[0]);
        final String xmlData = groovyEngine.executeTemplate(groovyXmlInput);

        // Setup input for XSLT transformation
        final StringReader xmlDataReader = new StringReader(xmlData);
        final Source src = new StreamSource(xmlDataReader);

        // Resulting SAX events (the generated FO) must be piped through to FOP
        final Result res = new SAXResult(fop.getDefaultHandler());

        // Start XSLT transformation and FOP processing
        transformer.transform(src, res);
    } catch (final FOPException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } catch (final TransformerConfigurationException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } catch (final TransformerException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } finally {
        try {
            baos.close();
        } catch (final IOException ex) {
            log.error(ex.getMessage(), ex);
            throw new RuntimeException(ex);
        }
        IOUtils.closeQuietly(xsltInputStream);
    }
    return baos.toByteArray();
}

From source file:org.projectforge.renderer.PdfRenderer.java

public byte[] render(final String stylesheet, final String groovyXml, final Map<String, Object> data) {
    // initialize();
    final PFUserDO user = PFUserContext.getUser();
    data.put("createdLabel", PFUserContext.getLocalizedString("created"));
    data.put("loggedInUser", user);
    data.put("baseDir", configXml.getResourcePath());
    data.put("appId", AppVersion.APP_ID);
    data.put("appVersion", AppVersion.NUMBER);
    data.put("organization", StringUtils.defaultString(
            Configuration.getInstance().getStringValue(ConfigurationParam.ORGANIZATION), AppVersion.APP_ID));
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    log.info("stylesheet=" + stylesheet + ", jellyXml=" + groovyXml + ", baseDir=" + configXml.getResourcePath()
            + ", fontBaseDir=" + getFontResourcePath());
    // fopRenderer.processFo(styleSheet, xmlData, data, new PdfFopOutput(baos));
    // return baos.toByteArray();

    // configure fopFactory as desired
    final FopFactory fopFactory = FopFactory.newInstance();
    // Configuration cfg = fopFactory.getUserConfig();

    try {//  w  w  w  .ja v a 2  s  . co m
        fopFactory.getFontManager().setFontBaseURL(getFontResourcePath());
    } catch (final MalformedURLException ex) {
        log.error(ex.getMessage(), ex);
    }
    /*
     * try { fopFactory.setUserConfig(baseDir + "/fop.config"); } catch (SAXException ex) { log.error(ex.getMessage(), ex); throw new
     * RuntimeException(ex); } catch (IOException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); }
     */
    final FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    try {
        foUserAgent.getFactory().getFontManager().setFontBaseURL(getFontResourcePath());
    } catch (final MalformedURLException ex) {
        log.error(ex.getMessage(), ex);
    }
    // configure foUserAgent as desired

    try {
        // Construct fop with desired output format
        final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, baos);

        // Setup XSLT
        final TransformerFactory factory = TransformerFactory.newInstance();
        Object[] result = configXml.getInputStream(stylesheet);
        final InputStream xsltInputStream = (InputStream) result[0];
        final StreamSource xltStreamSource = new StreamSource(xsltInputStream);
        final String url = (String) result[1];
        if (url == null) {
            log.error("Url of xsl resource is null.");
            throw new InternalErrorException();
        }
        xltStreamSource.setSystemId(url);

        final Transformer transformer = factory.newTransformer(xltStreamSource);

        // Set the value of a <param> in the stylesheet
        for (final Map.Entry<String, Object> entry : data.entrySet()) {
            transformer.setParameter(entry.getKey(), entry.getValue());
        }

        // First run jelly through xmlData:
        result = configXml.getContent(groovyXml);
        final GroovyEngine groovyEngine = new GroovyEngine(data, PFUserContext.getLocale(),
                PFUserContext.getTimeZone());
        final String groovyXmlInput = groovyEngine.preprocessGroovyXml((String) result[0]);
        final String xmlData = groovyEngine.executeTemplate(groovyXmlInput);

        // Setup input for XSLT transformation
        final StringReader xmlDataReader = new StringReader(xmlData);
        final Source src = new StreamSource(xmlDataReader);

        // Resulting SAX events (the generated FO) must be piped through to FOP
        final Result res = new SAXResult(fop.getDefaultHandler());

        // Start XSLT transformation and FOP processing
        transformer.transform(src, res);
    } catch (final FOPException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } catch (final TransformerConfigurationException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } catch (final TransformerException ex) {
        log.error(ex.getMessage(), ex);
        throw new RuntimeException(ex);
    } finally {
        try {
            baos.close();
        } catch (final IOException ex) {
            log.error(ex.getMessage(), ex);
            throw new RuntimeException(ex);
        }
    }
    return baos.toByteArray();
}

From source file:org.roda.core.common.RodaUtils.java

/**
 * INFO 20160711 this method does not cache stylesheet related resources
 *//*from   w ww .  ja  va2 s  . co m*/
public static void applyStylesheet(Reader xsltReader, Reader fileReader, Map<String, String> parameters,
        Writer result) throws IOException, TransformerException {

    TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
    factory.setURIResolver(new RodaURIFileResolver());
    Source xsltSource = new StreamSource(xsltReader);
    Transformer transformer = factory.newTransformer(xsltSource);
    for (Entry<String, String> parameter : parameters.entrySet()) {
        transformer.setParameter(parameter.getKey(), parameter.getValue());
    }
    try {
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setEntityResolver(new RodaEntityResolver());
        InputSource source = new InputSource(fileReader);
        Source text = new SAXSource(xmlReader, source);
        transformer.transform(text, new StreamResult(result));
    } catch (SAXException se) {
        LOGGER.error(se.getMessage(), se);
    }
}

From source file:org.sakaiproject.calendar.impl.BaseCalendarService.java

/**
 * Takes a DOM structure and renders a PDF
 * /*w  w w  .j  a v a 2s  .c  om*/
 * @param doc
 *        DOM structure
 * @param xslFileName
 *        XSL file to use to translate the DOM document to FOP
 */
protected void generatePDF(Document doc, String xslFileName, OutputStream streamOut) {
    Driver driver = new Driver();

    org.apache.avalon.framework.logger.Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_ERROR);
    MessageHandler.setScreenLogger(logger);
    driver.setLogger(logger);

    try {
        String baseDir = getClass().getClassLoader().getResource(FOP_FONTBASEDIR).toString();
        Configuration.put("fontBaseDir", baseDir);
        InputStream userConfig = getClass().getClassLoader().getResourceAsStream(FOP_USERCONFIG);
        new Options(userConfig);
    } catch (FOPException fe) {
        M_log.warn(this + ".generatePDF: ", fe);
    } catch (Exception e) {
        M_log.warn(this + ".generatePDF: ", e);
    }

    driver.setOutputStream(streamOut);
    driver.setRenderer(Driver.RENDER_PDF);

    try {
        InputStream in = getClass().getClassLoader().getResourceAsStream(xslFileName);
        Transformer transformer = transformerFactory.newTransformer(new StreamSource(in));

        Source src = new DOMSource(doc);

        java.util.Calendar c = java.util.Calendar.getInstance(m_timeService.getLocalTimeZone(),
                new ResourceLoader().getLocale());
        CalendarUtil calUtil = new CalendarUtil(c);
        String[] dayNames = calUtil.getCalendarDaysOfWeekNames(true);
        String[] monthNames = calUtil.getCalendarMonthNames(true);

        // Kludge: Xalan in JDK 1.4/1.5 does not properly resolve java classes 
        // (http://xml.apache.org/xalan-j/faq.html#jdk14)
        // Clean this up in JDK 1.6 and pass ResourceBundle/ArrayList parms
        transformer.setParameter("dayNames0", dayNames[0]);
        transformer.setParameter("dayNames1", dayNames[1]);
        transformer.setParameter("dayNames2", dayNames[2]);
        transformer.setParameter("dayNames3", dayNames[3]);
        transformer.setParameter("dayNames4", dayNames[4]);
        transformer.setParameter("dayNames5", dayNames[5]);
        transformer.setParameter("dayNames6", dayNames[6]);

        transformer.setParameter("jan", monthNames[0]);
        transformer.setParameter("feb", monthNames[1]);
        transformer.setParameter("mar", monthNames[2]);
        transformer.setParameter("apr", monthNames[3]);
        transformer.setParameter("may", monthNames[4]);
        transformer.setParameter("jun", monthNames[5]);
        transformer.setParameter("jul", monthNames[6]);
        transformer.setParameter("aug", monthNames[7]);
        transformer.setParameter("sep", monthNames[8]);
        transformer.setParameter("oct", monthNames[9]);
        transformer.setParameter("nov", monthNames[10]);
        transformer.setParameter("dec", monthNames[11]);

        transformer.setParameter("site", rb.getString("event.site"));
        transformer.setParameter("event", rb.getString("event.event"));
        transformer.setParameter("location", rb.getString("event.location"));
        transformer.setParameter("type", rb.getString("event.type"));
        transformer.setParameter("from", rb.getString("event.from"));

        transformer.setParameter("sched", rb.getString("sched.for"));
        transformer.transform(src, new SAXResult(driver.getContentHandler()));
    }

    catch (TransformerException e) {
        e.printStackTrace();
        M_log.warn(this + ".generatePDF(): " + e);
        return;
    }
}

From source file:org.sakaiproject.site.tool.SiteInfoToolServlet.java

/**
 * Takes a DOM structure and renders a PDF
 * //  ww  w  .  jav  a  2s  .c o  m
 * @param doc
 *        DOM structure
 * @param xslFileName
 *        XSL file to use to translate the DOM document to FOP
 */
@SuppressWarnings("unchecked")
protected void generatePDF(Document doc, OutputStream streamOut) {
    String xslFileName = "participants-all-attrs.xsl";
    Locale currentLocale = rb.getLocale();
    if (currentLocale != null) {
        String fullLocale = currentLocale.toString();
        xslFileName = "participants-all-attrs_" + fullLocale + ".xsl";
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(xslFileName);
        if (inputStream == null) {
            xslFileName = "participants-all-attrs_" + currentLocale.getCountry() + ".xsl";
            inputStream = getClass().getClassLoader().getResourceAsStream(xslFileName);
            if (inputStream == null) {
                //We use the default file
                xslFileName = "participants-all-attrs.xsl";
            }
        }

        IOUtils.closeQuietly(inputStream);
    }
    String configFileName = "userconfig.xml";
    DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
    InputStream configInputStream = null;
    try {
        configInputStream = getClass().getClassLoader().getResourceAsStream(configFileName);
        Configuration cfg = cfgBuilder.build(configInputStream);

        FopFactory fopFactory = FopFactory.newInstance();
        fopFactory.setUserConfig(cfg);
        fopFactory.setStrictValidation(false);
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
        if (!StringUtils.isEmpty(ServerConfigurationService.getString("pdf.default.font"))) {
            // this allows font substitution to support i18n chars in PDFs - SAK-21909
            FontQualifier fromQualifier = new FontQualifier();
            fromQualifier.setFontFamily("DEFAULT_FONT");
            FontQualifier toQualifier = new FontQualifier();
            toQualifier.setFontFamily(ServerConfigurationService.getString("pdf.default.font", "Helvetica"));
            FontSubstitutions result = new FontSubstitutions();
            result.add(new FontSubstitution(fromQualifier, toQualifier));
            fopFactory.getFontManager().setFontSubstitutions(result);
        }
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, streamOut);
        InputStream in = getClass().getClassLoader().getResourceAsStream(xslFileName);
        Transformer transformer = transformerFactory.newTransformer(new StreamSource(in));
        transformer.setParameter("titleName", rb.getString("sitegen.siteinfolist.title.name"));
        transformer.setParameter("titleSection", rb.getString("sitegen.siteinfolist.title.section"));
        transformer.setParameter("titleId", rb.getString("sitegen.siteinfolist.title.id"));
        transformer.setParameter("titleCredit", rb.getString("sitegen.siteinfolist.title.credit"));
        transformer.setParameter("titleRole", rb.getString("sitegen.siteinfolist.title.role"));
        transformer.setParameter("titleStatus", rb.getString("sitegen.siteinfolist.title.status"));

        Source src = new DOMSource(doc);
        transformer.transform(src, new SAXResult(fop.getDefaultHandler()));
    } catch (Exception e) {
        e.printStackTrace();
        log.warn(this + ".generatePDF(): " + e);
        return;
    } finally {
        IOUtils.closeQuietly(configInputStream);
    }
}