/[projects]/android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlTimetableProvider.java
ViewVC logotype

Diff of /android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlTimetableProvider.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 357 by torben, Tue Sep 29 19:06:34 2009 UTC revision 391 by torben, Sat Oct 3 10:55:43 2009 UTC
# Line 4  import java.util.ArrayList; Line 4  import java.util.ArrayList;
4  import java.util.List;  import java.util.List;
5    
6  import org.w3c.dom.Document;  import org.w3c.dom.Document;
7    
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            List<TimetableBean> timetables;
22    
23            AndroidTimeoutCache<String,List<TimetableBean>> departureCache = new AndroidTimeoutCache<String,List<TimetableBean>>(CACHE_TIMEOUT);
24            
25          @Override          @Override
26          public List<TimetableBean> getTimetable() {          public List<TimetableBean> getTimetable(String trainID) {
27                  return timetables;                  List<TimetableBean> list = departureCache.get(trainID);
28                    
29                    if (list == null) {                    
30                            list = new ArrayList<TimetableBean>();
31                    }
32                    
33                    return list;
34          }          }
35    
36          @Override          @Override
37          public boolean lookupTimetable(String trainID) {          public boolean lookupTimetable(String trainID) {
38                    boolean success;
39                    
40                    timetables = departureCache.get(trainID);
41            
42                    if (timetables == null) {                      
43                            success = lookupTimetableWorker(trainID);
44                            
45                            if (success) {                  
46                                    departureCache.put(trainID, timetables);
47                            }
48                            
49                    } else {
50                            Log.i("XmlTimetableProvider", "cache hit !!!");
51                            success = true;
52                    }              
53                    
54                    return success;
55            }
56            
57    
58            public boolean lookupTimetableWorker(String trainID) {
59                  boolean success = false;                  boolean success = false;
60                  String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainID ;                  String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainID.replace(" ", "%20") ;
61                  Log.i("url", url);                  Log.i("url", url);
62                  try {                  try {
63                          timetables.clear();                          timetables = new ArrayList<TimetableBean>();
64                                                    
65                          String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1");                          String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1");
66                                                    
# Line 45  public class XmlTimetableProvider implem Line 78  public class XmlTimetableProvider implem
78                    
79                                  TimetableBean timetable = new TimetableBean();                                  TimetableBean timetable = new TimetableBean();
80                                                                    
81                                  NodeList entries = entryNode.getChildNodes();                                  NodeList entries = entryNode.getChildNodes();                          
82                                    
83                                    if (entryNode.hasAttributes() && entryNode.getAttributes().getNamedItem("current") != null) {                                  
84                                            timetable.setCurrent( Boolean.parseBoolean(entryNode.getAttributes().getNamedItem("current").getNodeValue()));
85                                    } else {
86                                            timetable.setCurrent(false);
87                                    }
88                                    
89                                  for (int j=0; j<entries.getLength(); j++) {                                      for (int j=0; j<entries.getLength(); j++) {    
90                                          Node current = entries.item(j);                                          Node current = entries.item(j);
91                                                                                                                                                                    
# Line 64  public class XmlTimetableProvider implem Line 104  public class XmlTimetableProvider implem
104                                          if (nodeName.equals("departure"))                                          if (nodeName.equals("departure"))
105                                                  timetable.setDeparture( content );                                                  timetable.setDeparture( content );
106                                                                                    
107                                          if (nodeName.equals("current"))                                          /*if (nodeName.equals("current"))
108                                                  timetable.setCurrent( Boolean.parseBoolean(content) );                                                  timetable.setCurrent( Boolean.parseBoolean(content) );*/
109    
110                                  }                                  }
111                                  timetables.add(timetable);                                                                timetables.add(timetable);                              

Legend:
Removed from v.357  
changed lines
  Added in v.391

  ViewVC Help
Powered by ViewVC 1.1.20