--- android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlDepartureProvider.java 2009/08/08 20:09:47 238 +++ android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlDepartureProvider.java 2010/10/04 08:42:12 1160 @@ -1,95 +1,73 @@ package dk.thoerup.traininfo.provider; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.DefaultHandler; + + +import org.simpleframework.xml.Serializer; +import org.simpleframework.xml.core.Persister; + import android.util.Log; -import dk.thoerup.traininfo.DepartureBean; +import dk.thoerup.android.traininfo.common.DepartureBean; +import dk.thoerup.traininfo.util.AndroidTimeoutCache; import dk.thoerup.traininfo.util.DownloadUtil; +import dk.thoerup.traininfo.util.XmlUtil; -public class XmlDepartureProvider extends DefaultHandler implements DepartureProvider { +public class XmlDepartureProvider implements DepartureProvider { - ArrayList departures = new ArrayList(); + final static int CACHE_TIMEOUT = 60*1000; + + AndroidTimeoutCache departureCache = new AndroidTimeoutCache(CACHE_TIMEOUT); - DepartureBean tempDeparture; - StringBuilder builder = new StringBuilder(512); + @Override - public void lookupDepartures(String station) { - departures.clear(); - try - { String url = "http://t-hoerup.dk/tog/xml_display.php?stationname="+station; - String doc = DownloadUtil.getContent(url, 30000, "ISO-8859-1"); + public DepartureBean lookupDepartures(int stationID, boolean arrival) { + + String key = "" + stationID + ":" + arrival; + + DepartureBean departures = departureCache.get(key); + + if (departures == null) { + departures = lookupDeparturesWorker(stationID, arrival); - InputSource source = new InputSource( new StringReader(doc)); + if (departures != null) { + departureCache.put(key, departures); + } - SAXParserFactory spf = SAXParserFactory.newInstance(); - SAXParser sp = spf.newSAXParser(); - XMLReader xr = sp.getXMLReader(); - - xr.setContentHandler(this); - xr.setErrorHandler(this); - xr.setDTDHandler(this); - xr.parse(source); - } catch (Exception e) { - Log.e("XmlDepartureProvider", "looupFunction", e); - } - } - - @Override - public List getDepartures() { + } else { + Log.i("XmlDepartureProvider", "cache hit !!!"); + } + return departures; } - // this can be called several times fore the same text-node if there are many chardata / lines - @Override - public void characters (char ch[], int start, int length) - { - for (int i= start; i