--- android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2010/10/01 05:30:32 1145 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2011/03/31 17:13:19 1248 @@ -1,9 +1,9 @@ package dk.thoerup.traininfoservice.banedk; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; import java.util.logging.Level; import java.util.logging.Logger; @@ -12,7 +12,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; @@ -27,6 +26,7 @@ import dk.thoerup.circuitbreaker.CircuitBreakerException; import dk.thoerup.traininfoservice.StationDAO; import dk.thoerup.traininfoservice.Statistics; +import dk.thoerup.traininfoservice.banedk.DepartureFetcher.FetchTrainType; /** * Servlet implementation class DepartureServlet @@ -70,9 +70,13 @@ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (req.getParameter("station") == null) { - resp.sendError(400, "not enough parameters"); + resp.sendError(400, "not enough parameters (station)"); return; } + if (req.getParameter("format") == null) { + resp.sendError(400, "not enough parameters (format)"); + return; + } boolean arrival = false; try { @@ -84,10 +88,15 @@ int station = Integer.parseInt( req.getParameter("station") ); String format = req.getParameter("format"); - DepartureBean beans; + DepartureBean beans; + + DepartureFetcher.FetchTrainType type = FetchTrainType.BOTH; + if ( req.getParameter("type") != null) { + type = FetchTrainType.valueOf( req.getParameter("type") ); + } try { - beans = fetcher.cachedLookupDepartures(station, arrival); + beans = fetcher.cachedLookupDepartures(station, arrival, type); beans.arrival = arrival; } catch (java.io.IOException ioe) { logger.warning("Read failed, station="+station + ". " + ioe.getMessage() ); @@ -95,7 +104,7 @@ resp.sendError(500); return; } catch (CircuitBreakerException cbe) { - logger.warning("Circuitbreaker - failing fast"); + logger.warning("Circuitbreaker - failing fast, station=" +station); Statistics.getInstance().incrementDepartureErrors(); resp.sendError(500); return; @@ -118,16 +127,16 @@ resp.setContentType("text/xml"); resp.getWriter().print( formatXml(beans) ); } else if (format.equalsIgnoreCase("html")) { - /* + String advStr = req.getParameter("advanced"); boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false; req.setAttribute("advanced", advanced); req.setAttribute("departurebeans", beans); req.setAttribute("stationID", station ); - getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);*/ - resp.setContentType("text/html"); - resp.getWriter().print( xmlToHtml(formatXml(beans)) ); + getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp); + /*resp.setContentType("text/html"); + resp.getWriter().print( xmlToHtml(formatXml(beans)) );*/ } else { resp.sendError(400, "Unknown format"); } @@ -138,7 +147,7 @@ Serializer serializer = new Persister(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); + StringWriter out = new StringWriter(); try { serializer.write(beans, out); @@ -152,10 +161,11 @@ protected String xmlToHtml(String input) throws ServletException { try { - Transformer trans = xslTemplate.newTransformer(); + Transformer trans = xslTemplate.newTransformer(); + - Source xml = new StreamSource( new ByteArrayInputStream(input.getBytes() )); - ByteArrayOutputStream out = new ByteArrayOutputStream(); + Source xml = new StreamSource( new StringReader(input)); + StringWriter out = new StringWriter(); trans.transform(xml, new StreamResult(out)); return out.toString();