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

Annotation of /android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlStationProvider.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1005 - (hide annotations) (download)
Mon Aug 2 23:03:11 2010 UTC (13 years, 9 months ago) by torben
File size: 4127 byte(s)
remember to actually save the stations
1 torben 294 package dk.thoerup.traininfo.provider;
2    
3 torben 391
4 torben 383 import java.net.URLEncoder;
5 torben 294 import java.util.ArrayList;
6     import java.util.List;
7    
8     import org.w3c.dom.Document;
9     import org.w3c.dom.Node;
10     import org.w3c.dom.NodeList;
11    
12     import android.location.Location;
13     import android.util.Log;
14     import dk.thoerup.traininfo.StationBean;
15 torben 1004 import dk.thoerup.traininfo.util.AndroidTimeoutCache;
16 torben 294 import dk.thoerup.traininfo.util.DownloadUtil;
17 torben 352 import dk.thoerup.traininfo.util.XmlUtil;
18 torben 294
19     public class XmlStationProvider implements StationProvider {
20 torben 1004
21     final static int CACHE_TIMEOUT = 300*1000;
22 torben 294
23     List<StationBean> stations = new ArrayList<StationBean>();
24 torben 1004 AndroidTimeoutCache<String, List<StationBean>> stationCache = new AndroidTimeoutCache<String, List<StationBean>>(CACHE_TIMEOUT);
25 torben 294
26     @Override
27     public List<StationBean> getStations() {
28     return stations;
29     }
30    
31 torben 381
32 torben 294 @Override
33 torben 319 public boolean lookupStations(Location location) {
34 torben 564 String url = XmlUtil.SERVICE_BASE + "/LocateStations?latitude=" + (float)location.getLatitude() + "&longitude=" + (float)location.getLongitude();
35 torben 294 Log.i("url", url);
36 torben 381 return lookupStationsWorker(url);
37     }
38    
39     @Override
40 torben 433 public boolean lookupStationsByName(String name) {
41 torben 383
42     // String url = XmlUtil.SERVICE_BASE + "/LocateStations?name=" + Uri.encode(name);
43     String url = "";
44    
45     try {
46     url = XmlUtil.SERVICE_BASE + "/LocateStations?name=" + URLEncoder.encode(name, "ISO8859-1");
47     } catch (Exception e) {
48     Log.e("lookupStations", "Encoding failed", e);
49     }
50    
51 torben 381 Log.i("url", url);
52     return lookupStationsWorker(url);
53     }
54    
55    
56 torben 433 @Override
57     public boolean lookupStationsByIds(String ids) {
58     String url = "";
59     url = XmlUtil.SERVICE_BASE + "/LocateStations?list=" + ids;
60    
61     Log.i("url", url);
62     return lookupStationsWorker(url);
63     }
64 torben 1004
65     public boolean lookupStationsWorker(String url) {
66     boolean result;
67     List<StationBean> tmpStations = stationCache.get(url);
68    
69     if (tmpStations != null) {
70     Log.i("lookupStations", "cache hit " + url);
71 torben 1005 stations = tmpStations;
72 torben 1004 result = true;
73     } else {
74     result = fetchStations(url);
75    
76     if (result == true) {
77     stationCache.put(url, stations);
78     }
79     }
80    
81     return result;
82     }
83 torben 433
84    
85 torben 1004 public boolean fetchStations(String url) {
86 torben 381 boolean success = false;
87    
88 torben 294 try {
89     stations.clear();
90    
91 torben 302 String xml = DownloadUtil.getContentString(url, 15000, "ISO-8859-1");
92 torben 294
93    
94 torben 352 Document doc = XmlUtil.parseXML(xml);
95 torben 294 Node rootNode = doc.getDocumentElement(); // stations
96     NodeList stationList = rootNode.getChildNodes();
97    
98    
99     for (int i=0; i<stationList.getLength(); i++) {
100     Node stationNode = stationList.item(i);
101    
102     if (! stationNode.getNodeName().equals("station"))
103     continue;
104    
105     StationBean station = new StationBean();
106    
107     NodeList stationElements = stationNode.getChildNodes();
108     for (int j=0; j<stationElements.getLength(); j++) {
109     Node current = stationElements.item(j);
110    
111     String content = null;
112     if (current.getFirstChild() != null)
113     content = current.getFirstChild().getNodeValue(); //get the textNode - then get the text node's value
114    
115     String nodeName = current.getNodeName();
116    
117 torben 310 if (nodeName.equals("id"))
118     station.setId( Integer.parseInt(content));
119    
120 torben 294 if (nodeName.equals("name"))
121     station.setName(content);
122    
123     if (nodeName.equals("latitude"))
124     station.setLatitude( Double.parseDouble(content) );
125    
126     if (nodeName.equals("longitude"))
127 torben 575 station.setLongitude( Double.parseDouble(content) );
128 torben 294
129     if (nodeName.equals("calcdist"))
130     station.setDistance( (int) Double.parseDouble(content) );
131 torben 493
132     if (nodeName.equals("address"))
133     station.setAddress( content );
134 torben 551
135     if (nodeName.equals("regional"))
136     station.setRegional( Boolean.parseBoolean(content) );
137    
138     if (nodeName.equals("strain"))
139     station.setSTrain( Boolean.parseBoolean(content) );
140    
141     if (nodeName.equals("metro"))
142     station.setMetro( Boolean.parseBoolean(content) );
143 torben 294
144     }
145     stations.add(station);
146 torben 319 }
147     success = true;
148 torben 294
149    
150     } catch (Exception e) {
151     Log.e("XmlStationProvider", "lookupStations: ", e);
152     }
153 torben 319 return success;
154 torben 294 }
155     }

  ViewVC Help
Powered by ViewVC 1.1.20