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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1206 - (show annotations) (download)
Tue Dec 21 08:24:19 2010 UTC (13 years, 4 months ago) by torben
File size: 5534 byte(s)
DepartureServlet.java Switch back to old jsp view
ViewDepartures.jsp Set bgcolor for table header
web.xml azure site is now the only source available
1 package dk.thoerup.traininfoservice.banedk;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.StringReader;
6 import java.io.StringWriter;
7 import java.util.logging.Level;
8 import java.util.logging.Logger;
9
10 import javax.servlet.ServletException;
11 import javax.servlet.annotation.WebServlet;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 import javax.xml.transform.Source;
16 import javax.xml.transform.Templates;
17 import javax.xml.transform.Transformer;
18 import javax.xml.transform.TransformerFactory;
19 import javax.xml.transform.stream.StreamResult;
20 import javax.xml.transform.stream.StreamSource;
21
22 import org.simpleframework.xml.Serializer;
23 import org.simpleframework.xml.core.Persister;
24
25 import dk.thoerup.android.traininfo.common.DepartureBean;
26 import dk.thoerup.circuitbreaker.CircuitBreakerException;
27 import dk.thoerup.traininfoservice.StationDAO;
28 import dk.thoerup.traininfoservice.Statistics;
29
30 /**
31 * Servlet implementation class DepartureServlet
32 */
33 @WebServlet(urlPatterns={"/DepartureServlet"})
34 public class DepartureServlet extends HttpServlet {
35 private static final long serialVersionUID = 1L;
36
37 Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
38
39 DepartureFetcher fetcher;
40
41
42
43 TransformerFactory xslTransFact;
44 Templates xslTemplate;
45
46
47 @Override
48 public void init() throws ServletException {
49 super.init();
50
51 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
52 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
53 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
54 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
55 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
56
57 xslTransFact = TransformerFactory.newInstance();
58
59 String xslPath = getServletContext().getRealPath("/departures.xsl");
60 Source stylesheet = new StreamSource( new File(xslPath) );
61
62 try {
63 xslTemplate = xslTransFact.newTemplates(stylesheet);
64 } catch (Exception e) {
65 throw new ServletException(e);
66 }
67 }
68
69 @Override
70 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
71 if (req.getParameter("station") == null) {
72 resp.sendError(400, "not enough parameters (station)");
73 return;
74 }
75 if (req.getParameter("format") == null) {
76 resp.sendError(400, "not enough parameters (format)");
77 return;
78 }
79
80 boolean arrival = false;
81 try {
82 arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
83 } catch (Exception e) {}
84
85 Statistics.getInstance().incrementDepartureLookups();
86
87 int station = Integer.parseInt( req.getParameter("station") );
88 String format = req.getParameter("format");
89
90 DepartureBean beans;
91
92 try {
93 beans = fetcher.cachedLookupDepartures(station, arrival);
94 beans.arrival = arrival;
95 } catch (java.io.IOException ioe) {
96 logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
97 Statistics.getInstance().incrementDepartureErrors();
98 resp.sendError(500);
99 return;
100 } catch (CircuitBreakerException cbe) {
101 logger.warning("Circuitbreaker - failing fast, station=" +station);
102 Statistics.getInstance().incrementDepartureErrors();
103 resp.sendError(500);
104 return;
105 } catch (StationDAO.NostationException nse) {
106 logger.log(Level.WARNING, "Station not in Database, station=" +station);
107 Statistics.getInstance().incrementDepartureErrors();
108 resp.sendError(400, "invalid station ID");
109 return;
110 } catch (Exception e) {
111 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
112 Statistics.getInstance().incrementDepartureErrors();
113 resp.sendError(500);
114 return;
115 }
116
117 resp.setDateHeader("Expires", 0);
118 resp.setHeader("Cache-Control", "no-cache, must-revalidate");
119
120 if (format.equalsIgnoreCase("xml")) {
121 resp.setContentType("text/xml");
122 resp.getWriter().print( formatXml(beans) );
123 } else if (format.equalsIgnoreCase("html")) {
124
125 String advStr = req.getParameter("advanced");
126 boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
127
128 req.setAttribute("advanced", advanced);
129 req.setAttribute("departurebeans", beans);
130 req.setAttribute("stationID", station );
131 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
132 /*resp.setContentType("text/html");
133 resp.getWriter().print( xmlToHtml(formatXml(beans)) );*/
134 } else {
135 resp.sendError(400, "Unknown format");
136 }
137
138 }
139
140 protected String formatXml(DepartureBean beans) throws ServletException{
141
142 Serializer serializer = new Persister();
143
144 StringWriter out = new StringWriter();
145
146 try {
147 serializer.write(beans, out);
148 } catch (Exception e) {
149 throw new ServletException(e);
150 }
151
152 return out.toString();
153 }
154
155 protected String xmlToHtml(String input) throws ServletException {
156
157 try {
158 Transformer trans = xslTemplate.newTransformer();
159
160
161 Source xml = new StreamSource( new StringReader(input));
162 StringWriter out = new StringWriter();
163 trans.transform(xml, new StreamResult(out));
164
165 return out.toString();
166 } catch (Exception e) {
167 throw new ServletException(e);
168 }
169 }
170
171 }

  ViewVC Help
Powered by ViewVC 1.1.20