/[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 697 - (show annotations) (download)
Mon May 3 07:42:02 2010 UTC (14 years ago) by torben
File size: 6489 byte(s)
Better handling of train-types (regional vs s-train)
1 package dk.thoerup.traininfoservice.banedk;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import javax.xml.parsers.DocumentBuilder;
13 import javax.xml.parsers.DocumentBuilderFactory;
14 import javax.xml.transform.OutputKeys;
15 import javax.xml.transform.Transformer;
16 import javax.xml.transform.TransformerFactory;
17 import javax.xml.transform.dom.DOMSource;
18 import javax.xml.transform.stream.StreamResult;
19
20 import org.w3c.dom.DOMImplementation;
21 import org.w3c.dom.Document;
22 import org.w3c.dom.Element;
23
24 import dk.thoerup.circuitbreaker.CircuitBreakerException;
25 import dk.thoerup.traininfoservice.StationDAO;
26
27 /**
28 * Servlet implementation class DepartureServlet
29 */
30 public class DepartureServlet extends HttpServlet {
31 private static final long serialVersionUID = 1L;
32
33 Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
34
35 DepartureFetcher fetcher;
36 TransformerFactory transformerFactory = TransformerFactory.newInstance();
37 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
38
39
40 @Override
41 public void init() throws ServletException {
42 super.init();
43
44 boolean useTempSite = Boolean.parseBoolean( getServletContext().getInitParameter("usetempsite") );
45 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
46 logger.info( "DepartureServlet, use temp site=" + useTempSite + ", cache=" + cacheTimeout);
47 fetcher = new DepartureFetcher(useTempSite, cacheTimeout);
48 }
49
50 @Override
51 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
52 if (req.getParameter("station") == null) {
53 resp.sendError(400, "not enough parameters");
54 return;
55 }
56
57 int station = Integer.parseInt( req.getParameter("station") );
58 String format = req.getParameter("format");
59
60 List<DepartureBean> beans;
61
62 String stationName = StationDAO.getStationName(station);
63
64 try {
65 beans = fetcher.cachedLookupDepartures(station);
66 } catch (java.io.IOException ioe) {
67 logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
68 resp.sendError(500);
69 return;
70 } catch (CircuitBreakerException cbe) {
71 logger.warning("Circuitbreaker - failing fast");
72 resp.sendError(500);
73 return;
74 } catch (Exception e) {
75 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
76 resp.sendError(500);
77 return;
78 }
79
80 resp.setDateHeader("Expires", 0);
81 resp.setHeader("Cache-Control", "no-cache, must-revalidate");
82
83 if (format.equalsIgnoreCase("xml")) {
84 resp.setContentType("text/xml");
85 resp.getWriter().print( formatXml(beans, stationName) );
86 } else if (format.equalsIgnoreCase("html")) {
87
88 String advStr = req.getParameter("advanced");
89 boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
90
91 req.setAttribute("advanced", advanced);
92 req.setAttribute("stationname", stationName );
93 req.setAttribute("departurebeans", beans);
94 req.setAttribute("stationID", station );
95 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
96 } else {
97 throw new ServletException("Unknown format");
98 }
99
100 }
101
102 protected String formatXml(List<DepartureBean> beans, String stationName) throws ServletException{
103 String xml = "";
104 try {
105 DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
106 DOMImplementation impl = builder.getDOMImplementation();
107
108
109 Document doc = impl.createDocument(null,null,null);
110 Element root = doc.createElement("departureinfo");
111 root.setAttribute("station", stationName);
112 for (DepartureBean departure : beans) {
113 Element train = doc.createElement("train");
114
115 Element time = doc.createElement("time");
116 time.setTextContent( departure.getTime() );
117 train.appendChild(time);
118
119 Element updated = doc.createElement("updated");
120 updated.setTextContent( String.valueOf(departure.getUpdated()) );
121 train.appendChild(updated);
122
123 Element trainNumber = doc.createElement("trainnumber");
124 trainNumber.setTextContent( departure.getTrainNumber() );
125 train.appendChild(trainNumber);
126
127 Element destination = doc.createElement("destination");
128 destination.setTextContent( departure.getDestination());
129 train.appendChild(destination);
130
131 Element origin = doc.createElement("origin");
132 origin.setTextContent( departure.getOrigin() );
133 train.appendChild(origin);
134
135 Element location= doc.createElement("location");
136 location.setTextContent( departure.getLocation() );
137 train.appendChild(location);
138
139 Element status = doc.createElement("status");
140 status.setTextContent( departure.getStatus() );
141 train.appendChild(status);
142
143 Element note = doc.createElement("note");
144 note.setTextContent( departure.getNote() );
145 train.appendChild(note);
146
147 Element type = doc.createElement("type");
148 type.setTextContent( departure.getType() );
149 train.appendChild(type);
150
151 root.appendChild(train);
152 }
153
154 doc.appendChild(root);
155
156
157 DOMSource domSource = new DOMSource(doc);
158
159 Transformer transformer = transformerFactory.newTransformer();
160 //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
161 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
162 transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
163 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
164 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
165 java.io.StringWriter sw = new java.io.StringWriter();
166 StreamResult sr = new StreamResult(sw);
167 transformer.transform(domSource, sr);
168 xml = sw.toString();
169
170
171 } catch (Exception e) {
172 throw new ServletException(e);
173 }
174 return xml;
175 }
176
177 }

  ViewVC Help
Powered by ViewVC 1.1.20