View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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   * Web Runner.
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             // let progress div disappear
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("&nbsp;&nbsp;&nbsp;" + 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 }