Improve error reporting. New error page that gives a bit more of an explanation...
[frank.git] / prod / net / jaekl / frank / ViewSchedule.java
1 package net.jaekl.frank;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6 import java.util.Locale;
7
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import net.jaekl.frank.octranspo.Server;
14 import net.jaekl.frank.octranspo.StopInfo;
15 import net.jaekl.qd.util.ExceptionUtils;
16
17 public class ViewSchedule extends HttpServlet {
18         private static final long serialVersionUID = 1L;
19         
20         static final String BUNDLE_NAME = "frank";
21         static final String STOP = "stop";
22         static final String ROUTE = "route";
23         static final String LANG = "lang";
24         
25         ErrorHandler m_errorHandler;
26         
27         public ViewSchedule() {
28                 m_errorHandler = new ErrorHandler();
29         }
30         
31         int getParamInt(HttpServletRequest req, String paramName) {
32                 String valueStr = getParamString(req, paramName);
33                 try {
34                         return Integer.parseInt(valueStr);
35                 }
36                 catch (NumberFormatException exc) {
37                         // TODO:  Error page
38                         return 0;
39                 }
40         }
41         
42         String getParamString(HttpServletRequest req, String paramName) {
43                 String valueStr = req.getParameter(paramName);
44                 if (null == valueStr|| valueStr.equals("")) {
45                         // TODO:  Error page
46                         return null;
47                 }
48                 return valueStr;
49         }
50         
51         Locale getLocale(HttpServletRequest req) {
52                 Locale result = null;
53                 String lang = getParamString(req, LANG);
54                 if (null != lang) {
55                         result = new Locale(lang);
56                 }
57                 if (null == result) {
58                         result = Locale.getDefault();
59                 }
60                 return result;
61         }
62
63         @Override
64         public void doGet(HttpServletRequest req, HttpServletResponse res)
65         throws ServletException, IOException
66         {
67                 res.setContentType("text/html");
68                 PrintWriter pw = res.getWriter();
69                 
70                 Locale locale = getLocale(req);
71                 int stop = getParamInt(req, STOP);
72                 int route = getParamInt(req, ROUTE);
73                 
74                 try {
75                         FileInputStream fis = new FileInputStream("apikey.txt");
76                         try {
77                                 Server server = new Server("192f31d2", fis);
78                                 StopInfo stopInfo = null;
79                                 
80                                 if (0 == route) {
81                                         stopInfo = server.getNextTripsForStopAllRoutes(stop);
82                                 }
83                                 else {
84                                         stopInfo = server.getNextTripsForStop(stop, route);
85                                 }
86                                 Schedule schedule = new Schedule(locale);
87                                 
88                                 schedule.writePage(pw, stopInfo);
89                         }
90                         finally {
91                                 ExceptionUtils.tryClose(fis);
92                         }
93                 }
94                 catch (Throwable t) {
95                         m_errorHandler.writeErrorPage(pw, t, locale);
96                 }
97         }
98 }