1 package org
.argeo
.slc
.core
.test
.tree
;
4 import java
.io
.FileOutputStream
;
5 import java
.io
.InputStream
;
6 import java
.io
.OutputStream
;
8 import javax
.xml
.parsers
.DocumentBuilder
;
9 import javax
.xml
.parsers
.DocumentBuilderFactory
;
10 import javax
.xml
.transform
.Templates
;
11 import javax
.xml
.transform
.Transformer
;
12 import javax
.xml
.transform
.TransformerFactory
;
13 import javax
.xml
.transform
.dom
.DOMResult
;
14 import javax
.xml
.transform
.dom
.DOMSource
;
15 import javax
.xml
.transform
.stream
.StreamResult
;
16 import javax
.xml
.transform
.stream
.StreamSource
;
18 import org
.springframework
.core
.io
.Resource
;
19 import org
.springframework
.oxm
.Marshaller
;
20 import org
.springframework
.xml
.transform
.StringResult
;
21 import org
.w3c
.dom
.Document
;
23 import org
.apache
.commons
.io
.IOUtils
;
24 import org
.apache
.commons
.logging
.Log
;
25 import org
.apache
.commons
.logging
.LogFactory
;
27 import org
.argeo
.slc
.core
.SlcException
;
28 import org
.argeo
.slc
.core
.test
.TestResultListener
;
29 import org
.argeo
.slc
.core
.test
.TestResultPart
;
31 public class XsltReportGenerator
implements TestResultListener
<TreeTestResult
> {
32 private Log log
= LogFactory
.getLog(getClass());
34 private DocumentBuilder documentBuilder
= null;
36 private Resource xsltStyleSheet
;
38 private Templates templates
;
40 private Marshaller marshaller
;
42 private String outputDir
;
43 private String outputFileExtension
= "html";
45 private Boolean logXml
= false;
48 if (templates
!= null)
51 if (xsltStyleSheet
== null)
52 throw new SlcException("XSLT style sheet not specified.");
54 InputStream in
= null;
56 TransformerFactory transformerFactory
= TransformerFactory
58 in
= xsltStyleSheet
.getInputStream();
59 StreamSource xsltSource
= new StreamSource(in
);
60 templates
= transformerFactory
.newTemplates(xsltSource
);
61 } catch (Exception e
) {
62 throw new SlcException("Could not initialize templates", e
);
64 IOUtils
.closeQuietly(in
);
68 public void resultPartAdded(TreeTestResult testResult
,
69 TestResultPart testResultPart
) {
73 public void close(TreeTestResult testResult
) {
74 if (templates
== null)
75 throw new SlcException("XSLT template not initialized");
77 File file
= getFile(testResult
);
78 OutputStream out
= null;
81 Transformer transformer
= templates
.newTransformer();
83 if (documentBuilder
== null)
84 documentBuilder
= DocumentBuilderFactory
.newInstance()
85 .newDocumentBuilder();
87 Document document
= documentBuilder
.newDocument();
88 DOMResult marshallResult
= new DOMResult(document
);
89 marshaller
.marshal(testResult
, marshallResult
);
92 Transformer identityTransformer
= TransformerFactory
93 .newInstance().newTransformer();
94 StringResult xmlResult
= new StringResult();
95 identityTransformer
.transform(new DOMSource(marshallResult
96 .getNode()), xmlResult
);
97 log
.info("Marshalled XML:\n" + xmlResult
);
100 DOMSource transfoSource
= new DOMSource(marshallResult
.getNode());
102 if (outputDir
!= null) {
103 File dir
= new File(outputDir
);
105 out
= new FileOutputStream(file
);
106 StreamResult outputResult
= new StreamResult(out
);
107 transformer
.transform(transfoSource
, outputResult
);
109 // print on console if no output dir
110 StringResult result
= new StringResult();
111 transformer
.transform(transfoSource
, result
);
112 log
.info("Generated report:\n" + result
);
114 } catch (Exception e
) {
115 throw new SlcException(
116 "Could not transform test result to " + file
, e
);
118 IOUtils
.closeQuietly(out
);
122 public Resource
getXsltStyleSheet() {
123 return xsltStyleSheet
;
126 public void setXsltStyleSheet(Resource xsltStyleSheet
) {
127 this.xsltStyleSheet
= xsltStyleSheet
;
130 public void setTemplates(Templates templates
) {
131 this.templates
= templates
;
134 public void setMarshaller(Marshaller marshaller
) {
135 this.marshaller
= marshaller
;
138 public void setOutputDir(String outputDir
) {
139 this.outputDir
= outputDir
;
142 public void setOutputFileExtension(String outputFileExtension
) {
143 this.outputFileExtension
= outputFileExtension
;
146 protected File
getFile(TreeTestResult result
) {
147 Long time
= System
.currentTimeMillis();
148 return new File(outputDir
+ File
.separator
+ time
+ "-"
149 + result
.getUuid() + "." + outputFileExtension
);
152 public void setLogXml(Boolean logXml
) {
153 this.logXml
= logXml
;