1 package org
.argeo
.slc
.xml
.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
.SlcException
;
28 import org
.argeo
.slc
.core
.test
.tree
.TreeTestResult
;
29 import org
.argeo
.slc
.test
.TestResultListener
;
30 import org
.argeo
.slc
.test
.TestResultPart
;
32 public class XsltReportGenerator
implements TestResultListener
<TreeTestResult
> {
33 private Log log
= LogFactory
.getLog(getClass());
35 private DocumentBuilder documentBuilder
= null;
37 private Resource xsltStyleSheet
;
39 private Templates templates
;
41 private Marshaller marshaller
;
43 private String outputDir
;
44 private String outputFileExtension
= "html";
46 private Boolean logXml
= false;
49 if (templates
!= null)
52 if (xsltStyleSheet
== null)
53 throw new SlcException("XSLT style sheet not specified.");
55 InputStream in
= null;
57 TransformerFactory transformerFactory
= TransformerFactory
59 in
= xsltStyleSheet
.getInputStream();
60 StreamSource xsltSource
= new StreamSource(in
);
61 templates
= transformerFactory
.newTemplates(xsltSource
);
62 } catch (Exception e
) {
63 throw new SlcException("Could not initialize templates", e
);
65 IOUtils
.closeQuietly(in
);
69 public void resultPartAdded(TreeTestResult testResult
,
70 TestResultPart testResultPart
) {
74 public void close(TreeTestResult testResult
) {
75 if (templates
== null)
76 throw new SlcException("XSLT template not initialized");
78 File file
= getFile(testResult
);
79 OutputStream out
= null;
82 Transformer transformer
= templates
.newTransformer();
84 if (documentBuilder
== null)
85 documentBuilder
= DocumentBuilderFactory
.newInstance()
86 .newDocumentBuilder();
88 Document document
= documentBuilder
.newDocument();
89 DOMResult marshallResult
= new DOMResult(document
);
90 marshaller
.marshal(testResult
, marshallResult
);
93 Transformer identityTransformer
= TransformerFactory
94 .newInstance().newTransformer();
95 StringResult xmlResult
= new StringResult();
96 identityTransformer
.transform(new DOMSource(marshallResult
97 .getNode()), xmlResult
);
98 log
.info("Marshalled XML:\n" + xmlResult
);
101 DOMSource transfoSource
= new DOMSource(marshallResult
.getNode());
103 if (outputDir
!= null) {
104 File dir
= new File(outputDir
);
106 out
= new FileOutputStream(file
);
107 StreamResult outputResult
= new StreamResult(out
);
108 transformer
.transform(transfoSource
, outputResult
);
110 // print on console if no output dir
111 StringResult result
= new StringResult();
112 transformer
.transform(transfoSource
, result
);
113 log
.info("Generated report:\n" + result
);
115 } catch (Exception e
) {
116 throw new SlcException(
117 "Could not transform test result to " + file
, e
);
119 IOUtils
.closeQuietly(out
);
123 public Resource
getXsltStyleSheet() {
124 return xsltStyleSheet
;
127 public void setXsltStyleSheet(Resource xsltStyleSheet
) {
128 this.xsltStyleSheet
= xsltStyleSheet
;
131 public void setTemplates(Templates templates
) {
132 this.templates
= templates
;
135 public void setMarshaller(Marshaller marshaller
) {
136 this.marshaller
= marshaller
;
139 public void setOutputDir(String outputDir
) {
140 this.outputDir
= outputDir
;
143 public void setOutputFileExtension(String outputFileExtension
) {
144 this.outputFileExtension
= outputFileExtension
;
147 protected File
getFile(TreeTestResult result
) {
148 Long time
= System
.currentTimeMillis();
149 return new File(outputDir
+ File
.separator
+ time
+ "-"
150 + result
.getUuid() + "." + outputFileExtension
);
153 public void setLogXml(Boolean logXml
) {
154 this.logXml
= logXml
;