/[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 1075 - (show 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 package dk.thoerup.traininfoservice.banedk;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.ByteArrayOutputStream;
5 import java.io.File;
6 import java.io.IOException;
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
16 import javax.xml.transform.Source;
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.Statistics;
28
29 /**
30 * Servlet implementation class DepartureServlet
31 */
32 @WebServlet(urlPatterns={"/DepartureServlet"})
33 public class DepartureServlet extends HttpServlet {
34 private static final long serialVersionUID = 1L;
35
36 Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
37
38 DepartureFetcher fetcher;
39
40
41
42 String xslPath;
43
44
45 @Override
46 public void init() throws ServletException {
47 super.init();
48
49 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
50 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
51 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
52 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
53 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
54
55 xslPath = getServletContext().getRealPath("/departures.xsl");
56 }
57
58 @Override
59 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
60 if (req.getParameter("station") == null) {
61 resp.sendError(400, "not enough parameters");
62 return;
63 }
64
65 boolean arrival = false;
66 try {
67 arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
68 } catch (Exception e) {}
69
70 Statistics.getInstance().incrementDepartureLookups();
71
72 int station = Integer.parseInt( req.getParameter("station") );
73 String format = req.getParameter("format");
74
75 DepartureBean beans;
76
77 try {
78 beans = fetcher.cachedLookupDepartures(station, arrival);
79 beans.arrival = arrival;
80 } catch (java.io.IOException ioe) {
81 logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
82 Statistics.getInstance().incrementDepartureErrors();
83 resp.sendError(500);
84 return;
85 } catch (CircuitBreakerException cbe) {
86 logger.warning("Circuitbreaker - failing fast");
87 Statistics.getInstance().incrementDepartureErrors();
88 resp.sendError(500);
89 return;
90 } catch (Exception e) {
91 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
92 Statistics.getInstance().incrementDepartureErrors();
93 resp.sendError(500);
94 return;
95 }
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 resp.getWriter().print( formatXml(beans) );
103 } else if (format.equalsIgnoreCase("html")) {
104 /*
105 String advStr = req.getParameter("advanced");
106 boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
107
108 req.setAttribute("advanced", advanced);
109 req.setAttribute("departurebeans", beans);
110 req.setAttribute("stationID", station );
111 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);*/
112 resp.setContentType("text/html");
113 resp.getWriter().print( xmlToHtml(formatXml(beans)) );
114 } else {
115 resp.sendError(400, "Unknown format");
116 }
117
118 }
119
120 protected String formatXml(DepartureBean beans) throws ServletException{
121
122 Serializer serializer = new Persister();
123
124 ByteArrayOutputStream out = new ByteArrayOutputStream();
125
126 try {
127 serializer.write(beans, out);
128 } catch (Exception e) {
129 throw new ServletException(e);
130 }
131
132 return out.toString();
133 }
134
135 protected String xmlToHtml(String input) {
136
137 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 }

  ViewVC Help
Powered by ViewVC 1.1.20