/[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 650 - (hide annotations) (download)
Mon Apr 19 19:04:34 2010 UTC (14 years, 1 month ago) by torben
File size: 6333 byte(s)
Move function getStationName() function do DAO class
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     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 650 import dk.thoerup.traininfoservice.StationDAO;
26 torben 307
27     /**
28     * Servlet implementation class DepartureServlet
29     */
30     public class DepartureServlet extends HttpServlet {
31     private static final long serialVersionUID = 1L;
32 torben 348
33     Logger logger = Logger.getLogger( DepartureServlet.class.getName() );
34 torben 307
35 torben 580 DepartureFetcher fetcher;
36 torben 307 TransformerFactory transformerFactory = TransformerFactory.newInstance();
37     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
38    
39    
40 torben 425 @Override
41 torben 580 public void init() throws ServletException {
42     super.init();
43 torben 584
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 torben 580 }
49    
50     @Override
51 torben 307 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
52 torben 458 if (req.getParameter("station") == null) {
53     resp.sendError(400, "not enough parameters");
54     return;
55     }
56    
57 torben 307 int station = Integer.parseInt( req.getParameter("station") );
58     String format = req.getParameter("format");
59    
60     List<DepartureBean> beans;
61    
62 torben 650 String stationName = StationDAO.getStationName(station);
63 torben 307
64     try {
65 torben 387 beans = fetcher.cachedLookupDepartures(station);
66 torben 462 } catch (java.io.IOException ioe) {
67     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
68 torben 348 resp.sendError(500);
69     return;
70 torben 421 } catch (CircuitBreakerException cbe) {
71     logger.warning("Circuitbreaker - failing fast");
72     resp.sendError(500);
73     return;
74 torben 451 } catch (Exception e) {
75 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
76     resp.sendError(500);
77     return;
78 torben 307 }
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 torben 585
88     String advStr = req.getParameter("advanced");
89     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
90    
91     req.setAttribute("advanced", advanced);
92 torben 307 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     root.appendChild(train);
148     }
149    
150     doc.appendChild(root);
151    
152    
153     DOMSource domSource = new DOMSource(doc);
154    
155     Transformer transformer = transformerFactory.newTransformer();
156     //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
157     transformer.setOutputProperty(OutputKeys.METHOD, "xml");
158     transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
159     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
160     transformer.setOutputProperty(OutputKeys.INDENT, "yes");
161     java.io.StringWriter sw = new java.io.StringWriter();
162     StreamResult sr = new StreamResult(sw);
163     transformer.transform(domSource, sr);
164     xml = sw.toString();
165    
166    
167     } catch (Exception e) {
168     throw new ServletException(e);
169     }
170     return xml;
171     }
172    
173     }

  ViewVC Help
Powered by ViewVC 1.1.20