/[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 585 - (show annotations) (download)
Fri Feb 5 19:15:12 2010 UTC (14 years, 3 months ago) by torben
File size: 6940 byte(s)
Use JSTL in the jsp instead of scriptlets
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.circuitbreaker.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;
39 TransformerFactory transformerFactory = TransformerFactory.newInstance();
40 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
41
42
43 @Override
44 public void init() throws ServletException {
45 super.init();
46
47 boolean useTempSite = Boolean.parseBoolean( getServletContext().getInitParameter("usetempsite") );
48 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
49 logger.info( "DepartureServlet, use temp site=" + useTempSite + ", cache=" + cacheTimeout);
50 fetcher = new DepartureFetcher(useTempSite, cacheTimeout);
51 }
52
53 @Override
54 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
55 if (req.getParameter("station") == null) {
56 resp.sendError(400, "not enough parameters");
57 return;
58 }
59
60 int station = Integer.parseInt( req.getParameter("station") );
61 String format = req.getParameter("format");
62
63 List<DepartureBean> beans;
64
65 String stationName = getStationName(station);
66
67 try {
68 beans = fetcher.cachedLookupDepartures(station);
69 } catch (java.io.IOException ioe) {
70 logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
71 resp.sendError(500);
72 return;
73 } catch (CircuitBreakerException cbe) {
74 logger.warning("Circuitbreaker - failing fast");
75 resp.sendError(500);
76 return;
77 } catch (Exception e) {
78 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
79 resp.sendError(500);
80 return;
81 }
82
83 resp.setDateHeader("Expires", 0);
84 resp.setHeader("Cache-Control", "no-cache, must-revalidate");
85
86 if (format.equalsIgnoreCase("xml")) {
87 resp.setContentType("text/xml");
88 resp.getWriter().print( formatXml(beans, stationName) );
89 } else if (format.equalsIgnoreCase("html")) {
90
91 String advStr = req.getParameter("advanced");
92 boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
93
94 req.setAttribute("advanced", advanced);
95 req.setAttribute("stationname", stationName );
96 req.setAttribute("departurebeans", beans);
97 req.setAttribute("stationID", station );
98 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
99 } else {
100 throw new ServletException("Unknown format");
101 }
102
103 }
104
105 protected String formatXml(List<DepartureBean> beans, String stationName) throws ServletException{
106 String xml = "";
107 try {
108 DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
109 DOMImplementation impl = builder.getDOMImplementation();
110
111
112 Document doc = impl.createDocument(null,null,null);
113 Element root = doc.createElement("departureinfo");
114 root.setAttribute("station", stationName);
115 for (DepartureBean departure : beans) {
116 Element train = doc.createElement("train");
117
118 Element time = doc.createElement("time");
119 time.setTextContent( departure.getTime() );
120 train.appendChild(time);
121
122 Element updated = doc.createElement("updated");
123 updated.setTextContent( String.valueOf(departure.getUpdated()) );
124 train.appendChild(updated);
125
126 Element trainNumber = doc.createElement("trainnumber");
127 trainNumber.setTextContent( departure.getTrainNumber() );
128 train.appendChild(trainNumber);
129
130 Element destination = doc.createElement("destination");
131 destination.setTextContent( departure.getDestination());
132 train.appendChild(destination);
133
134 Element origin = doc.createElement("origin");
135 origin.setTextContent( departure.getOrigin() );
136 train.appendChild(origin);
137
138 Element location= doc.createElement("location");
139 location.setTextContent( departure.getLocation() );
140 train.appendChild(location);
141
142 Element status = doc.createElement("status");
143 status.setTextContent( departure.getStatus() );
144 train.appendChild(status);
145
146 Element note = doc.createElement("note");
147 note.setTextContent( departure.getNote() );
148 train.appendChild(note);
149
150 root.appendChild(train);
151 }
152
153 doc.appendChild(root);
154
155
156 DOMSource domSource = new DOMSource(doc);
157
158 Transformer transformer = transformerFactory.newTransformer();
159 //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
160 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
161 transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
162 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
163 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
164 java.io.StringWriter sw = new java.io.StringWriter();
165 StreamResult sr = new StreamResult(sw);
166 transformer.transform(domSource, sr);
167 xml = sw.toString();
168
169
170 } catch (Exception e) {
171 throw new ServletException(e);
172 }
173 return xml;
174 }
175
176 protected String getStationName(int stationID) {
177 String station = "";
178
179 Connection conn = null;
180 try {
181 conn = DBConnection.getConnection();
182 Statement stmt = conn.createStatement();
183 ResultSet rs = stmt.executeQuery("SELECT name FROM trainstations WHERE id=" + stationID);
184 if (rs.next()) {
185 station = rs.getString(1);
186 }
187
188 } catch (Exception e) {
189 } finally {
190 try {
191 if (conn != null && !conn.isClosed())
192 conn.close();
193 } catch (Exception e) {}
194 }
195
196 return station;
197 }
198
199 }

  ViewVC Help
Powered by ViewVC 1.1.20