1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.tck.runner;
20
21 import java.io.IOException;
22 import java.io.PrintWriter;
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServlet;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30
31 import org.apache.chemistry.opencmis.tck.CmisTest;
32 import org.apache.chemistry.opencmis.tck.CmisTestGroup;
33 import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
34 import org.apache.chemistry.opencmis.tck.report.CoreHtmlReport;
35
36
37
38
39 public class WebRunnerServlet extends HttpServlet {
40
41 private static final long serialVersionUID = 1L;
42
43 @Override
44 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
45 resp.setContentType("text/html; charset=UTF-8");
46
47 PrintWriter pw = resp.getWriter();
48
49 printHeader(pw);
50
51 pw.println("<h1>OpenCMIS TCK</h1>");
52
53 pw.println("<form action=\"" + req.getRequestURI() + "\" method=\"POST\">");
54 pw.println("<table>");
55 pw.println("<tr><td>AtomPub URL:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.binding.atompub.url\" size=\"50\"></td></tr>");
56 pw.println("<tr><td>Username:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.user\" size=\"50\"></td></tr>");
57 pw.println("<tr><td>Password:</td><td><input type=\"password\" name=\"org.apache.chemistry.opencmis.password\" size=\"50\"></td></tr>");
58 pw.println("<tr><td>Repository Id:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.session.repository.id\" size=\"50\"></td></tr>");
59 pw.println("<tr><td></td><td><input type=\"submit\" value=\"Start TCK\"></td></tr>");
60 pw.println("<input type=\"hidden\" name=\"org.apache.chemistry.opencmis.binding.spi.type\" value=\"atompub\">");
61 pw.println("</form>");
62
63 printFooter(pw);
64 }
65
66 @SuppressWarnings("unchecked")
67 @Override
68 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
69 resp.setBufferSize(0);
70 resp.setContentType("text/html; charset=UTF-8");
71
72 PrintWriter pw = resp.getWriter();
73
74 printHeader(pw);
75
76 Map<String, String> parameters = new HashMap<String, String>();
77 Map<String, String[]> parameterMap = req.getParameterMap();
78
79 if (parameterMap != null) {
80 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
81 if (entry.getValue() == null || entry.getValue().length < 1) {
82 continue;
83 }
84 parameters.put(entry.getKey(), entry.getValue()[0]);
85 }
86 }
87
88 try {
89 WebRunner runner = new WebRunner();
90 runner.setParameters(parameters);
91 runner.loadDefaultTckGroups();
92
93 pw.println("<div id=\"progress\">");
94 pw.println("<h1>Running OpenCMIS TCK</h1>");
95
96 runner.run(new WebProgressMonitor(pw));
97
98 pw.println("</div>");
99
100
101 pw.println("<script language=\"javascript\">");
102 pw.println("document.getElementById(\"progress\").style.display = \"none\";");
103 pw.println("</script>");
104
105 (new CoreHtmlReport()).createReport(runner.getParameters(), runner.getGroups(), pw);
106 } catch (Exception e) {
107 pw.println("<h2>Exception</h2>");
108
109 pw.println("\n<pre>");
110 e.printStackTrace(pw);
111 pw.println("\n</pre>");
112 }
113
114 printFooter(pw);
115 }
116
117 protected void printHeader(PrintWriter pw) throws IOException {
118 pw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
119 pw.println("<html><head>\n<title>OpenCMIS TCK</title>");
120 CoreHtmlReport.printStyle(pw);
121 pw.println("</head><body>");
122 }
123
124 protected void printFooter(PrintWriter pw) throws IOException {
125 pw.println("\n</body></html>");
126 pw.flush();
127 }
128
129 private static class WebRunner extends AbstractRunner {
130 }
131
132 private static class WebProgressMonitor implements CmisTestProgressMonitor {
133 private final PrintWriter pw;
134
135 public WebProgressMonitor(PrintWriter pw) {
136 this.pw = pw;
137 }
138
139 @Override
140 public void startGroup(CmisTestGroup group) {
141 pw.println("<h3>" + group.getName() + " (" + group.getTests().size() + " tests)</h3>");
142 pw.flush();
143 }
144
145 @Override
146 public void endGroup(CmisTestGroup group) {
147 pw.println("<br>");
148 pw.flush();
149 }
150
151 @Override
152 public void startTest(CmisTest test) {
153 pw.print(" " + test.getName() + " ... ");
154 pw.flush();
155 }
156
157 @Override
158 public void endTest(CmisTest test) {
159 pw.println("completed<br>");
160 pw.flush();
161 }
162
163 @Override
164 public void message(String msg) {
165 pw.println(msg);
166 pw.flush();
167 }
168 }
169 }