package dk.thoerup.traininfoservice.banedk; import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import dk.thoerup.android.traininfo.common.StationBean; import dk.thoerup.android.traininfo.common.StationEntry; import dk.thoerup.circuitbreaker.CircuitBreaker; import dk.thoerup.circuitbreaker.CircuitBreakerManager; import dk.thoerup.traininfoservice.db.StationDAO; @WebServlet(urlPatterns={"/CompareStations"}) public class CompareStations extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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(); try { Document doc = (Document) cb.invoke(jsoup); Elements tables = doc.getElementsByClass("Oversigt"); for(Element e : tables) { if (e.tagName().equals("table") ){ Elements links = e.getElementsByTag("a"); for (Element link : links) { banedkStations.put( link.text(), link.attr("href") ); } } } StationDAO dao = new StationDAO(); StationBean bean = dao.dumpAll(); for (StationEntry station : bean.entries) { if (station.isRegional() || station.isStrain()) { dbStations.add(station.getName()); } } } catch (Exception e) { throw new ServletException(e); } StringBuilder sb = new StringBuilder(); sb.append("

stations on website not in db

"); sb.append("
    "); Set tmpDbStations = new TreeSet( dbStations ); Set tmpBanedkStations = new TreeSet( banedkStations.keySet()) ; tmpBanedkStations.removeAll(tmpDbStations); for(String s : tmpBanedkStations) { String uri = banedkStations.get(s); sb.append( "
  • "+ s + "
  • " ); } sb.append("
"); sb.append("

stations in db not on website

"); sb.append("
    "); tmpDbStations = new TreeSet( dbStations ); tmpBanedkStations = new TreeSet( banedkStations.keySet() ) ; tmpDbStations.removeAll(tmpBanedkStations); for(String s : tmpDbStations) { sb.append( "
  • " + s + "
  • " ); } sb.append("
"); PrintWriter out = response.getWriter(); out.print(sb.toString()); } }