/[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 1066 by torben, Thu Sep 16 15:32:42 2010 UTC
# Line 1  Line 1 
1  package dk.thoerup.traininfo.provider;  package dk.thoerup.traininfo.provider;
2    
3  import java.util.ArrayList;  import org.simpleframework.xml.Serializer;
4  import java.util.List;  import org.simpleframework.xml.core.Persister;
   
 import org.w3c.dom.Document;  
 import org.w3c.dom.Node;  
 import org.w3c.dom.NodeList;  
5    
6  import android.util.Log;  import android.util.Log;
7  import dk.thoerup.traininfo.TimetableBean;  import dk.thoerup.android.traininfo.common.TimetableBean;
8    import dk.thoerup.traininfo.util.AndroidTimeoutCache;
9  import dk.thoerup.traininfo.util.DownloadUtil;  import dk.thoerup.traininfo.util.DownloadUtil;
10  import dk.thoerup.traininfo.util.XmlUtil;  import dk.thoerup.traininfo.util.XmlUtil;
11    
12  public class XmlTimetableProvider implements TimetableProvider {  public class XmlTimetableProvider implements TimetableProvider {
13                    
14          List<TimetableBean> timetables = new ArrayList<TimetableBean>();          final static int CACHE_TIMEOUT = 60*1000;
15    
16            AndroidTimeoutCache<String,TimetableBean> timetableCache = new AndroidTimeoutCache<String,TimetableBean>(CACHE_TIMEOUT);        
17    
18          @Override          @Override
19          public List<TimetableBean> getTimetable() {          public TimetableBean lookupTimetable(String type, String trainID) {
20                    
21                    String trainNumber = extractTrainNumber(trainID);
22                    
23                    String key = type + "-" + trainID;
24                    TimetableBean timetables = timetableCache.get(key);
25            
26                    if (timetables == null) {                      
27                            timetables = lookupTimetableWorker(type, trainNumber);
28                            
29                            if (timetables != null) {                      
30                                    timetableCache.put(key, timetables);
31                            }
32                            
33                    } else {
34                            Log.i("XmlTimetableProvider", "cache hit !!!");
35                    }              
36                    
37                  return timetables;                  return timetables;
38          }          }
39            
40    
41          @Override          public TimetableBean lookupTimetableWorker(String type, String trainNumber) {
42          public boolean lookupTimetable(String trainID) {  
43                  boolean success = false;                  String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainNumber + "&type=" + type;
                 String url = XmlUtil.SERVICE_BASE + "/TimetableServlet?train=" + trainID ;  
44                  Log.i("url", url);                  Log.i("url", url);
45                  try {                  try {
                         timetables.clear();  
46                                                    
47                          String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1");                          String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1");
48                                                    
49                            Serializer serializer = new Persister();
50    
51                            TimetableBean timetables = serializer.read(TimetableBean.class, xml);
52                                                    
                         Document doc = XmlUtil.parseXML(xml);  
                         Node rootNode = doc.getDocumentElement(); // stations  
                         NodeList stationList = rootNode.getChildNodes();  
53                                                    
54                            return timetables;
                         for (int i=0; i<stationList.getLength(); i++) {  
                                 Node entryNode = stationList.item(i);  
                                   
                                 if (! entryNode.getNodeName().equals("entry"))  
                                         continue;  
           
                                 TimetableBean timetable = new TimetableBean();  
                                   
                                 NodeList entries = entryNode.getChildNodes();  
                                 for (int j=0; j<entries.getLength(); j++) {      
                                         Node current = entries.item(j);  
                                                                                   
                                         String content = null;  
                                         if (current.getFirstChild() != null)  
                                                 content = current.getFirstChild().getNodeValue(); //get the textNode - then get the text node's value  
                                           
                                         String nodeName = current.getNodeName();  
                                           
                                         if (nodeName.equals("station"))  
                                                 timetable.setStation( content );                                                  
                                           
                                         if (nodeName.equals("arrival"))  
                                                 timetable.setArrival( content );  
                                           
                                         if (nodeName.equals("departure"))  
                                                 timetable.setDeparture( content );  
                                           
                                         if (nodeName.equals("current"))  
                                                 timetable.setCurrent( Boolean.parseBoolean(content) );  
   
                                 }  
                                 timetables.add(timetable);                                
                         }  
                         success = true;  
55                                                    
56                                                    
57                  } catch (Exception e) {                  } catch (Exception e) {
58                          Log.e("XmlStationProvider", "lookupStations: ", e);                          Log.e("XmlStationProvider", "lookupStations: ", e);
59                  }                  }
                 return success;  
60    
61                    return null;
62            }
63            
64            private String extractTrainNumber (String trainID) {
65    
66                    String parts[]  = trainID.split(" ");
67                    if (parts.length == 2) {
68                            return parts[1];
69                    } else {
70                            return parts[0];
71                    }
72          }          }
73    
74  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.20