package dk.thoerup.traininfo.provider; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; import android.util.Log; import dk.thoerup.android.traininfo.common.TimetableBean; import dk.thoerup.traininfo.util.AndroidTimeoutCache; import dk.thoerup.traininfo.util.DownloadUtil; import dk.thoerup.traininfo.util.XmlUtil; public class XmlTimetableProvider implements TimetableProvider { final static int CACHE_TIMEOUT = 60*1000; AndroidTimeoutCache timetableCache = new AndroidTimeoutCache(CACHE_TIMEOUT); @Override public TimetableBean lookupTimetable(String type, String trainID) { String trainNumber = extractTrainNumber(trainID); String key = type + "-" + trainID; TimetableBean timetables = timetableCache.get(key); if (timetables == null) { timetables = lookupTimetableWorker(type, trainNumber); if (timetables != null) { timetableCache.put(key, timetables); } } else { Log.i("XmlTimetableProvider", "cache hit !!!"); } return timetables; } public TimetableBean lookupTimetableWorker(String type, String trainNumber) { String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainNumber + "&type=" + type; Log.i("url", url); try { String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1"); Serializer serializer = new Persister(); TimetableBean timetables = serializer.read(TimetableBean.class, xml); return timetables; } catch (Exception e) { Log.e("XmlStationProvider", "lookupStations: ", e); } return null; } private String extractTrainNumber (String trainID) { String parts[] = trainID.split(" "); if (parts.length == 2) { return parts[1]; } else { return parts[0]; } } @Override public void purgeOldEntries() { timetableCache.purgeOldEntries(); } }