Add translations for French and Japanese
[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         static final String UTF_8 = "UTF-8";
25         
26         ErrorHandler m_errorHandler;
27         
28         public ViewSchedule() {
29                 m_errorHandler = new ErrorHandler();
30         }
31         
32         int getParamInt(HttpServletRequest req, String paramName) {
33                 String valueStr = getParamString(req, paramName);
34                 try {
35                         return Integer.parseInt(valueStr);
36                 }
37                 catch (NumberFormatException exc) {
38                         // TODO:  Error page
39                         return 0;
40                 }
41         }
42         
43         String getParamString(HttpServletRequest req, String paramName) {
44                 String valueStr = req.getParameter(paramName);
45                 if (null == valueStr|| valueStr.equals("")) {
46                         // TODO:  Error page
47                         return null;
48                 }
49                 return valueStr;
50         }
51         
52         Locale getLocale(HttpServletRequest req) {
53                 Locale result = null;
54                 String lang = getParamString(req, LANG);
55                 if (null != lang) {
56                         result = new Locale(lang);
57                 }
58                 if (null == result) {
59                         result = Locale.getDefault();
60                 }
61                 return result;
62         }
63
64         @Override
65         public void doGet(HttpServletRequest req, HttpServletResponse res)
66         throws ServletException, IOException
67         {
68                 res.setContentType("text/html");
69                 res.setCharacterEncoding("utf8");       // Seems to be necessary when running in Japanese
70                 PrintWriter pw = res.getWriter();
71                 
72                 Locale locale = getLocale(req);
73                 int stop = getParamInt(req, STOP);
74                 int route = getParamInt(req, ROUTE);
75                 
76                 try {
77                         FileInputStream fis = new FileInputStream("apikey.txt");
78                         try {
79                                 Server server = new Server("192f31d2", fis);
80                                 StopInfo stopInfo = null;
81                                 
82                                 if (0 == route) {
83                                         stopInfo = server.getNextTripsForStopAllRoutes(stop);
84                                 }
85                                 else {
86                                         stopInfo = server.getNextTripsForStop(stop, route);
87                                 }
88                                 Schedule schedule = new Schedule(locale);
89                                 
90                                 schedule.writePage(pw, stopInfo);
91                         }
92                         finally {
93                                 ExceptionUtils.tryClose(fis);
94                         }
95                 }
96                 catch (Throwable t) {
97                         m_errorHandler.writeErrorPage(pw, t, locale);
98                 }
99         }
100 }