1 |
torben |
2079 |
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.ArrayList; |
8 |
|
|
import java.util.HashMap; |
9 |
|
|
import java.util.List; |
10 |
|
|
import java.util.Map; |
11 |
|
|
import java.util.logging.Logger; |
12 |
|
|
|
13 |
|
|
import javax.servlet.ServletException; |
14 |
|
|
import javax.servlet.annotation.WebServlet; |
15 |
|
|
import javax.servlet.http.HttpServlet; |
16 |
|
|
import javax.servlet.http.HttpServletRequest; |
17 |
|
|
import javax.servlet.http.HttpServletResponse; |
18 |
|
|
|
19 |
|
|
import org.jsoup.nodes.Element; |
20 |
|
|
import org.jsoup.select.Elements; |
21 |
|
|
|
22 |
|
|
import dk.thoerup.android.traininfo.common.StationBean; |
23 |
|
|
import dk.thoerup.android.traininfo.common.StationEntry; |
24 |
|
|
import dk.thoerup.circuitbreaker.CircuitBreaker; |
25 |
|
|
import dk.thoerup.circuitbreaker.CircuitBreakerManager; |
26 |
|
|
import dk.thoerup.traininfoservice.db.StationDAO; |
27 |
|
|
|
28 |
|
|
|
29 |
|
|
@WebServlet(urlPatterns={"/CompareStationsTritinfo"}) |
30 |
|
|
public class CompareStationsTritinfo extends HttpServlet { |
31 |
|
|
|
32 |
|
|
private static final long serialVersionUID = 1L; |
33 |
|
|
|
34 |
|
|
Logger logger = Logger.getLogger( CompareStationsTritinfo.class.getName() ); |
35 |
|
|
|
36 |
|
|
@Override |
37 |
|
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
38 |
|
|
String uri = "http://tritinfo.pallas.dk/webtavle?page=listcontent"; |
39 |
|
|
logger.fine("URI:" + uri); |
40 |
|
|
|
41 |
|
|
|
42 |
|
|
JsoupInvocation wrapper = new JsoupInvocation( new URL(uri), 5000 ); |
43 |
|
|
CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("tritinfo"); |
44 |
|
|
try { |
45 |
|
|
|
46 |
|
|
Map<Integer,String> tritStations = new HashMap<Integer,String>(); |
47 |
|
|
|
48 |
|
|
PrintWriter writer = resp.getWriter(); |
49 |
|
|
Element page = (Element) breaker.invoke(wrapper); |
50 |
|
|
|
51 |
|
|
Elements stationlistElements = page.getElementsByClass("stationlist"); |
52 |
|
|
Element stationlist = stationlistElements.get(0); |
53 |
|
|
|
54 |
|
|
Elements links = stationlist.getElementsByTag("a"); |
55 |
|
|
|
56 |
|
|
for(Element link : links ) { |
57 |
|
|
String name = link.text(); |
58 |
|
|
|
59 |
|
|
String href = link.attr("href"); |
60 |
|
|
String hrefParts[] = href.split("="); |
61 |
|
|
String idStr = hrefParts[2]; |
62 |
|
|
|
63 |
|
|
int id = Integer.parseInt(idStr); |
64 |
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
tritStations.put(id, name); |
68 |
|
|
|
69 |
|
|
|
70 |
|
|
//writer.write(name + "=" + id + "\n"); |
71 |
|
|
} |
72 |
|
|
|
73 |
|
|
|
74 |
|
|
//writer.write("" + stationlist.html()); |
75 |
|
|
|
76 |
|
|
//writer.write("\nDump:" + tritStations.toString() ); |
77 |
|
|
|
78 |
|
|
|
79 |
|
|
Map<Integer,StationEntry> dbStations = getDbTritStations(); |
80 |
|
|
|
81 |
|
|
|
82 |
|
|
/////// |
83 |
|
|
// Data is collected now compare |
84 |
|
|
|
85 |
|
|
writer.write("<h2>Tritinfo Station compare</h2>"); |
86 |
|
|
writer.write("<a href='tritinfo.pallas.dk/'>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 |
|
|
|
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 |
|
|
} |