package com.occamlab.te.web; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.occamlab.te.util.DocumentationHelper; import com.occamlab.te.util.Misc; /** * A servlet that generates an HTML report from the contents of a test session * log. The report is placed at the root of the user's work directory (in * TE_BASE/users/) and is named after the session identifier (e.g. s0001.html). */ public class PrettyPrintLogsServlet extends HttpServlet implements Servlet { private static Logger LOGR = Logger.getLogger(PrettyPrintLogsServlet.class .getName()); private static final long serialVersionUID = 4555573278222613701L; Config Conf; DocumentationHelper docHelper; public void init() throws ServletException { Conf = new Config(); File stylesheet = Misc .getResourceAsFile("/com/occamlab/te/test_report_html.xsl"); docHelper = new DocumentationHelper(stylesheet); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { String sessionId = request.getParameter("session"); String reportFileName = sessionId + ".html"; File userdir = new File(Conf.getUsersDir(), request.getRemoteUser()); File sessiondir = new File(userdir, sessionId); File prettyPrintReportFile = new File(userdir, reportFileName); docHelper.prettyPrintsReport(sessiondir, prettyPrintReportFile); response.setContentType("text/html"); response.setHeader("Content-Disposition", "attachment; filename=" + reportFileName + ";"); response.setHeader("Cache-Control", "no-cache"); byte[] buf = new byte[response.getBufferSize()]; response.setContentLength((int) prettyPrintReportFile.length()); System.out.println("file length : " + (int) prettyPrintReportFile.length()); int length; BufferedInputStream fileInBuf = null; try { fileInBuf = new BufferedInputStream(new FileInputStream( prettyPrintReportFile)); OutputStream out = response.getOutputStream(); while ((length = fileInBuf.read(buf)) > 0) { out.write(buf, 0, length); } } finally { if (null != fileInBuf) fileInBuf.close(); } } catch (Exception e) { LOGR.log(Level.WARNING, "Failed to generate HTML test report.", e); } } }