4 |
import java.net.URL; |
import java.net.URL; |
5 |
import java.net.URLEncoder; |
import java.net.URLEncoder; |
6 |
import java.util.Collections; |
import java.util.Collections; |
7 |
|
import java.util.Comparator; |
8 |
import java.util.Map; |
import java.util.Map; |
9 |
import java.util.logging.Logger; |
import java.util.logging.Logger; |
10 |
|
|
41 |
Map<String, DepartureBean> cache; |
Map<String, DepartureBean> cache; |
42 |
|
|
43 |
StationDAO stationDao = new StationDAO(); |
StationDAO stationDao = new StationDAO(); |
44 |
|
TritinfoFetcher tritinfo; |
45 |
|
|
46 |
|
|
47 |
private TraininfoSettings settings; |
private TraininfoSettings settings; |
48 |
|
|
49 |
|
Comparator<DepartureEntry> departureTimeComparator = new Comparator<DepartureEntry>() { |
50 |
|
|
51 |
|
@Override |
52 |
|
public int compare(DepartureEntry arg0, DepartureEntry arg1) { |
53 |
|
String timeStr1 = arg0.getTime().replace(":","").trim(); |
54 |
|
String timeStr2 = arg1.getTime().replace(":","").trim(); |
55 |
|
|
56 |
|
int time1 = 0; |
57 |
|
int time2 = 0; |
58 |
|
|
59 |
|
if (timeStr1.length() > 0) |
60 |
|
time1 = Integer.parseInt(timeStr1); |
61 |
|
|
62 |
|
if (timeStr2.length() > 0) |
63 |
|
time2 = Integer.parseInt(timeStr2); |
64 |
|
|
65 |
|
//work correctly when clock wraps around at midnight |
66 |
|
if (Math.abs(time1-time2) < 1200) { |
67 |
|
if (time1 > time2) |
68 |
|
return 1; |
69 |
|
else |
70 |
|
return -1; |
71 |
|
} else { |
72 |
|
if (time1 < time2) |
73 |
|
return 1; |
74 |
|
else |
75 |
|
return -1; |
76 |
|
|
77 |
|
} |
78 |
|
|
79 |
|
} |
80 |
|
|
81 |
|
}; |
82 |
|
|
83 |
public DepartureFetcher(TraininfoSettings settings) { |
public DepartureFetcher(TraininfoSettings settings) { |
84 |
this.settings = settings; |
this.settings = settings; |
85 |
cache = new TimeoutMap<String,DepartureBean>( settings.getCacheTimeout() ); |
cache = new TimeoutMap<String,DepartureBean>( settings.getCacheTimeout() ); |
86 |
|
|
87 |
|
tritinfo = new TritinfoFetcher(settings); |
88 |
} |
} |
89 |
|
|
90 |
|
|
135 |
|
|
136 |
//TODO: FetchTraintype.Both should be removed some time after 0.9.5 release |
//TODO: FetchTraintype.Both should be removed some time after 0.9.5 release |
137 |
if (type == FetchTrainType.BOTH) { //if we have both S-tog and regional order by departure/arrival time |
if (type == FetchTrainType.BOTH) { //if we have both S-tog and regional order by departure/arrival time |
138 |
Collections.sort( departureBean.entries ); |
Collections.sort( departureBean.entries, departureTimeComparator); |
139 |
|
} |
140 |
|
|
141 |
|
//System.out.println("Trit: " + settings.isTritinfoEnabled() + " " + station.getTritStation() ); |
142 |
|
if ( settings.isTritinfoEnabled() && station.getTritStation() != -1) { |
143 |
|
try { |
144 |
|
tritinfo.injectTritinfoData(departureBean, station); |
145 |
|
} catch (Exception ex) { //det er ikke kritisk at vi får perron numre med |
146 |
|
logger.warning("tritinfo failed with " + ex.getClass().getName() + ": " + ex.getMessage() ); |
147 |
|
} |
148 |
} |
} |
149 |
|
|
150 |
|
|
521 |
Element anchorElement = trainTd.getElementsByTag("a").get(0); |
Element anchorElement = trainTd.getElementsByTag("a").get(0); |
522 |
String href = anchorElement.attr("href"); |
String href = anchorElement.attr("href"); |
523 |
|
|
524 |
int pos = href.lastIndexOf('/'); |
int pos = href.lastIndexOf('='); |
525 |
String number = href.substring(pos+1); |
String number = href.substring(pos+1); |
526 |
|
|
527 |
return number; |
return number; |
555 |
|
|
556 |
return number; |
return number; |
557 |
} |
} |
558 |
|
|
559 |
|
|
560 |
|
|
561 |
//test |
//test |