1 |
package dk.thoerup.traininfoservice.banedk; |
2 |
|
3 |
import java.io.IOException; |
4 |
import java.io.PrintWriter; |
5 |
import java.net.URL; |
6 |
import java.sql.SQLException; |
7 |
import java.util.HashMap; |
8 |
import java.util.Map; |
9 |
import java.util.logging.Logger; |
10 |
|
11 |
import javax.servlet.ServletException; |
12 |
import javax.servlet.annotation.WebServlet; |
13 |
import javax.servlet.http.HttpServlet; |
14 |
import javax.servlet.http.HttpServletRequest; |
15 |
import javax.servlet.http.HttpServletResponse; |
16 |
|
17 |
import org.jsoup.nodes.Element; |
18 |
import org.jsoup.select.Elements; |
19 |
|
20 |
import dk.thoerup.android.traininfo.common.StationBean; |
21 |
import dk.thoerup.android.traininfo.common.StationEntry; |
22 |
import dk.thoerup.circuitbreaker.CircuitBreaker; |
23 |
import dk.thoerup.circuitbreaker.CircuitBreakerManager; |
24 |
import dk.thoerup.traininfoservice.db.StationDAO; |
25 |
|
26 |
|
27 |
@WebServlet(urlPatterns={"/CompareStationsTritinfo"}) |
28 |
public class CompareStationsTritinfo extends HttpServlet { |
29 |
|
30 |
private static final long serialVersionUID = 1L; |
31 |
|
32 |
Logger logger = Logger.getLogger( CompareStationsTritinfo.class.getName() ); |
33 |
|
34 |
@Override |
35 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
36 |
String uri = "http://tritinfo.pallas.dk/webtavle?page=listcontent"; |
37 |
logger.fine("URI:" + uri); |
38 |
|
39 |
|
40 |
JsoupInvocation wrapper = new JsoupInvocation( new URL(uri), 5000 ); |
41 |
CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("tritinfo"); |
42 |
try { |
43 |
|
44 |
Map<Integer,String> tritStations = new HashMap<Integer,String>(); |
45 |
|
46 |
PrintWriter writer = resp.getWriter(); |
47 |
Element page = (Element) breaker.invoke(wrapper); |
48 |
|
49 |
Elements stationlistElements = page.getElementsByClass("stationlist"); |
50 |
Element stationlist = stationlistElements.get(0); |
51 |
|
52 |
Elements links = stationlist.getElementsByTag("a"); |
53 |
|
54 |
for(Element link : links ) { |
55 |
String name = link.text(); |
56 |
|
57 |
String href = link.attr("href"); |
58 |
String hrefParts[] = href.split("="); |
59 |
String idStr = hrefParts[2]; |
60 |
|
61 |
int id = Integer.parseInt(idStr); |
62 |
|
63 |
|
64 |
|
65 |
tritStations.put(id, name); |
66 |
|
67 |
|
68 |
//writer.write(name + "=" + id + "\n"); |
69 |
} |
70 |
|
71 |
|
72 |
//writer.write("" + stationlist.html()); |
73 |
|
74 |
//writer.write("\nDump:" + tritStations.toString() ); |
75 |
|
76 |
|
77 |
Map<Integer,StationEntry> dbStations = getDbTritStations(); |
78 |
|
79 |
|
80 |
/////// |
81 |
// Data is collected now compare |
82 |
|
83 |
writer.write("<html><body>"); |
84 |
|
85 |
writer.write("<h2>Tritinfo Station compare</h2>"); |
86 |
writer.write("<a href='http://tritinfo.pallas.dk/'>http://tritinfo.pallas.dk/</a>"); |
87 |
|
88 |
writer.write("<h3>Stations on web not in DB</h3>"); |
89 |
writer.write("<ul>"); |
90 |
for (Integer webId : tritStations.keySet()) { |
91 |
if ( !dbStations.containsKey(webId)) { |
92 |
String webName = tritStations.get(webId); |
93 |
writer.write("<li>" + webName + " : " + webId + "</li>"); |
94 |
} |
95 |
|
96 |
|
97 |
} |
98 |
writer.write("</ul>"); |
99 |
|
100 |
//////////// |
101 |
writer.write("<h3>Stations in db not on web</h3>"); |
102 |
writer.write("<ul>"); |
103 |
|
104 |
for (Integer dbId : dbStations.keySet()) { |
105 |
if (! tritStations.containsKey(dbId)) { |
106 |
StationEntry dbName = dbStations.get(dbId); |
107 |
|
108 |
writer.write("<li>" + dbName.getName() + " : " + dbId + "</li>"); |
109 |
|
110 |
} |
111 |
} |
112 |
|
113 |
writer.write("</ul>"); |
114 |
|
115 |
writer.write("</body></html>"); |
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
} catch (Exception e) { |
122 |
throw new ServletException("JSoup failed", e); |
123 |
} |
124 |
|
125 |
} |
126 |
|
127 |
|
128 |
/* |
129 |
* Fetch a list of all DB station entries with a tritinfo ID |
130 |
*/ |
131 |
Map<Integer, StationEntry> getDbTritStations() throws SQLException { |
132 |
|
133 |
Map<Integer, StationEntry> result = new HashMap<Integer, StationEntry>(); |
134 |
|
135 |
StationDAO dao = new StationDAO(); |
136 |
StationBean allStations = dao.dumpAll(); |
137 |
for(StationEntry entry : allStations.entries) { |
138 |
if (entry.getTritStation() != -1) { |
139 |
result.put( entry.getTritStation(), entry); |
140 |
} |
141 |
} |
142 |
|
143 |
return result; |
144 |
} |
145 |
|
146 |
|
147 |
} |