4 |
import java.util.List; |
import java.util.List; |
5 |
|
|
6 |
import org.w3c.dom.Document; |
import org.w3c.dom.Document; |
7 |
import org.w3c.dom.NamedNodeMap; |
|
8 |
import org.w3c.dom.Node; |
import org.w3c.dom.Node; |
9 |
import org.w3c.dom.NodeList; |
import org.w3c.dom.NodeList; |
10 |
|
|
11 |
import android.util.Log; |
import android.util.Log; |
12 |
import dk.thoerup.traininfo.TimetableBean; |
import dk.thoerup.traininfo.TimetableBean; |
13 |
|
import dk.thoerup.traininfo.util.AndroidTimeoutCache; |
14 |
import dk.thoerup.traininfo.util.DownloadUtil; |
import dk.thoerup.traininfo.util.DownloadUtil; |
15 |
import dk.thoerup.traininfo.util.XmlUtil; |
import dk.thoerup.traininfo.util.XmlUtil; |
16 |
|
|
17 |
public class XmlTimetableProvider implements TimetableProvider { |
public class XmlTimetableProvider implements TimetableProvider { |
18 |
|
|
19 |
List<TimetableBean> timetables = new ArrayList<TimetableBean>(); |
final static int CACHE_TIMEOUT = 60*1000; |
20 |
|
|
21 |
|
AndroidTimeoutCache<String,List<TimetableBean>> timetableCache = new AndroidTimeoutCache<String,List<TimetableBean>>(CACHE_TIMEOUT); |
22 |
|
|
23 |
@Override |
@Override |
24 |
public List<TimetableBean> getTimetable() { |
public List<TimetableBean> lookupTimetable(String type, String trainID) { |
25 |
|
|
26 |
|
String trainNumber = extractTrainNumber(trainID); |
27 |
|
|
28 |
|
String key = type + "-" + trainID; |
29 |
|
List<TimetableBean> timetables = timetableCache.get(key); |
30 |
|
|
31 |
|
if (timetables == null) { |
32 |
|
timetables = lookupTimetableWorker(type, trainNumber); |
33 |
|
|
34 |
|
if (timetables != null) { |
35 |
|
timetableCache.put(key, timetables); |
36 |
|
} |
37 |
|
|
38 |
|
} else { |
39 |
|
Log.i("XmlTimetableProvider", "cache hit !!!"); |
40 |
|
} |
41 |
|
|
42 |
return timetables; |
return timetables; |
43 |
} |
} |
44 |
|
|
45 |
|
|
46 |
@Override |
public List<TimetableBean> lookupTimetableWorker(String type, String trainNumber) { |
47 |
public boolean lookupTimetable(String trainID) { |
|
48 |
boolean success = false; |
String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainNumber + "&type=" + type; |
|
String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainID.replace(" ", "%20") ; |
|
49 |
Log.i("url", url); |
Log.i("url", url); |
50 |
try { |
try { |
51 |
timetables.clear(); |
List<TimetableBean> timetables = new ArrayList<TimetableBean>(); |
52 |
|
|
53 |
String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1"); |
String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1"); |
54 |
|
|
92 |
if (nodeName.equals("departure")) |
if (nodeName.equals("departure")) |
93 |
timetable.setDeparture( content ); |
timetable.setDeparture( content ); |
94 |
|
|
95 |
|
if (nodeName.equals("stationid")) |
96 |
|
timetable.setStationId( Integer.parseInt(content)); |
97 |
|
|
98 |
/*if (nodeName.equals("current")) |
/*if (nodeName.equals("current")) |
99 |
timetable.setCurrent( Boolean.parseBoolean(content) );*/ |
timetable.setCurrent( Boolean.parseBoolean(content) );*/ |
100 |
|
|
101 |
} |
} |
102 |
timetables.add(timetable); |
timetables.add(timetable); |
103 |
} |
} |
104 |
success = true; |
return timetables; |
105 |
|
|
106 |
|
|
107 |
} catch (Exception e) { |
} catch (Exception e) { |
108 |
Log.e("XmlStationProvider", "lookupStations: ", e); |
Log.e("XmlStationProvider", "lookupStations: ", e); |
109 |
} |
} |
|
return success; |
|
110 |
|
|
111 |
|
return null; |
112 |
|
} |
113 |
|
|
114 |
|
private String extractTrainNumber (String trainID) { |
115 |
|
|
116 |
|
String parts[] = trainID.split(" "); |
117 |
|
if (parts.length == 2) { |
118 |
|
return parts[1]; |
119 |
|
} else { |
120 |
|
return parts[0]; |
121 |
|
} |
122 |
} |
} |
123 |
|
|
124 |
} |
} |