]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java
06bf7c30d3cffe37dcccb48d7dc7d1b91eba8f30
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / core / test / tree / htmlreport / ResultPage.java
1 package org.argeo.slc.core.test.tree.htmlreport;
2
3 import java.io.IOException;
4 import java.util.SortedMap;
5 import java.util.TreeMap;
6
7 import javax.swing.tree.TreePath;
8
9 import org.apache.commons.io.FileUtils;
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12
13 import org.argeo.slc.core.structure.StructureElement;
14 import org.argeo.slc.core.structure.StructureRegistry;
15 import org.argeo.slc.core.structure.tree.TreeSPath;
16 import org.argeo.slc.core.test.SimpleResultPart;
17 import org.argeo.slc.core.test.TestResultPart;
18 import org.argeo.slc.core.test.TestStatus;
19 import org.argeo.slc.core.test.tree.PartSubList;
20 import org.argeo.slc.core.test.tree.TreeTestResult;
21
22 class ResultPage {
23 private final static Log log = LogFactory.getLog(ResultPage.class);
24
25 private final FullHtmlTreeReport report;
26 private final TreeTestResult result;
27
28 ResultPage(FullHtmlTreeReport report, TreeTestResult result) {
29 this.report = report;
30 this.result = result;
31 }
32
33 /**
34 * Generates a result page for one test result
35 *
36 * @param file
37 * file to which generate the HTML
38 * @param result
39 * the result to dump
40 */
41 protected void generate(StructureRegistry registry) {
42 StringBuffer buf = new StringBuffer("");
43 buf.append("<html>\n");
44 buf.append("<header>");
45 buf.append("<title>Result #").append(result.getTestResultId()).append(
46 "</title>\n");
47 buf
48 .append("<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"/>");
49 buf.append("</header>\n");
50
51 buf.append("<body>\n");
52
53 // Header
54 buf.append("<h1>Result #").append(result.getTestResultId()).append(
55 "</h1>\n");
56 buf.append(report.sdf.format(result.getCloseDate()));
57
58 // TOC
59 generateToc(buf, registry);
60
61 generatePartsList(buf, registry);
62
63 buf.append("</body>");
64 buf.append("</html>");
65
66 try {
67 FileUtils.writeStringToFile(report.getResultFile(result), buf
68 .toString());
69 } catch (IOException e) {
70 log.error("Could not save result page.", e);
71 }
72 }
73
74 private void generateToc(StringBuffer buf, StructureRegistry registry) {
75 buf.append("<h2>Overview</h2>\n");
76 SortedMap<TreeSPath, Integer> toc = new TreeMap<TreeSPath, Integer>();
77 for (TreeSPath path : result.getResultParts().keySet()) {
78 PartSubList subList = (PartSubList) result.getResultParts().get(
79 path);
80 boolean isFailed = false;
81 for (TestResultPart part : subList.getParts()) {
82 if (!part.getStatus().equals(TestStatus.PASSED)) {
83 isFailed = true;
84 break;
85 }
86 }
87 fillToc(toc, path, isFailed);
88 }
89
90 buf.append("<table border=\"0\">\n");
91 for (TreeSPath path : toc.keySet()) {
92 boolean inResult = result.getResultParts().containsKey(path);
93 boolean isFailed = !toc.get(path).equals(TestStatus.PASSED);
94
95 buf.append("<tr><td class=\"").append(
96 isFailed ? "failed" : "passed").append("\">");
97 int depth = path.depth();
98 for (int i = 0; i < depth; i++) {
99 buf.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
100 }
101
102 if (inResult) {
103 buf.append("<a href=\"#").append(anchor(path)).append(
104 "\" class=\"").append(isFailed ? "failed" : "passed")
105 .append("\"><b>");
106 }
107 if (registry != null) {
108 StructureElement element = registry.getElement(path);
109 if (element != null) {
110 buf.append(element.getDescription());
111 } else {
112 buf.append(path.getName());
113 }
114 }
115 if (inResult) {
116 buf.append("</b></a>");
117 }
118 buf.append("</td></tr>\n");
119 }
120 buf.append("</table>\n");
121 buf.append("<hr/>\n");
122 }
123
124 private void generatePartsList(StringBuffer buf, StructureRegistry registry) {
125 for (TreeSPath path : result.getResultParts().keySet()) {
126 buf.append("<p>\n");
127 buf.append("<a name=\"").append(anchor(path)).append("\"></a>");
128 buf.append("<h2>");
129 String description = path.getName();
130 if (registry != null) {
131 StructureElement element = registry.getElement(path);
132 if (element != null) {
133 description = element.getDescription();
134 }
135 }
136 buf.append(description);
137 buf.append("</h2>");
138
139 PartSubList subList = (PartSubList) result.getResultParts().get(
140 path);
141 buf.append("<table border=0>\n");
142 for (TestResultPart part : subList.getParts()) {
143 SimpleResultPart sPart = (SimpleResultPart) part;
144 String clss = "";
145 if (sPart.getStatus().equals(SimpleResultPart.PASSED)) {
146 clss = "passed";
147 } else {
148 clss = "failed";
149 }
150 buf.append("<tr><td class=\"").append(clss).append("\">");
151
152 buf.append(sPart.getMessage());
153 buf.append("</td></tr>\n");
154 }
155 buf.append("</table>\n");
156 }
157 }
158
159 private void fillToc(SortedMap<TreeSPath, Integer> toc, TreeSPath path,
160 boolean isFailed) {
161 if (isFailed) {
162 toc.put(path, TestStatus.FAILED);
163 } else {
164 if (!toc.containsKey(path)) {
165 toc.put(path, TestStatus.PASSED);
166 }
167 }
168
169 if (path.getParent() != null) {
170 fillToc(toc, path.getParent(), isFailed);
171 }
172 }
173
174 private String anchor(TreeSPath path) {
175 return path.getAsUniqueString().replace(path.getSeparator(), '_');
176 }
177
178 private String describedPath(TreePath path, StructureRegistry registry) {
179 StringBuffer buf = new StringBuffer("");
180 return buf.toString();
181 }
182 }