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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20