package northwind.service; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URLDecoder; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.breeze.webserver.ControllerServlet; public class TestHarnessServlet extends ControllerServlet { private static final long serialVersionUID = 1L; private static final int BUFFER_SIZE = 4096; private String _testCaseDir; @Override public void init(ServletConfig config) throws ServletException { super.init(config); _testCaseDir = config.getInitParameter("testCaseDir"); } @Override protected void handleRequest(HttpServletRequest request, HttpServletResponse response) { String pathInfo = request.getPathInfo(); if (pathInfo == null || "/".equals(pathInfo)) pathInfo = "Index.hibernate.html"; writeFileTo(pathInfo, response); } private void writeFileTo(String fileName, HttpServletResponse response) { FileInputStream fileIn = null; ServletOutputStream out = null; try { File file = new File(_testCaseDir, URLDecoder.decode(fileName, "UTF-8")); if (!file.exists()) { response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. return; } String contentType = getServletContext().getMimeType(file.getName()); if (contentType == null) { contentType = "application/octet-stream"; } response.setBufferSize(BUFFER_SIZE); response.setContentType(contentType); response.setHeader("Content-Length", String.valueOf(file.length())); fileIn = new FileInputStream(file); out = response.getOutputStream(); byte[] outputByte = new byte[BUFFER_SIZE]; int x; while((x = fileIn.read(outputByte, 0, BUFFER_SIZE)) != -1) { out.write(outputByte, 0, x); } out.flush(); } catch (Exception e) { throw new RuntimeException("Unable to read: " + fileName, e); } finally { close(fileIn); close(out); } } private static void close(Closeable resource) { if (resource != null) { try { resource.close(); } catch (IOException e) { e.printStackTrace(); } } } }