/[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 421 - (show annotations) (download)
Thu Oct 8 12:19:42 2009 UTC (14 years, 7 months ago) by torben
File size: 6200 byte(s)
Enabled the usage of Circuit breaker to guard agains bane.dk failures
1 package dk.thoerup.traininfoservice.banedk;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5 import java.sql.ResultSet;
6 import java.sql.Statement;
7 import java.util.List;
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.parsers.DocumentBuilder;
16 import javax.xml.parsers.DocumentBuilderFactory;
17 import javax.xml.transform.OutputKeys;
18 import javax.xml.transform.Transformer;
19 import javax.xml.transform.TransformerFactory;
20 import javax.xml.transform.dom.DOMSource;
21 import javax.xml.transform.stream.StreamResult;
22
23 import org.w3c.dom.DOMImplementation;
24 import org.w3c.dom.Document;
25 import org.w3c.dom.Element;
26
27 import dk.thoerup.curcuitbreaker.CircuitBreakerException;
28 import dk.thoerup.traininfoservice.DBConnection;
29
30 /**
31 * Servlet implementation class DepartureServlet
32 */
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 = new DepartureFetcher();
39 TransformerFactory transformerFactory = TransformerFactory.newInstance();
40 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
41
42
43 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44 int station = Integer.parseInt( req.getParameter("station") );
45 String format = req.getParameter("format");
46
47 List<DepartureBean> beans;
48
49 String stationName = getStationName(station);
50
51 try {
52 beans = fetcher.cachedLookupDepartures(station);
53 } catch (java.net.SocketTimeoutException ste) {
54 logger.warning("Read timed out, station="+station);
55 resp.sendError(500);
56 return;
57 } catch (CircuitBreakerException cbe) {
58 logger.warning("Circuitbreaker - failing fast");
59 resp.sendError(500);
60 return;
61 } catch (Throwable e) {
62 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
63 resp.sendError(500);
64 return;
65 }
66
67 resp.setDateHeader("Expires", 0);
68 resp.setHeader("Cache-Control", "no-cache, must-revalidate");
69
70 if (format.equalsIgnoreCase("xml")) {
71 resp.setContentType("text/xml");
72 resp.getWriter().print( formatXml(beans, stationName) );
73 } else if (format.equalsIgnoreCase("html")) {
74 req.setAttribute("stationname", stationName );
75 req.setAttribute("departurebeans", beans);
76 req.setAttribute("stationID", station );
77 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
78 } else {
79 throw new ServletException("Unknown format");
80 }
81
82 }
83
84 protected String formatXml(List<DepartureBean> beans, String stationName) throws ServletException{
85 String xml = "";
86 try {
87 DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
88 DOMImplementation impl = builder.getDOMImplementation();
89
90
91 Document doc = impl.createDocument(null,null,null);
92 Element root = doc.createElement("departureinfo");
93 root.setAttribute("station", stationName);
94 for (DepartureBean departure : beans) {
95 Element train = doc.createElement("train");
96
97 Element time = doc.createElement("time");
98 time.setTextContent( departure.getTime() );
99 train.appendChild(time);
100
101 Element updated = doc.createElement("updated");
102 updated.setTextContent( String.valueOf(departure.getUpdated()) );
103 train.appendChild(updated);
104
105 Element trainNumber = doc.createElement("trainnumber");
106 trainNumber.setTextContent( departure.getTrainNumber() );
107 train.appendChild(trainNumber);
108
109 Element destination = doc.createElement("destination");
110 destination.setTextContent( departure.getDestination());
111 train.appendChild(destination);
112
113 Element origin = doc.createElement("origin");
114 origin.setTextContent( departure.getOrigin() );
115 train.appendChild(origin);
116
117 Element location= doc.createElement("location");
118 location.setTextContent( departure.getLocation() );
119 train.appendChild(location);
120
121 Element status = doc.createElement("status");
122 status.setTextContent( departure.getStatus() );
123 train.appendChild(status);
124
125 Element note = doc.createElement("note");
126 note.setTextContent( departure.getNote() );
127 train.appendChild(note);
128
129 root.appendChild(train);
130 }
131
132 doc.appendChild(root);
133
134
135 DOMSource domSource = new DOMSource(doc);
136
137 Transformer transformer = transformerFactory.newTransformer();
138 //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
139 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
140 transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
141 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
142 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
143 java.io.StringWriter sw = new java.io.StringWriter();
144 StreamResult sr = new StreamResult(sw);
145 transformer.transform(domSource, sr);
146 xml = sw.toString();
147
148
149 } catch (Exception e) {
150 throw new ServletException(e);
151 }
152 return xml;
153 }
154
155 protected String getStationName(int stationID) {
156 String station = "";
157
158 Connection conn = null;
159 try {
160 conn = DBConnection.getConnection();
161 Statement stmt = conn.createStatement();
162 ResultSet rs = stmt.executeQuery("SELECT name FROM trainstations WHERE id=" + stationID);
163 if (rs.next()) {
164 station = rs.getString(1);
165 }
166
167 } catch (Exception e) {
168 } finally {
169 try {
170 if (conn != null && !conn.isClosed())
171 conn.close();
172 } catch (Exception e) {}
173 }
174
175 return station;
176 }
177
178 }

  ViewVC Help
Powered by ViewVC 1.1.20