001package org.nuxeo.template.processors.xslt; 002 003import java.io.ByteArrayOutputStream; 004import java.io.IOException; 005import java.util.ArrayList; 006import java.util.List; 007 008import javax.xml.transform.ErrorListener; 009import javax.xml.transform.Transformer; 010import javax.xml.transform.TransformerConfigurationException; 011import javax.xml.transform.TransformerException; 012import javax.xml.transform.TransformerFactory; 013import javax.xml.transform.stream.StreamResult; 014import javax.xml.transform.stream.StreamSource; 015 016import org.nuxeo.common.utils.FileUtils; 017import org.nuxeo.ecm.core.api.Blob; 018import org.nuxeo.ecm.core.api.NuxeoException; 019import org.nuxeo.ecm.core.api.blobholder.BlobHolder; 020import org.nuxeo.ecm.core.api.impl.blob.ByteArrayBlob; 021import org.nuxeo.template.api.TemplateInput; 022import org.nuxeo.template.api.TemplateProcessor; 023import org.nuxeo.template.api.adapters.TemplateBasedDocument; 024import org.nuxeo.template.processors.AbstractTemplateProcessor; 025 026public class XSLTProcessor extends AbstractTemplateProcessor implements TemplateProcessor { 027 028 @Override 029 public Blob renderTemplate(TemplateBasedDocument templateBasedDocument, String templateName) { 030 031 BlobHolder bh = templateBasedDocument.getAdaptedDoc().getAdapter(BlobHolder.class); 032 if (bh == null) { 033 return null; 034 } 035 036 Blob xmlContent = bh.getBlob(); 037 if (xmlContent == null) { 038 return null; 039 } 040 041 Blob sourceTemplateBlob = getSourceTemplateBlob(templateBasedDocument, templateName); 042 043 TransformerFactory tFactory = TransformerFactory.newInstance(); 044 Transformer transformer; 045 try { 046 transformer = tFactory.newTransformer(new StreamSource(sourceTemplateBlob.getStream())); 047 } catch (TransformerConfigurationException | IOException e) { 048 throw new NuxeoException(e); 049 } 050 transformer.setErrorListener(new ErrorListener() { 051 052 @Override 053 public void warning(TransformerException exception) throws TransformerException { 054 log.warn("Problem during transformation", exception); 055 } 056 057 @Override 058 public void fatalError(TransformerException exception) throws TransformerException { 059 log.error("Fatal error during transformation", exception); 060 } 061 062 @Override 063 public void error(TransformerException exception) throws TransformerException { 064 log.error("Error during transformation", exception); 065 } 066 }); 067 transformer.setURIResolver(null); 068 069 ByteArrayOutputStream out = new ByteArrayOutputStream(); 070 071 try { 072 transformer.transform(new StreamSource(xmlContent.getStream()), new StreamResult(out)); 073 } catch (TransformerException | IOException e) { 074 throw new NuxeoException(e); 075 } 076 077 Blob result = new ByteArrayBlob(out.toByteArray(), "text/xml"); 078 String targetFileName = FileUtils.getFileNameNoExt(templateBasedDocument.getAdaptedDoc().getTitle()); 079 // result.setFilename(targetFileName + ".xml"); 080 result.setFilename(targetFileName + ".html"); 081 082 return result; 083 084 } 085 086 @Override 087 public List<TemplateInput> getInitialParametersDefinition(Blob blob) { 088 return new ArrayList<TemplateInput>(); 089 } 090 091}