--- android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableServlet.java 2010/02/02 18:47:55 581 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableServlet.java 2010/09/02 18:37:49 1026 @@ -6,15 +6,18 @@ import java.util.logging.Logger; import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dk.thoerup.circuitbreaker.CircuitBreakerException; +import dk.thoerup.traininfoservice.Statistics; /** * Servlet implementation class TimetableServlet */ +@WebServlet(urlPatterns={"/TimetableServlet"}) public class TimetableServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -23,66 +26,60 @@ TimetableFetcher fetcher; + @Override public void init() throws ServletException { super.init(); - boolean useTempSite = Boolean.parseBoolean( getInitParameter("usetempsite") ); - logger.info( "TimetableServlet, use temp site=" + useTempSite ); - fetcher = new TimetableFetcher(useTempSite); + boolean useTempSite = Boolean.parseBoolean( getServletContext().getInitParameter("usetempsite") ); + int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") ); + int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") ); + logger.info( "TimetableServlet, use temp site=" + useTempSite + ", cache=" + cacheTimeout); + fetcher = new TimetableFetcher(useTempSite,cacheTimeout,replyTimeout); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getParameter("train") == null) { - response.sendError(400, "not enough parameters"); + response.sendError(400, "not enough parameters (train)"); return; } - - String train = request.getParameter("train").trim(); - - String sections[] = train.split(" "); - if (sections.length != 2) { - response.sendError(400, "Invalid parameter"); + if (request.getParameter("type") == null) { + response.sendError(400, "not enough parameters (type)"); return; } + Statistics.getInstance().incrementTimetableLookups(); - String type = lookupType(sections[0]); - String trainID = sections[1]; + String train = request.getParameter("train").trim(); + String type = request.getParameter("type").trim(); + try { - List timetable = fetcher.cachedLookupTimetable(trainID, type); + List timetable = fetcher.cachedLookupTimetable(train, type); String responseXML = formatTimetable(timetable); response.setContentType("text/xml"); response.getWriter().print(responseXML); } catch (java.io.IOException ioe) { - logger.warning("(timetable) Read failed, train="+train + ". " + ioe.getMessage()); + logger.warning("(timetable) Read failed, type=" + type + ", train="+train + ". " + ioe.getMessage()); + Statistics.getInstance().incrementTimetableErrors(); response.sendError(500, "Backend timed out"); } catch (CircuitBreakerException cbe) { logger.warning("Circuitbreaker - failing fast"); + Statistics.getInstance().incrementTimetableErrors(); response.sendError(500); }catch (Exception e) { - logger.log(Level.WARNING, "failure looking up timetable: train=" +train, e); + logger.log(Level.WARNING, "failure looking up timetable: type=" + type + ",train=" +train, e); + Statistics.getInstance().incrementTimetableErrors(); response.sendError(500); } } - String lookupType(String trainCode) { - trainCode = trainCode.toLowerCase(); - - if (trainCode.equals("a") || trainCode.equals("b") || trainCode.equals("bx") || trainCode.equals("c") || - trainCode.equals("e") || trainCode.equals("f") || trainCode.equals("h")) { - return "S2"; - } else { - return "FJRN"; - } - } - String formatTimetable(List timetable) { StringBuffer sb = new StringBuffer(); + //sb.append("\n"); sb.append(""); @@ -95,7 +92,8 @@ sb.append("").append( bean.getStation() ).append(""); sb.append("").append( bean.getArrival() ).append(""); sb.append("").append( bean.getDeparture() ).append(""); - + sb.append("").append( bean.getStationId() ).append(""); + //sb.append("").append( bean.isCancelled() ).append(""); sb.append(""); }