/[projects]/android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java
ViewVC logotype

Annotation of /android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1074 - (hide annotations) (download)
Thu Sep 16 17:48:17 2010 UTC (13 years, 8 months ago) by torben
File size: 4152 byte(s)
remember to put the arrival parameter in the output
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3 torben 1060 import java.io.ByteArrayOutputStream;
4 torben 307 import java.io.IOException;
5 torben 348 import java.util.logging.Level;
6     import java.util.logging.Logger;
7 torben 307
8     import javax.servlet.ServletException;
9 torben 958 import javax.servlet.annotation.WebServlet;
10 torben 307 import javax.servlet.http.HttpServlet;
11     import javax.servlet.http.HttpServletRequest;
12     import javax.servlet.http.HttpServletResponse;
13     import javax.xml.parsers.DocumentBuilderFactory;
14     import javax.xml.transform.TransformerFactory;
15    
16 torben 1060 import org.simpleframework.xml.Serializer;
17     import org.simpleframework.xml.core.Persister;
18 torben 307
19 torben 1061 import dk.thoerup.android.traininfo.common.DepartureBean;
20 torben 468 import dk.thoerup.circuitbreaker.CircuitBreakerException;
21 torben 711 import dk.thoerup.traininfoservice.Statistics;
22 torben 307
23     /**
24     * Servlet implementation class DepartureServlet
25     */
26 torben 958 @WebServlet(urlPatterns={"/DepartureServlet"})
27 torben 307 public class DepartureServlet extends HttpServlet {
28     private static final long serialVersionUID = 1L;
29 torben 348
30     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
31 torben 307
32 torben 580 DepartureFetcher fetcher;
33 torben 307 TransformerFactory transformerFactory = TransformerFactory.newInstance();
34     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
35    
36    
37 torben 425 @Override
38 torben 580 public void init() throws ServletException {
39     super.init();
40 torben 584
41 torben 1034 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
42 torben 584 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
43 torben 1026 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
44 torben 1036 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
45 torben 1034 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
46 torben 580 }
47    
48     @Override
49 torben 711 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
50 torben 458 if (req.getParameter("station") == null) {
51     resp.sendError(400, "not enough parameters");
52     return;
53     }
54 torben 829
55     boolean arrival = false;
56     try {
57     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
58     } catch (Exception e) {}
59    
60 torben 711 Statistics.getInstance().incrementDepartureLookups();
61 torben 458
62 torben 307 int station = Integer.parseInt( req.getParameter("station") );
63     String format = req.getParameter("format");
64    
65 torben 1021 DepartureBean beans;
66 torben 307
67     try {
68 torben 829 beans = fetcher.cachedLookupDepartures(station, arrival);
69 torben 1074 beans.arrival = arrival;
70 torben 462 } catch (java.io.IOException ioe) {
71     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
72 torben 716 Statistics.getInstance().incrementDepartureErrors();
73 torben 348 resp.sendError(500);
74     return;
75 torben 421 } catch (CircuitBreakerException cbe) {
76     logger.warning("Circuitbreaker - failing fast");
77 torben 716 Statistics.getInstance().incrementDepartureErrors();
78 torben 421 resp.sendError(500);
79     return;
80 torben 451 } catch (Exception e) {
81 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
82 torben 716 Statistics.getInstance().incrementDepartureErrors();
83 torben 348 resp.sendError(500);
84     return;
85 torben 307 }
86    
87     resp.setDateHeader("Expires", 0);
88     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
89    
90     if (format.equalsIgnoreCase("xml")) {
91     resp.setContentType("text/xml");
92 torben 1074 resp.getWriter().print( formatXml(beans) );
93 torben 307 } else if (format.equalsIgnoreCase("html")) {
94 torben 585
95     String advStr = req.getParameter("advanced");
96     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
97    
98     req.setAttribute("advanced", advanced);
99 torben 307 req.setAttribute("departurebeans", beans);
100     req.setAttribute("stationID", station );
101     getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
102     } else {
103 torben 862 resp.sendError(400, "Unknown format");
104 torben 307 }
105    
106     }
107    
108 torben 1074 protected String formatXml(DepartureBean beans) throws ServletException{
109 torben 1060
110     Serializer serializer = new Persister();
111 torben 307
112 torben 1060 ByteArrayOutputStream out = new ByteArrayOutputStream();
113 torben 307
114 torben 1060 try {
115     serializer.write(beans, out);
116 torben 307 } catch (Exception e) {
117     throw new ServletException(e);
118     }
119 torben 1060
120     return out.toString();
121 torben 307 }
122    
123     }

  ViewVC Help
Powered by ViewVC 1.1.20