--- android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlTimetableProvider.java 2009/10/03 10:55:43 391 +++ android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlTimetableProvider.java 2010/09/08 06:03:45 1027 @@ -17,50 +17,38 @@ public class XmlTimetableProvider implements TimetableProvider { final static int CACHE_TIMEOUT = 60*1000; - - List timetables; - AndroidTimeoutCache> departureCache = new AndroidTimeoutCache>(CACHE_TIMEOUT); - - @Override - public List getTimetable(String trainID) { - List list = departureCache.get(trainID); - - if (list == null) { - list = new ArrayList(); - } - - return list; - } + AndroidTimeoutCache> timetableCache = new AndroidTimeoutCache>(CACHE_TIMEOUT); @Override - public boolean lookupTimetable(String trainID) { - boolean success; + public List lookupTimetable(String type, String trainID) { + + String trainNumber = extractTrainNumber(trainID); - timetables = departureCache.get(trainID); + String key = type + "-" + trainID; + List timetables = timetableCache.get(key); if (timetables == null) { - success = lookupTimetableWorker(trainID); + timetables = lookupTimetableWorker(type, trainNumber); - if (success) { - departureCache.put(trainID, timetables); + if (timetables != null) { + timetableCache.put(key, timetables); } } else { Log.i("XmlTimetableProvider", "cache hit !!!"); - success = true; } - return success; + return timetables; } - public boolean lookupTimetableWorker(String trainID) { - boolean success = false; - String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainID.replace(" ", "%20") ; + public List lookupTimetableWorker(String type, String trainNumber) { + + String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainNumber + "&type=" + type; Log.i("url", url); try { - timetables = new ArrayList(); + List timetables = new ArrayList(); String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1"); @@ -104,20 +92,33 @@ if (nodeName.equals("departure")) timetable.setDeparture( content ); + if (nodeName.equals("stationid")) + timetable.setStationId( Integer.parseInt(content)); + /*if (nodeName.equals("current")) timetable.setCurrent( Boolean.parseBoolean(content) );*/ } timetables.add(timetable); } - success = true; + return timetables; } catch (Exception e) { Log.e("XmlStationProvider", "lookupStations: ", e); } - return success; + return null; + } + + private String extractTrainNumber (String trainID) { + + String parts[] = trainID.split(" "); + if (parts.length == 2) { + return parts[1]; + } else { + return parts[0]; + } } }