/[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 969 - (hide annotations) (download)
Fri Jul 9 21:02:13 2010 UTC (13 years, 10 months ago) by torben
File size: 7099 byte(s)
include the arrival parameter in output xml
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3     import java.io.IOException;
4     import java.util.List;
5 torben 348 import java.util.logging.Level;
6     import java.util.logging.Logger;
7 torben 307
8     import javax.servlet.ServletException;
9 torben 958 import javax.servlet.annotation.WebServlet;
10 torben 307 import javax.servlet.http.HttpServlet;
11     import javax.servlet.http.HttpServletRequest;
12     import javax.servlet.http.HttpServletResponse;
13     import javax.xml.parsers.DocumentBuilder;
14     import javax.xml.parsers.DocumentBuilderFactory;
15     import javax.xml.transform.OutputKeys;
16     import javax.xml.transform.Transformer;
17     import javax.xml.transform.TransformerFactory;
18     import javax.xml.transform.dom.DOMSource;
19     import javax.xml.transform.stream.StreamResult;
20    
21     import org.w3c.dom.DOMImplementation;
22     import org.w3c.dom.Document;
23     import org.w3c.dom.Element;
24    
25 torben 468 import dk.thoerup.circuitbreaker.CircuitBreakerException;
26 torben 650 import dk.thoerup.traininfoservice.StationDAO;
27 torben 711 import dk.thoerup.traininfoservice.Statistics;
28 torben 307
29     /**
30     * Servlet implementation class DepartureServlet
31     */
32 torben 958 @WebServlet(urlPatterns={"/DepartureServlet"})
33 torben 307 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 711 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 torben 829
60     boolean arrival = false;
61     try {
62     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
63     } catch (Exception e) {}
64    
65 torben 711 Statistics.getInstance().incrementDepartureLookups();
66 torben 458
67 torben 307 int station = Integer.parseInt( req.getParameter("station") );
68     String format = req.getParameter("format");
69    
70     List<DepartureBean> beans;
71    
72 torben 650 String stationName = StationDAO.getStationName(station);
73 torben 307
74     try {
75 torben 829 beans = fetcher.cachedLookupDepartures(station, arrival);
76 torben 462 } catch (java.io.IOException ioe) {
77     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
78 torben 716 Statistics.getInstance().incrementDepartureErrors();
79 torben 348 resp.sendError(500);
80     return;
81 torben 421 } catch (CircuitBreakerException cbe) {
82     logger.warning("Circuitbreaker - failing fast");
83 torben 716 Statistics.getInstance().incrementDepartureErrors();
84 torben 421 resp.sendError(500);
85     return;
86 torben 451 } catch (Exception e) {
87 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
88 torben 716 Statistics.getInstance().incrementDepartureErrors();
89 torben 348 resp.sendError(500);
90     return;
91 torben 307 }
92    
93     resp.setDateHeader("Expires", 0);
94     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
95    
96     if (format.equalsIgnoreCase("xml")) {
97     resp.setContentType("text/xml");
98 torben 969 resp.getWriter().print( formatXml(beans, stationName, arrival) );
99 torben 307 } else if (format.equalsIgnoreCase("html")) {
100 torben 585
101     String advStr = req.getParameter("advanced");
102     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
103    
104     req.setAttribute("advanced", advanced);
105 torben 307 req.setAttribute("stationname", stationName );
106     req.setAttribute("departurebeans", beans);
107     req.setAttribute("stationID", station );
108     getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
109     } else {
110 torben 862 resp.sendError(400, "Unknown format");
111 torben 307 }
112    
113     }
114    
115 torben 969 protected String formatXml(List<DepartureBean> beans, String stationName, boolean arrival) throws ServletException{
116 torben 307 String xml = "";
117     try {
118     DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
119     DOMImplementation impl = builder.getDOMImplementation();
120    
121    
122     Document doc = impl.createDocument(null,null,null);
123     Element root = doc.createElement("departureinfo");
124     root.setAttribute("station", stationName);
125 torben 969 root.setAttribute("arrival", Boolean.toString(arrival) );
126 torben 307 for (DepartureBean departure : beans) {
127     Element train = doc.createElement("train");
128    
129     Element time = doc.createElement("time");
130     time.setTextContent( departure.getTime() );
131     train.appendChild(time);
132    
133     Element updated = doc.createElement("updated");
134     updated.setTextContent( String.valueOf(departure.getUpdated()) );
135     train.appendChild(updated);
136    
137     Element trainNumber = doc.createElement("trainnumber");
138     trainNumber.setTextContent( departure.getTrainNumber() );
139     train.appendChild(trainNumber);
140    
141     Element destination = doc.createElement("destination");
142     destination.setTextContent( departure.getDestination());
143     train.appendChild(destination);
144    
145     Element origin = doc.createElement("origin");
146     origin.setTextContent( departure.getOrigin() );
147     train.appendChild(origin);
148    
149     Element location= doc.createElement("location");
150     location.setTextContent( departure.getLocation() );
151     train.appendChild(location);
152    
153     Element status = doc.createElement("status");
154     status.setTextContent( departure.getStatus() );
155     train.appendChild(status);
156    
157     Element note = doc.createElement("note");
158     note.setTextContent( departure.getNote() );
159     train.appendChild(note);
160    
161 torben 697 Element type = doc.createElement("type");
162     type.setTextContent( departure.getType() );
163     train.appendChild(type);
164    
165 torben 307 root.appendChild(train);
166     }
167    
168     doc.appendChild(root);
169    
170    
171     DOMSource domSource = new DOMSource(doc);
172    
173     Transformer transformer = transformerFactory.newTransformer();
174     //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
175     transformer.setOutputProperty(OutputKeys.METHOD, "xml");
176     transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
177 torben 861 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "1");
178 torben 307 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
179     java.io.StringWriter sw = new java.io.StringWriter();
180     StreamResult sr = new StreamResult(sw);
181     transformer.transform(domSource, sr);
182     xml = sw.toString();
183    
184    
185     } catch (Exception e) {
186     throw new ServletException(e);
187     }
188     return xml;
189     }
190    
191     }

  ViewVC Help
Powered by ViewVC 1.1.20