/[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 421 - (hide 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 torben 307 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 torben 348 import java.util.logging.Level;
9     import java.util.logging.Logger;
10 torben 307
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 torben 421 import dk.thoerup.curcuitbreaker.CircuitBreakerException;
28 torben 307 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 torben 348
36     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
37 torben 307
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 torben 387 beans = fetcher.cachedLookupDepartures(station);
53 torben 348 } catch (java.net.SocketTimeoutException ste) {
54     logger.warning("Read timed out, station="+station);
55     resp.sendError(500);
56     return;
57 torben 421 } catch (CircuitBreakerException cbe) {
58     logger.warning("Circuitbreaker - failing fast");
59     resp.sendError(500);
60     return;
61     } catch (Throwable e) {
62 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
63     resp.sendError(500);
64     return;
65 torben 307 }
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