/[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 1373 - (hide annotations) (download)
Sat Apr 23 08:01:57 2011 UTC (13 years, 1 month ago) by torben
File size: 5532 byte(s)
Send an error xml doc when banedk is unavailable
1 torben 307 package dk.thoerup.traininfoservice.banedk;
2    
3     import java.io.IOException;
4 torben 1190 import java.io.StringWriter;
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 torben 1091 import javax.xml.transform.Templates;
14 torben 307 import javax.xml.transform.TransformerFactory;
15    
16 torben 1060 import org.simpleframework.xml.Serializer;
17     import org.simpleframework.xml.core.Persister;
18 torben 307
19 torben 1061 import dk.thoerup.android.traininfo.common.DepartureBean;
20 torben 1373 import dk.thoerup.android.traininfo.common.StationBean;
21 torben 468 import dk.thoerup.circuitbreaker.CircuitBreakerException;
22 torben 711 import dk.thoerup.traininfoservice.Statistics;
23 torben 1303 import dk.thoerup.traininfoservice.TraininfoSettings;
24 torben 1248 import dk.thoerup.traininfoservice.banedk.DepartureFetcher.FetchTrainType;
25 torben 1255 import dk.thoerup.traininfoservice.db.StationDAO;
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 1075
38    
39 torben 307
40 torben 1091 TransformerFactory xslTransFact;
41     Templates xslTemplate;
42 torben 1075
43 torben 307
44 torben 425 @Override
45 torben 580 public void init() throws ServletException {
46     super.init();
47 torben 584
48 torben 1303
49     TraininfoSettings settings = (TraininfoSettings) getServletContext().getAttribute("settings");
50     fetcher = new DepartureFetcher(settings);
51 torben 1075
52 torben 1253 /*
53 torben 1091 xslTransFact = TransformerFactory.newInstance();
54    
55     String xslPath = getServletContext().getRealPath("/departures.xsl");
56     Source stylesheet = new StreamSource( new File(xslPath) );
57    
58     try {
59     xslTemplate = xslTransFact.newTemplates(stylesheet);
60     } catch (Exception e) {
61     throw new ServletException(e);
62 torben 1253 }*/
63 torben 580 }
64    
65     @Override
66 torben 711 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
67 torben 458 if (req.getParameter("station") == null) {
68 torben 1168 resp.sendError(400, "not enough parameters (station)");
69 torben 458 return;
70     }
71 torben 1168 if (req.getParameter("format") == null) {
72     resp.sendError(400, "not enough parameters (format)");
73     return;
74     }
75 torben 829
76     boolean arrival = false;
77     try {
78     arrival = Integer.parseInt( req.getParameter("arrival")) != 0;
79     } catch (Exception e) {}
80    
81 torben 711 Statistics.getInstance().incrementDepartureLookups();
82 torben 458
83 torben 307 int station = Integer.parseInt( req.getParameter("station") );
84     String format = req.getParameter("format");
85    
86 torben 1248 DepartureBean beans;
87    
88     DepartureFetcher.FetchTrainType type = FetchTrainType.BOTH;
89     if ( req.getParameter("type") != null) {
90     type = FetchTrainType.valueOf( req.getParameter("type") );
91     }
92 torben 307
93 torben 1373
94 torben 307 try {
95 torben 1248 beans = fetcher.cachedLookupDepartures(station, arrival, type);
96 torben 1074 beans.arrival = arrival;
97 torben 462 } catch (java.io.IOException ioe) {
98     logger.warning("Read failed, station="+station + ". " + ioe.getMessage() );
99 torben 716 Statistics.getInstance().incrementDepartureErrors();
100 torben 1373 beans = generateErrorBean(1);
101 torben 421 } catch (CircuitBreakerException cbe) {
102 torben 1158 logger.warning("Circuitbreaker - failing fast, station=" +station);
103 torben 716 Statistics.getInstance().incrementDepartureErrors();
104 torben 1373 beans = generateErrorBean(1);
105 torben 1145 } catch (StationDAO.NostationException nse) {
106     logger.log(Level.WARNING, "Station not in Database, station=" +station);
107     Statistics.getInstance().incrementDepartureErrors();
108     resp.sendError(400, "invalid station ID");
109     return;
110 torben 451 } catch (Exception e) {
111 torben 348 logger.log(Level.WARNING, "Unknown exception, station=" +station, e);
112 torben 716 Statistics.getInstance().incrementDepartureErrors();
113 torben 348 resp.sendError(500);
114     return;
115 torben 307 }
116    
117     resp.setDateHeader("Expires", 0);
118     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
119    
120     if (format.equalsIgnoreCase("xml")) {
121     resp.setContentType("text/xml");
122 torben 1074 resp.getWriter().print( formatXml(beans) );
123 torben 307 } else if (format.equalsIgnoreCase("html")) {
124 torben 1206
125 torben 585 String advStr = req.getParameter("advanced");
126     boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false;
127    
128     req.setAttribute("advanced", advanced);
129 torben 307 req.setAttribute("departurebeans", beans);
130     req.setAttribute("stationID", station );
131 torben 1206 getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);
132     /*resp.setContentType("text/html");
133     resp.getWriter().print( xmlToHtml(formatXml(beans)) );*/
134 torben 307 } else {
135 torben 862 resp.sendError(400, "Unknown format");
136 torben 307 }
137     }
138 torben 1373
139     protected DepartureBean generateErrorBean(int code) {
140     DepartureBean bean = new DepartureBean();
141     bean.stationName="";
142     bean.errorCode = code;
143     return bean;
144     }
145 torben 307
146 torben 1074 protected String formatXml(DepartureBean beans) throws ServletException{
147 torben 1060
148     Serializer serializer = new Persister();
149 torben 307
150 torben 1190 StringWriter out = new StringWriter();
151 torben 307
152 torben 1060 try {
153     serializer.write(beans, out);
154 torben 307 } catch (Exception e) {
155     throw new ServletException(e);
156     }
157 torben 1060
158     return out.toString();
159 torben 307 }
160 torben 1253 /*
161 torben 1091 protected String xmlToHtml(String input) throws ServletException {
162 torben 307
163 torben 1091 try {
164 torben 1191 Transformer trans = xslTemplate.newTransformer();
165    
166 torben 1075
167 torben 1191 Source xml = new StreamSource( new StringReader(input));
168 torben 1190 StringWriter out = new StringWriter();
169 torben 1075 trans.transform(xml, new StreamResult(out));
170    
171     return out.toString();
172     } catch (Exception e) {
173 torben 1091 throw new ServletException(e);
174 torben 1075 }
175 torben 1253 }*/
176 torben 1075
177 torben 307 }

  ViewVC Help
Powered by ViewVC 1.1.20