| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.chemistry.opencmis.tck.runner; |
| |
| import java.io.IOException; |
| import java.io.PrintWriter; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import javax.servlet.ServletException; |
| import javax.servlet.http.HttpServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| import org.apache.chemistry.opencmis.tck.CmisTest; |
| import org.apache.chemistry.opencmis.tck.CmisTestGroup; |
| import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor; |
| import org.apache.chemistry.opencmis.tck.report.CoreHtmlReport; |
| |
| /** |
| * Web Runner. |
| */ |
| public class WebRunnerServlet extends HttpServlet { |
| |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
| resp.setContentType("text/html; charset=UTF-8"); |
| |
| PrintWriter pw = resp.getWriter(); |
| |
| printHeader(pw); |
| |
| pw.println("<h1>OpenCMIS TCK</h1>"); |
| |
| pw.println("<form action=\"" + req.getRequestURI() + "\" method=\"POST\">"); |
| pw.println("<table>"); |
| pw.println("<tr><td>AtomPub URL:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.binding.atompub.url\" size=\"50\"></td></tr>"); |
| pw.println("<tr><td>Username:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.user\" size=\"50\"></td></tr>"); |
| pw.println("<tr><td>Password:</td><td><input type=\"password\" name=\"org.apache.chemistry.opencmis.password\" size=\"50\"></td></tr>"); |
| pw.println("<tr><td>Repository Id:</td><td><input type=\"text\" name=\"org.apache.chemistry.opencmis.session.repository.id\" size=\"50\"></td></tr>"); |
| pw.println("<tr><td></td><td><input type=\"submit\" value=\"Start TCK\"></td></tr>"); |
| pw.println("<input type=\"hidden\" name=\"org.apache.chemistry.opencmis.binding.spi.type\" value=\"atompub\">"); |
| pw.println("</form>"); |
| |
| printFooter(pw); |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Override |
| protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
| resp.setBufferSize(0); |
| resp.setContentType("text/html; charset=UTF-8"); |
| |
| PrintWriter pw = resp.getWriter(); |
| |
| printHeader(pw); |
| |
| Map<String, String> parameters = new HashMap<String, String>(); |
| for (Map.Entry<String, String[]> entry : ((Map<String, String[]>) req.getParameterMap()).entrySet()) { |
| if ((entry.getValue() == null) || (entry.getValue().length < 1)) { |
| continue; |
| } |
| parameters.put(entry.getKey(), entry.getValue()[0]); |
| } |
| |
| try { |
| WebRunner runner = new WebRunner(); |
| runner.setParameters(parameters); |
| runner.loadDefaultTckGroups(); |
| |
| pw.println("<div id=\"progress\">"); |
| pw.println("<h1>Running OpenCMIS TCK</h1>"); |
| |
| runner.run(new WebProgressMonitor(pw)); |
| |
| pw.println("</div>"); |
| |
| // let progress div disappear |
| pw.println("<script language=\"javascript\">"); |
| pw.println("document.getElementById(\"progress\").style.display = \"none\";"); |
| pw.println("</script>"); |
| |
| (new CoreHtmlReport()).createReport(runner.getParameters(), runner.getGroups(), pw); |
| } catch (Exception e) { |
| pw.println("<h2>Exception</h2>"); |
| |
| pw.println("\n<pre>"); |
| e.printStackTrace(pw); |
| pw.println("\n</pre>"); |
| } |
| |
| printFooter(pw); |
| } |
| |
| protected void printHeader(PrintWriter pw) throws IOException { |
| pw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"); |
| pw.println("<html><head>\n<title>OpenCMIS TCK</title>"); |
| CoreHtmlReport.printStyle(pw); |
| pw.println("</head><body>"); |
| } |
| |
| protected void printFooter(PrintWriter pw) throws IOException { |
| pw.println("\n</body></html>"); |
| pw.flush(); |
| } |
| |
| private static class WebRunner extends AbstractRunner { |
| } |
| |
| private static class WebProgressMonitor implements CmisTestProgressMonitor { |
| private final PrintWriter pw; |
| |
| public WebProgressMonitor(PrintWriter pw) { |
| this.pw = pw; |
| } |
| |
| public void startGroup(CmisTestGroup group) { |
| pw.println("<h3>" + group.getName() + " (" + group.getTests().size() + " tests)</h3>"); |
| pw.flush(); |
| } |
| |
| public void endGroup(CmisTestGroup group) { |
| pw.println("<br>"); |
| pw.flush(); |
| } |
| |
| public void startTest(CmisTest test) { |
| pw.print(" " + test.getName() + " ... "); |
| pw.flush(); |
| } |
| |
| public void endTest(CmisTest test) { |
| pw.println("completed<br>"); |
| pw.flush(); |
| } |
| |
| public void message(String msg) { |
| pw.println(msg); |
| pw.flush(); |
| } |
| } |
| } |