/[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 584 - (hide annotations) (download)
Fri Feb 5 13:57:39 2010 UTC (14 years, 3 months ago) by torben
File size: 6758 byte(s)
Move some various parameters to web.xml
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 468 import dk.thoerup.circuitbreaker.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 torben 580 DepartureFetcher fetcher;
39 torben 307 TransformerFactory transformerFactory = TransformerFactory.newInstance();
40     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
41    
42    
43 torben 425 @Override
44 torben 580 public void init() throws ServletException {
45     super.init();
46 torben 584
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 torben 580 }
52    
53     @Override
54 torben 307 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
55 torben 458 if (req.getParameter("station") == null) {
56     resp.sendError(400, "not enough parameters");
57     return;
58     }
59    
60 torben 307 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 torben 387 beans = fetcher.cachedLookupDepartures(station);
69 torben 462 } catch (java.io.IOException ioe) {
70     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
71 torben 348 resp.sendError(500);
72     return;
73 torben 421 } catch (CircuitBreakerException cbe) {
74     logger.warning("Circuitbreaker - failing fast");
75     resp.sendError(500);
76     return;
77 torben 451 } catch (Exception e) {
78 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
79     resp.sendError(500);
80     return;
81 torben 307 }
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     req.setAttribute("stationname", stationName );
91     req.setAttribute("departurebeans", beans);
92     req.setAttribute("stationID", station );
93     getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
94     } else {
95     throw new ServletException("Unknown format");
96     }
97    
98     }
99    
100     protected String formatXml(List<DepartureBean> beans, String stationName) throws ServletException{
101     String xml = "";
102     try {
103     DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
104     DOMImplementation impl = builder.getDOMImplementation();
105    
106    
107     Document doc = impl.createDocument(null,null,null);
108     Element root = doc.createElement("departureinfo");
109     root.setAttribute("station", stationName);
110     for (DepartureBean departure : beans) {
111     Element train = doc.createElement("train");
112    
113     Element time = doc.createElement("time");
114     time.setTextContent( departure.getTime() );
115     train.appendChild(time);
116    
117     Element updated = doc.createElement("updated");
118     updated.setTextContent( String.valueOf(departure.getUpdated()) );
119     train.appendChild(updated);
120    
121     Element trainNumber = doc.createElement("trainnumber");
122     trainNumber.setTextContent( departure.getTrainNumber() );
123     train.appendChild(trainNumber);
124    
125     Element destination = doc.createElement("destination");
126     destination.setTextContent( departure.getDestination());
127     train.appendChild(destination);
128    
129     Element origin = doc.createElement("origin");
130     origin.setTextContent( departure.getOrigin() );
131     train.appendChild(origin);
132    
133     Element location= doc.createElement("location");
134     location.setTextContent( departure.getLocation() );
135     train.appendChild(location);
136    
137     Element status = doc.createElement("status");
138     status.setTextContent( departure.getStatus() );
139     train.appendChild(status);
140    
141     Element note = doc.createElement("note");
142     note.setTextContent( departure.getNote() );
143     train.appendChild(note);
144    
145     root.appendChild(train);
146     }
147    
148     doc.appendChild(root);
149    
150    
151     DOMSource domSource = new DOMSource(doc);
152    
153     Transformer transformer = transformerFactory.newTransformer();
154     //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
155     transformer.setOutputProperty(OutputKeys.METHOD, "xml");
156     transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
157     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
158     transformer.setOutputProperty(OutputKeys.INDENT, "yes");
159     java.io.StringWriter sw = new java.io.StringWriter();
160     StreamResult sr = new StreamResult(sw);
161     transformer.transform(domSource, sr);
162     xml = sw.toString();
163    
164    
165     } catch (Exception e) {
166     throw new ServletException(e);
167     }
168     return xml;
169     }
170    
171     protected String getStationName(int stationID) {
172     String station = "";
173    
174     Connection conn = null;
175     try {
176     conn = DBConnection.getConnection();
177     Statement stmt = conn.createStatement();
178     ResultSet rs = stmt.executeQuery("SELECT name FROM trainstations WHERE id=" + stationID);
179     if (rs.next()) {
180     station = rs.getString(1);
181     }
182    
183     } catch (Exception e) {
184     } finally {
185     try {
186     if (conn != null && !conn.isClosed())
187     conn.close();
188     } catch (Exception e) {}
189     }
190    
191     return station;
192     }
193    
194     }

  ViewVC Help
Powered by ViewVC 1.1.20