/[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 1191 - (hide annotations) (download)
Fri Nov 12 18:38:30 2010 UTC (13 years, 6 months ago) by torben
File size: 5534 byte(s)
Also use StringReader
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3 torben 1075 import java.io.File;
4 torben 307 import java.io.IOException;
5 torben 1191 import java.io.StringReader;
6 torben 1190 import java.io.StringWriter;
7 torben 348 import java.util.logging.Level;
8     import java.util.logging.Logger;
9 torben 307
10     import javax.servlet.ServletException;
11 torben 958 import javax.servlet.annotation.WebServlet;
12 torben 307 import javax.servlet.http.HttpServlet;
13     import javax.servlet.http.HttpServletRequest;
14     import javax.servlet.http.HttpServletResponse;
15 torben 1075 import javax.xml.transform.Source;
16 torben 1091 import javax.xml.transform.Templates;
17 torben 1075 import javax.xml.transform.Transformer;
18 torben 307 import javax.xml.transform.TransformerFactory;
19 torben 1075 import javax.xml.transform.stream.StreamResult;
20     import javax.xml.transform.stream.StreamSource;
21 torben 307
22 torben 1060 import org.simpleframework.xml.Serializer;
23     import org.simpleframework.xml.core.Persister;
24 torben 307
25 torben 1061 import dk.thoerup.android.traininfo.common.DepartureBean;
26 torben 468 import dk.thoerup.circuitbreaker.CircuitBreakerException;
27 torben 1145 import dk.thoerup.traininfoservice.StationDAO;
28 torben 711 import dk.thoerup.traininfoservice.Statistics;
29 torben 307
30     /**
31     * Servlet implementation class DepartureServlet
32     */
33 torben 958 @WebServlet(urlPatterns={"/DepartureServlet"})
34 torben 307 public class DepartureServlet extends HttpServlet {
35     private static final long serialVersionUID = 1L;
36 torben 348
37     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
38 torben 307
39 torben 580 DepartureFetcher fetcher;
40 torben 1075
41    
42 torben 307
43 torben 1091 TransformerFactory xslTransFact;
44     Templates xslTemplate;
45 torben 1075
46 torben 307
47 torben 425 @Override
48 torben 580 public void init() throws ServletException {
49     super.init();
50 torben 584
51 torben 1034 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
52 torben 584 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
53 torben 1026 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
54 torben 1036 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
55 torben 1034 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
56 torben 1075
57 torben 1091 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 torben 580 }
68    
69     @Override
70 torben 711 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
71 torben 458 if (req.getParameter("station") == null) {
72 torben 1168 resp.sendError(400, "not enough parameters (station)");
73 torben 458 return;
74     }
75 torben 1168 if (req.getParameter("format") == null) {
76     resp.sendError(400, "not enough parameters (format)");
77     return;
78     }
79 torben 829
80     boolean arrival = false;
81     try {
82     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
83     } catch (Exception e) {}
84    
85 torben 711 Statistics.getInstance().incrementDepartureLookups();
86 torben 458
87 torben 307 int station = Integer.parseInt( req.getParameter("station") );
88     String format = req.getParameter("format");
89    
90 torben 1021 DepartureBean beans;
91 torben 307
92     try {
93 torben 829 beans = fetcher.cachedLookupDepartures(station, arrival);
94 torben 1074 beans.arrival = arrival;
95 torben 462 } catch (java.io.IOException ioe) {
96     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
97 torben 716 Statistics.getInstance().incrementDepartureErrors();
98 torben 348 resp.sendError(500);
99     return;
100 torben 421 } catch (CircuitBreakerException cbe) {
101 torben 1158 logger.warning("Circuitbreaker - failing fast, station=" +station);
102 torben 716 Statistics.getInstance().incrementDepartureErrors();
103 torben 421 resp.sendError(500);
104     return;
105 torben 1145 } 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 torben 451 } catch (Exception e) {
111 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
112 torben 716 Statistics.getInstance().incrementDepartureErrors();
113 torben 348 resp.sendError(500);
114     return;
115 torben 307 }
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 torben 1074 resp.getWriter().print( formatXml(beans) );
123 torben 307 } else if (format.equalsIgnoreCase("html")) {
124 torben 1075 /*
125 torben 585 String advStr = req.getParameter("advanced");
126     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
127    
128     req.setAttribute("advanced", advanced);
129 torben 307 req.setAttribute("departurebeans", beans);
130     req.setAttribute("stationID", station );
131 torben 1075 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);*/
132     resp.setContentType("text/html");
133     resp.getWriter().print( xmlToHtml(formatXml(beans)) );
134 torben 307 } else {
135 torben 862 resp.sendError(400, "Unknown format");
136 torben 307 }
137    
138     }
139    
140 torben 1074 protected String formatXml(DepartureBean beans) throws ServletException{
141 torben 1060
142     Serializer serializer = new Persister();
143 torben 307
144 torben 1190 StringWriter out = new StringWriter();
145 torben 307
146 torben 1060 try {
147     serializer.write(beans, out);
148 torben 307 } catch (Exception e) {
149     throw new ServletException(e);
150     }
151 torben 1060
152     return out.toString();
153 torben 307 }
154 torben 1075
155 torben 1091 protected String xmlToHtml(String input) throws ServletException {
156 torben 307
157 torben 1091 try {
158 torben 1191 Transformer trans = xslTemplate.newTransformer();
159    
160 torben 1075
161 torben 1191 Source xml = new StreamSource( new StringReader(input));
162 torben 1190 StringWriter out = new StringWriter();
163 torben 1075 trans.transform(xml, new StreamResult(out));
164    
165     return out.toString();
166     } catch (Exception e) {
167 torben 1091 throw new ServletException(e);
168 torben 1075 }
169     }
170    
171 torben 307 }

  ViewVC Help
Powered by ViewVC 1.1.20