]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/XsltReportGenerator.java
Restructure Httpd deployment
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / core / test / tree / XsltReportGenerator.java
1 package org.argeo.slc.core.test.tree;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import java.io.OutputStream;
7
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;
17
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;
22
23 import org.apache.commons.io.IOUtils;
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import org.argeo.slc.core.SlcException;
28 import org.argeo.slc.core.test.TestResultListener;
29 import org.argeo.slc.core.test.TestResultPart;
30
31 public class XsltReportGenerator implements TestResultListener<TreeTestResult> {
32 private Log log = LogFactory.getLog(getClass());
33
34 private DocumentBuilder documentBuilder = null;
35
36 private Resource xsltStyleSheet;
37
38 private Templates templates;
39
40 private Marshaller marshaller;
41
42 private String outputDir;
43 private String outputFileExtension = "html";
44
45 private Boolean logXml = false;
46
47 public void init() {
48 if (templates != null)
49 return;
50
51 if (xsltStyleSheet == null)
52 throw new SlcException("XSLT style sheet not specified.");
53
54 InputStream in = null;
55 try {
56 TransformerFactory transformerFactory = TransformerFactory
57 .newInstance();
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);
63 } finally {
64 IOUtils.closeQuietly(in);
65 }
66 }
67
68 public void resultPartAdded(TreeTestResult testResult,
69 TestResultPart testResultPart) {
70
71 }
72
73 public void close(TreeTestResult testResult) {
74 if (templates == null)
75 throw new SlcException("XSLT template not initialized");
76
77 File file = getFile(testResult);
78 OutputStream out = null;
79
80 try {
81 Transformer transformer = templates.newTransformer();
82
83 if (documentBuilder == null)
84 documentBuilder = DocumentBuilderFactory.newInstance()
85 .newDocumentBuilder();
86
87 Document document = documentBuilder.newDocument();
88 DOMResult marshallResult = new DOMResult(document);
89 marshaller.marshal(testResult, marshallResult);
90
91 if (logXml) {
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);
98 }
99
100 DOMSource transfoSource = new DOMSource(marshallResult.getNode());
101
102 if (outputDir != null) {
103 File dir = new File(outputDir);
104 dir.mkdirs();
105 out = new FileOutputStream(file);
106 StreamResult outputResult = new StreamResult(out);
107 transformer.transform(transfoSource, outputResult);
108 } else {
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);
113 }
114 } catch (Exception e) {
115 throw new SlcException(
116 "Could not transform test result to " + file, e);
117 } finally {
118 IOUtils.closeQuietly(out);
119 }
120 }
121
122 public Resource getXsltStyleSheet() {
123 return xsltStyleSheet;
124 }
125
126 public void setXsltStyleSheet(Resource xsltStyleSheet) {
127 this.xsltStyleSheet = xsltStyleSheet;
128 }
129
130 public void setTemplates(Templates templates) {
131 this.templates = templates;
132 }
133
134 public void setMarshaller(Marshaller marshaller) {
135 this.marshaller = marshaller;
136 }
137
138 public void setOutputDir(String outputDir) {
139 this.outputDir = outputDir;
140 }
141
142 public void setOutputFileExtension(String outputFileExtension) {
143 this.outputFileExtension = outputFileExtension;
144 }
145
146 protected File getFile(TreeTestResult result) {
147 Long time = System.currentTimeMillis();
148 return new File(outputDir + File.separator + time + "-"
149 + result.getUuid() + "." + outputFileExtension);
150 }
151
152 public void setLogXml(Boolean logXml) {
153 this.logXml = logXml;
154 }
155
156 }