/[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 1075 - (hide annotations) (download)
Thu Sep 16 19:14:47 2010 UTC (13 years, 8 months ago) by torben
File size: 4929 byte(s)
Just for fun use XSLT to produce html output
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3 torben 1075 import java.io.ByteArrayInputStream;
4 torben 1060 import java.io.ByteArrayOutputStream;
5 torben 1075 import java.io.File;
6 torben 307 import java.io.IOException;
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
16     import javax.xml.transform.Source;
17     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 711 import dk.thoerup.traininfoservice.Statistics;
28 torben 307
29     /**
30     * Servlet implementation class DepartureServlet
31     */
32 torben 958 @WebServlet(urlPatterns={"/DepartureServlet"})
33 torben 307 public class DepartureServlet extends HttpServlet {
34     private static final long serialVersionUID = 1L;
35 torben 348
36     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
37 torben 307
38 torben 580 DepartureFetcher fetcher;
39 torben 1075
40    
41 torben 307
42 torben 1075 String xslPath;
43    
44 torben 307
45 torben 425 @Override
46 torben 580 public void init() throws ServletException {
47     super.init();
48 torben 584
49 torben 1034 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
50 torben 584 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
51 torben 1026 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
52 torben 1036 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
53 torben 1034 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
54 torben 1075
55     xslPath = getServletContext().getRealPath("/departures.xsl");
56 torben 580 }
57    
58     @Override
59 torben 711 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
60 torben 458 if (req.getParameter("station") == null) {
61     resp.sendError(400, "not enough parameters");
62     return;
63     }
64 torben 829
65     boolean arrival = false;
66     try {
67     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
68     } catch (Exception e) {}
69    
70 torben 711 Statistics.getInstance().incrementDepartureLookups();
71 torben 458
72 torben 307 int station = Integer.parseInt( req.getParameter("station") );
73     String format = req.getParameter("format");
74    
75 torben 1021 DepartureBean beans;
76 torben 307
77     try {
78 torben 829 beans = fetcher.cachedLookupDepartures(station, arrival);
79 torben 1074 beans.arrival = arrival;
80 torben 462 } catch (java.io.IOException ioe) {
81     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
82 torben 716 Statistics.getInstance().incrementDepartureErrors();
83 torben 348 resp.sendError(500);
84     return;
85 torben 421 } catch (CircuitBreakerException cbe) {
86     logger.warning("Circuitbreaker - failing fast");
87 torben 716 Statistics.getInstance().incrementDepartureErrors();
88 torben 421 resp.sendError(500);
89     return;
90 torben 451 } catch (Exception e) {
91 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
92 torben 716 Statistics.getInstance().incrementDepartureErrors();
93 torben 348 resp.sendError(500);
94     return;
95 torben 307 }
96    
97     resp.setDateHeader("Expires", 0);
98     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
99    
100     if (format.equalsIgnoreCase("xml")) {
101     resp.setContentType("text/xml");
102 torben 1074 resp.getWriter().print( formatXml(beans) );
103 torben 307 } else if (format.equalsIgnoreCase("html")) {
104 torben 1075 /*
105 torben 585 String advStr = req.getParameter("advanced");
106     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
107    
108     req.setAttribute("advanced", advanced);
109 torben 307 req.setAttribute("departurebeans", beans);
110     req.setAttribute("stationID", station );
111 torben 1075 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);*/
112     resp.setContentType("text/html");
113     resp.getWriter().print( xmlToHtml(formatXml(beans)) );
114 torben 307 } else {
115 torben 862 resp.sendError(400, "Unknown format");
116 torben 307 }
117    
118     }
119    
120 torben 1074 protected String formatXml(DepartureBean beans) throws ServletException{
121 torben 1060
122     Serializer serializer = new Persister();
123 torben 307
124 torben 1060 ByteArrayOutputStream out = new ByteArrayOutputStream();
125 torben 307
126 torben 1060 try {
127     serializer.write(beans, out);
128 torben 307 } catch (Exception e) {
129     throw new ServletException(e);
130     }
131 torben 1060
132     return out.toString();
133 torben 307 }
134 torben 1075
135     protected String xmlToHtml(String input) {
136 torben 307
137 torben 1075 try {
138     Source stylesheet = new StreamSource( new File(xslPath) );
139    
140    
141     TransformerFactory transFact = TransformerFactory.newInstance();
142    
143     Transformer trans = transFact.newTransformer(stylesheet);
144    
145     Source xml = new StreamSource( new ByteArrayInputStream(input.getBytes() ));
146     ByteArrayOutputStream out = new ByteArrayOutputStream();
147     trans.transform(xml, new StreamResult(out));
148    
149     return out.toString();
150     } catch (Exception e) {
151     return e.toString();
152     }
153     }
154    
155 torben 307 }

  ViewVC Help
Powered by ViewVC 1.1.20