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

Contents of /android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableServlet.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2081 - (show annotations) (download)
Sat Nov 23 12:08:25 2013 UTC (10 years, 5 months ago) by torben
File size: 3337 byte(s)
Import cleanup
1 package dk.thoerup.traininfoservice.banedk;
2
3 import java.io.IOException;
4 import java.io.StringWriter;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7
8 import javax.servlet.ServletException;
9 import javax.servlet.annotation.WebServlet;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.simpleframework.xml.Serializer;
15 import org.simpleframework.xml.core.Persister;
16
17 import dk.thoerup.android.traininfo.common.TimetableBean;
18 import dk.thoerup.circuitbreaker.CircuitBreakerException;
19 import dk.thoerup.traininfoservice.Statistics;
20 import dk.thoerup.traininfoservice.TraininfoSettings;
21
22 /**
23 * Servlet implementation class TimetableServlet
24 */
25 @WebServlet(urlPatterns={"/TimetableServlet"})
26 public class TimetableServlet extends HttpServlet {
27 private static final long serialVersionUID = 1L;
28
29
30 Logger logger = Logger.getLogger( TimetableServlet.class.getName() );
31
32 TimetableFetcher fetcher;
33
34
35 @Override
36 public void init() throws ServletException {
37 super.init();
38
39
40 TraininfoSettings settings = (TraininfoSettings) getServletContext().getAttribute("settings");
41 fetcher = new TimetableFetcher(settings);
42 }
43
44 @Override
45 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
46 if (request.getParameter("train") == null || request.getParameter("train").equals("") ) {
47 response.sendError(400, "not enough parameters (train)");
48 return;
49 }
50 if (request.getParameter("type") == null || request.getParameter("type").equals("") ) {
51 response.sendError(400, "not enough parameters (type)");
52 return;
53 }
54 Statistics.getInstance().incrementTimetableLookups();
55
56 String train = request.getParameter("train").trim();
57 String type = request.getParameter("type").trim();
58
59
60 TimetableBean timetable = null;
61 try
62 {
63 timetable = fetcher.cachedLookupTimetable(train, type);
64
65 } catch (java.io.IOException ioe) {
66 logger.warning("(timetable) Read failed, type=" + type + ", train="+train + ". " + ioe.getMessage());
67 Statistics.getInstance().incrementTimetableErrors();
68 //timetable = generateErrorBean(1);
69 response.sendError( 500, "Backend didn't answer" );
70 } catch (CircuitBreakerException cbe) {
71 logger.warning("Circuitbreaker - failing fast, type=" + type + ", train="+train);
72 Statistics.getInstance().incrementTimetableErrors();
73 timetable = generateErrorBean(1);
74 }catch (Exception e) {
75 logger.log(Level.WARNING, "failure looking up timetable: type=" + type + ",train=" +train, e);
76 Statistics.getInstance().incrementTimetableErrors();
77 response.sendError(500);
78 }
79
80 if (timetable != null) {
81 String responseXML = formatTimetable(timetable);
82
83 response.setContentType("text/xml");
84 response.getWriter().print(responseXML);
85 }
86
87 }
88
89 protected TimetableBean generateErrorBean(int code) {
90 TimetableBean bean = new TimetableBean();
91 bean.errorCode = code;
92 return bean;
93 }
94
95 String formatTimetable(TimetableBean timetable) throws ServletException {
96 Serializer serializer = new Persister();
97
98 StringWriter out = new StringWriter();
99
100 try {
101 serializer.write(timetable, out);
102 } catch (Exception e) {
103 throw new ServletException(e);
104 }
105
106 return out.toString();
107 }
108
109 }

  ViewVC Help
Powered by ViewVC 1.1.20