1 /*
   2  * $Id$
   3  *
   4  * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
   5  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6  *
   7  * This code is free software; you can redistribute it and/or modify it
   8  * under the terms of the GNU General Public License version 2 only, as
   9  * published by the Free Software Foundation.  Oracle designates this
  10  * particular file as subject to the "Classpath" exception as provided
  11  * by Oracle in the LICENSE file that accompanied this code.
  12  *
  13  * This code is distributed in the hope that it will be useful, but WITHOUT
  14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  16  * version 2 for more details (a copy is included in the LICENSE file that
  17  * accompanied this code).
  18  *
  19  * You should have received a copy of the GNU General Public License version
  20  * 2 along with this work; if not, write to the Free Software Foundation,
  21  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  22  *
  23  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  24  * or visit www.oracle.com if you need additional information or have any
  25  * questions.
  26  */
  27 package com.sun.javatest;
  28 
  29 import java.io.PrintWriter;
  30 import java.util.Iterator;
  31 
  32 import com.sun.javatest.httpd.httpURL;
  33 import com.sun.javatest.httpd.JThttpProvider;
  34 import com.sun.javatest.httpd.PageGenerator;
  35 import com.sun.javatest.util.Debug;
  36 import com.sun.javatest.util.I18NResourceBundle;
  37 
  38 /*
  39  * HTTP service provider for TestResultTable.
  40  */
  41 class TRT_HttpHandler extends JThttpProvider {
  42     TRT_HttpHandler(TestResultTable trt, String url, int instanceNum) {
  43         this.instanceNum = instanceNum;
  44         this.trt = trt;
  45     }
  46 
  47     public void serviceRequest(httpURL requestURL, PrintWriter out) {
  48         String nf = requestURL.getNextFile();
  49 
  50         // start the document
  51         if (nf == null) {
  52             beginGood(out);
  53             PageGenerator.writeBeginDoc(out);
  54 
  55             printIndex(out);
  56         }
  57         else if (nf.equals("tests")) {
  58             beginGood(out);
  59             PageGenerator.writeBeginDoc(out);
  60             printTests(requestURL, out);
  61         }
  62         else {
  63             if (debug)
  64                 Debug.println("TRT.HH-remainder of URL unknown (" + nf + ")");
  65             beginBad(out);
  66             printIndex(out);
  67         }
  68 
  69         out.println("<br><hr>");
  70         PageGenerator.writeFooter(out);
  71         PageGenerator.endBody(out);
  72         PageGenerator.writeEndDoc(out);
  73 
  74         out.close();
  75     }
  76 
  77     public String getRegistredURL() {
  78         return file;
  79     }
  80 
  81     private void beginGood(PrintWriter out) {
  82         PageGenerator.generateOkHttp(out);
  83         PageGenerator.generateDocType(out, PageGenerator.HTML32);
  84     }
  85 
  86     private void beginBad(PrintWriter out) {
  87         PageGenerator.generateBadHttp(out);
  88         PageGenerator.generateDocType(out, PageGenerator.HTML32);
  89     }
  90 
  91     private void printIndex(PrintWriter out) {
  92         PageGenerator.writeHeader(out, i18n.getString("trtHttp.index.title"));
  93         PageGenerator.startBody(out);
  94         // heading
  95         out.print("<h2>");
  96         print(out, i18n.getString("trtHttp.index.hdr"));
  97         out.println("</h2>");
  98         out.println("<hr Width=\"40%\" Align=left>");
  99 
 100         out.println("<p>");
 101         printStats(out);
 102 
 103     }
 104 
 105     private void printTests(httpURL url, PrintWriter out) {
 106         PageGenerator.writeHeader(out, i18n.getString("trtHttp.tests.title"));
 107         PageGenerator.startBody(out);
 108         out.print("<h2>");
 109         print(out, i18n.getString("trtHttp.tests.hdr"));
 110         out.println("</h2>");
 111         out.println("<hr Width=\"40%\" Align=left>");
 112 
 113         out.println("<p>");
 114         writeTests(out, i18n.getString("trtHttp.tests.name"),
 115                    i18n.getString("trtHttp.tests.status"));
 116     }
 117 
 118     public void writeTests(PrintWriter out, String keyHeader, String valHeader) {
 119         // XXX should include HTML filtering of strings
 120         // this is a custom version of the code found in PageGenerator
 121 
 122         out.println("<Table Border>");
 123 
 124         StringBuffer buf = new StringBuffer(50);
 125 
 126         // write the table header
 127         buf.append("<tr><th>");
 128         buf.append(keyHeader);
 129         buf.append("<th>");
 130         buf.append(valHeader);
 131         buf.append("</tr>");
 132         out.println(buf.toString());
 133 
 134         /*
 135         if (dict == null || dict.size() == 0) {
 136             // no values to write, fill the space
 137             buf.setLength(0);
 138             buf.append("<tr><td colspan=2>");
 139             buf.append("-EMPTY-");
 140             buf.append("</tr>");
 141         }
 142         else {
 143             */
 144         Iterator<TestResult> it = trt.getIterator();
 145             while (it.hasNext()) {
 146                 TestResult tr = it.next();
 147                 String url;
 148                 try {
 149                     url = tr.getDescription().getRootRelativeURL();
 150                 }
 151                 catch(TestResult.Fault f) {
 152                     out.println("<tr><td>Unable to get TestResult info, aborting.</tr>");
 153                     if (debug) f.printStackTrace();
 154                     // exit the while loop
 155                     break;
 156                 }
 157 
 158                 out.println("<tr>");
 159                 buf.setLength(0);
 160                 buf.append("<td>");
 161                 buf.append(url);
 162                 buf.append("<td>");
 163                 buf.append(tr.getStatus().toString());
 164                 out.println(buf.toString());
 165                 out.println("</tr>");
 166             }   // while
 167         //}
 168 
 169         out.println("</Table>");
 170     }
 171 
 172     private void printStats(PrintWriter out) {
 173         out.print("<b>");
 174         print(out, i18n.getString("trtHttp.stats.hdr"));
 175         out.println("</b><br>");
 176         PageGenerator.startTable(out, false);
 177 
 178         // workdir
 179         out.println("<tr>");
 180         out.print("   <td>");
 181         print(out, i18n.getString("trtHttp.wd.hdr"));
 182         out.println("</td>");
 183         out.print("   <td>");
 184         print(out, (trt.getWorkDir() != null ? trt.getWorkDir().getPath() :
 185                 i18n.getString("trtHttp.wd.unset")));
 186         out.println("</td>");
 187 
 188         // size
 189         out.println("<tr>");
 190         out.print("   <td>");
 191         print(out, i18n.getString("trtHttp.size.hdr"));
 192         out.println("</td>");
 193 
 194         out.print("   <td><a href=\"/trt/");
 195         out.print(Integer.toString(instanceNum));
 196         out.print("/tests\">");
 197         out.print(Integer.toString(trt.size()));
 198         out.println("</a></td>");
 199         out.println("</tr>");
 200 
 201         PageGenerator.endTable(out);
 202     }
 203 
 204     private TestResultTable trt;
 205     private int instanceNum;
 206     private String file;
 207 
 208     private static I18NResourceBundle i18n = I18NResourceBundle.getBundleForClass(TRT_HttpHandler.class);
 209     private static boolean debug = Debug.getBoolean(TRT_HttpHandler.class);
 210 }