+++ /dev/null
-package org.argeo.cms.integration;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-public class XslTemplate {
- private Transformer transformer;
-
- public XslTemplate(InputStream in, String systemId) {
- this(loadTransformer(in, systemId));
- }
-
- public XslTemplate(Transformer transformer) {
- this.transformer = transformer;
- }
-
- private static Transformer loadTransformer(InputStream in, String systemId) {
- try {
- TransformerFactory tFactory = TransformerFactory.newInstance();
- StreamSource stylesource = new StreamSource(in, systemId);
- return tFactory.newTransformer(stylesource);
- } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) {
- throw new IllegalArgumentException("Cannot initialise stylesheet with systemId " + systemId, e);
- }
- }
-
- public synchronized void apply(Node node, OutputStream out) {
- // TODO use a pool of Transformer instead of synchronized
- try (ByteArrayOutputStream xml = new ByteArrayOutputStream()) {
- node.getSession().exportDocumentView(node.getPath(), xml, true, false);
- try (ByteArrayInputStream xmlIn = new ByteArrayInputStream(xml.toByteArray())) {
- Source source = new StreamSource(xmlIn);
- Result results = new StreamResult(out);
- transformer.transform(source, results);
- }
- } catch (IOException | RepositoryException | TransformerException e) {
- throw new RuntimeException("Cannot process XSL template on " + node, e);
- }
- }
-}