/[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 1036 - (hide annotations) (download)
Wed Sep 8 12:49:22 2010 UTC (13 years, 8 months ago) by torben
File size: 7250 byte(s)
also enable timetables to use both new azure and old www
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3     import java.io.IOException;
4 torben 348 import java.util.logging.Level;
5     import java.util.logging.Logger;
6 torben 307
7     import javax.servlet.ServletException;
8 torben 958 import javax.servlet.annotation.WebServlet;
9 torben 307 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 torben 468 import dk.thoerup.circuitbreaker.CircuitBreakerException;
25 torben 711 import dk.thoerup.traininfoservice.Statistics;
26 torben 307
27     /**
28     * Servlet implementation class DepartureServlet
29     */
30 torben 958 @WebServlet(urlPatterns={"/DepartureServlet"})
31 torben 307 public class DepartureServlet extends HttpServlet {
32     private static final long serialVersionUID = 1L;
33 torben 348
34     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
35 torben 307
36 torben 580 DepartureFetcher fetcher;
37 torben 307 TransformerFactory transformerFactory = TransformerFactory.newInstance();
38     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
39    
40    
41 torben 425 @Override
42 torben 580 public void init() throws ServletException {
43     super.init();
44 torben 584
45 torben 1034 boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") );
46 torben 584 int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") );
47 torben 1026 int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") );
48 torben 1036 logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout);
49 torben 1034 fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout);
50 torben 580 }
51    
52     @Override
53 torben 711 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
54 torben 458 if (req.getParameter("station") == null) {
55     resp.sendError(400, "not enough parameters");
56     return;
57     }
58 torben 829
59     boolean arrival = false;
60     try {
61     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
62     } catch (Exception e) {}
63    
64 torben 711 Statistics.getInstance().incrementDepartureLookups();
65 torben 458
66 torben 307 int station = Integer.parseInt( req.getParameter("station") );
67     String format = req.getParameter("format");
68    
69 torben 1021 DepartureBean beans;
70 torben 307
71     try {
72 torben 829 beans = fetcher.cachedLookupDepartures(station, arrival);
73 torben 462 } catch (java.io.IOException ioe) {
74     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
75 torben 716 Statistics.getInstance().incrementDepartureErrors();
76 torben 348 resp.sendError(500);
77     return;
78 torben 421 } catch (CircuitBreakerException cbe) {
79     logger.warning("Circuitbreaker - failing fast");
80 torben 716 Statistics.getInstance().incrementDepartureErrors();
81 torben 421 resp.sendError(500);
82     return;
83 torben 451 } catch (Exception e) {
84 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
85 torben 716 Statistics.getInstance().incrementDepartureErrors();
86 torben 348 resp.sendError(500);
87     return;
88 torben 307 }
89    
90     resp.setDateHeader("Expires", 0);
91     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
92    
93     if (format.equalsIgnoreCase("xml")) {
94     resp.setContentType("text/xml");
95 torben 1021 resp.getWriter().print( formatXml(beans, arrival) );
96 torben 307 } else if (format.equalsIgnoreCase("html")) {
97 torben 585
98     String advStr = req.getParameter("advanced");
99     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
100    
101     req.setAttribute("advanced", advanced);
102 torben 307 req.setAttribute("departurebeans", beans);
103     req.setAttribute("stationID", station );
104     getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
105     } else {
106 torben 862 resp.sendError(400, "Unknown format");
107 torben 307 }
108    
109     }
110    
111 torben 1021 protected String formatXml(DepartureBean beans, boolean arrival) throws ServletException{
112 torben 307 String xml = "";
113     try {
114     DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
115     DOMImplementation impl = builder.getDOMImplementation();
116    
117    
118     Document doc = impl.createDocument(null,null,null);
119     Element root = doc.createElement("departureinfo");
120 torben 1021 root.setAttribute("station", beans.getStationName());
121 torben 969 root.setAttribute("arrival", Boolean.toString(arrival) );
122 torben 978
123     for (String notif : beans.notifications) {
124     Element notElem = doc.createElement("notification");
125     notElem.setTextContent(notif);
126     root.appendChild(notElem);
127     }
128    
129     for (DepartureEntry departure : beans.departureEntries) {
130 torben 307 Element train = doc.createElement("train");
131    
132     Element time = doc.createElement("time");
133     time.setTextContent( departure.getTime() );
134     train.appendChild(time);
135    
136     Element updated = doc.createElement("updated");
137     updated.setTextContent( String.valueOf(departure.getUpdated()) );
138     train.appendChild(updated);
139    
140     Element trainNumber = doc.createElement("trainnumber");
141     trainNumber.setTextContent( departure.getTrainNumber() );
142     train.appendChild(trainNumber);
143    
144     Element destination = doc.createElement("destination");
145     destination.setTextContent( departure.getDestination());
146     train.appendChild(destination);
147    
148     Element origin = doc.createElement("origin");
149     origin.setTextContent( departure.getOrigin() );
150     train.appendChild(origin);
151    
152     Element location= doc.createElement("location");
153     location.setTextContent( departure.getLocation() );
154     train.appendChild(location);
155    
156     Element status = doc.createElement("status");
157     status.setTextContent( departure.getStatus() );
158     train.appendChild(status);
159    
160     Element note = doc.createElement("note");
161     note.setTextContent( departure.getNote() );
162     train.appendChild(note);
163    
164 torben 697 Element type = doc.createElement("type");
165     type.setTextContent( departure.getType() );
166     train.appendChild(type);
167    
168 torben 307 root.appendChild(train);
169     }
170    
171     doc.appendChild(root);
172    
173    
174     DOMSource domSource = new DOMSource(doc);
175    
176     Transformer transformer = transformerFactory.newTransformer();
177     //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
178     transformer.setOutputProperty(OutputKeys.METHOD, "xml");
179     transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
180 torben 861 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "1");
181 torben 307 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
182     java.io.StringWriter sw = new java.io.StringWriter();
183     StreamResult sr = new StreamResult(sw);
184     transformer.transform(domSource, sr);
185     xml = sw.toString();
186    
187    
188     } catch (Exception e) {
189     throw new ServletException(e);
190     }
191     return xml;
192     }
193    
194     }

  ViewVC Help
Powered by ViewVC 1.1.20