--- android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/CompareStations.java 2012/02/27 17:41:10 1697 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/CompareStations.java 2012/02/29 10:45:48 1698 @@ -3,6 +3,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.net.URL; +import java.net.URLEncoder; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -24,20 +25,42 @@ import dk.thoerup.circuitbreaker.CircuitBreakerManager; import dk.thoerup.traininfoservice.db.StationDAO; +import dk.thoerup.genericjavautils.TimeoutMap; + @WebServlet(urlPatterns={"/CompareStations"}) public class CompareStations extends HttpServlet { private static final long serialVersionUID = 1L; - + Map cache = new TimeoutMap(300 * 1000); + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + + String data = getData(request); + + PrintWriter out = response.getWriter(); + out.print(data); + + System.out.println("CompareStations completed"); + } catch (Exception e) { + throw new ServletException(e); + } + } + + String getData(HttpServletRequest request) throws Exception { CircuitBreaker cb = CircuitBreakerManager.getManager().getCircuitBreaker("banedk"); JsoupInvocation jsoup = new JsoupInvocation(new URL("http://trafikinfo.bane.dk/Trafikinformation/Stationsliste"), 5000); Map banedkStations = new TreeMap(); Set dbStations = new TreeSet(); - + + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append(""); + sb.append(""); + StationDAO dao = new StationDAO(); try { @@ -54,12 +77,33 @@ } } + sb.append("

Active stations in DB

\n"); + sb.append("
    "); + StationBean bean = dao.dumpAll(); for (StationEntry station : bean.entries) { if (station.isRegional() || station.isStrain()) { + if (station.isRegional() ) { + String id = URLEncoder.encode(station.getRegional(), "ISO-8859-1"); + String uri = "/Trafikinformation/AfgangAnkomst/Afgang/" + id + "/Fjerntog"; + + String data = hasData(uri, true); + + sb.append( "
  • " + station.getName() + "  " + data + "
  • \n" ); + } + if (station.isStrain() ) { + String id = URLEncoder.encode(station.getStrain(), "ISO-8859-1"); + String uri = "/Trafikinformation/AfgangAnkomst/Afgang/" + id + "/S-Tog"; + + String data = hasData(uri, true); + + sb.append( "
  • " + station.getName() + "  " + data + "
  • \n" ); + } + dbStations.add(station.getName()); } } + sb.append("
\n"); } catch (Exception e) { throw new ServletException(e); @@ -67,9 +111,7 @@ - StringBuilder sb = new StringBuilder(); - - sb.append("

stations on website not in db

"); + sb.append("

stations on website not in db

\n"); sb.append("
    "); Set tmpDbStations = new TreeSet( dbStations ); Set tmpBanedkStations = new TreeSet( banedkStations.keySet()) ; @@ -80,7 +122,7 @@ for(String s : tmpBanedkStations) { String uri = banedkStations.get(s); String disabled = ""; - String data = hasData(uri); + String data = hasData(uri, false); try { boolean tmpdisabled = dao.hasDisabledStation(s); @@ -90,7 +132,7 @@ throw new ServletException(e); } - sb.append( "
  • " + s + "  " + data + " - " + disabled + "
  • " ); + sb.append( "
  • " + s + "  " + data + " - " + disabled + "
  • \n" ); } sb.append("
"); @@ -101,36 +143,57 @@ tmpBanedkStations = new TreeSet( banedkStations.keySet() ) ; tmpDbStations.removeAll(tmpBanedkStations); for(String s : tmpDbStations) { - sb.append( "
  • " + s + "
  • " ); + sb.append( "
  • " + s + "
  • \n" ); } sb.append(""); + + sb.append("\n"); - - PrintWriter out = response.getWriter(); - out.print(sb.toString()); + return sb.toString(); } - String hasData(String uri) { - String returnVal = "unknown"; + String hasData(String uri, boolean requiredata) { + String key = uri + requiredata; + + String data = cache.get(key); + if (data == null) { - try { - CircuitBreaker cb = CircuitBreakerManager.getManager().getCircuitBreaker("banedk"); + data = "unknown"; + try { + data = hasDataWorker(uri,requiredata); + cache.put(key,data); + } catch (Exception e) { + System.out.println( e.getMessage() ); + } + } + return data; + } + + String hasDataWorker(String uri, boolean requiredata) throws Exception { + String returnVal = ""; + + CircuitBreaker cb = CircuitBreakerManager.getManager().getCircuitBreaker("banedk"); - JsoupInvocation jsoup = new JsoupInvocation(new URL("http://trafikinfo.bane.dk" + uri), 5000); + JsoupInvocation jsoup = new JsoupInvocation(new URL("http://trafikinfo.bane.dk" + uri), 2000); - Document doc = (Document) cb.invoke(jsoup); + Document doc = (Document) cb.invoke(jsoup); - Element tabel = doc.getElementById("afgangtabel"); - if ( tabel != null) { + Element tabel = doc.getElementById("afgangtabel"); + if ( tabel != null) { + if (requiredata == true) { + returnVal = ""; + } else { returnVal = "Data!"; + } + } else { + if (requiredata == true) { + returnVal = "No data"; } else { returnVal = ""; } - - } catch (Exception e) { - System.out.println( e.getMessage() ); } + return returnVal; }