/[projects]/android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/MetroFetcher.java
ViewVC logotype

Annotation of /android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/MetroFetcher.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1255 - (hide annotations) (download)
Mon Apr 4 10:56:44 2011 UTC (13 years, 1 month ago) by torben
File size: 3468 byte(s)
Move database related classes to it's own package
1 torben 1042 package dk.thoerup.traininfoservice.banedk;
2    
3    
4     import java.net.URL;
5     import java.util.Map;
6     import java.util.logging.Logger;
7    
8     import org.jsoup.nodes.Document;
9     import org.jsoup.nodes.Element;
10     import org.jsoup.select.Elements;
11    
12 torben 1061 import dk.thoerup.android.traininfo.common.MetroBean;
13     import dk.thoerup.android.traininfo.common.MetroBean.MetroEntry;
14     import dk.thoerup.android.traininfo.common.StationBean.StationEntry;
15 torben 1042 import dk.thoerup.circuitbreaker.CircuitBreaker;
16     import dk.thoerup.circuitbreaker.CircuitBreakerManager;
17     import dk.thoerup.traininfoservice.Statistics;
18 torben 1255 import dk.thoerup.traininfoservice.db.StationDAO;
19 torben 1042
20    
21    
22     public class MetroFetcher {
23    
24     Logger logger = Logger.getLogger(MetroFetcher.class.getName());
25     StationDAO stationDAO = new StationDAO();
26    
27 torben 1043 Map<String, MetroBean> cache = new TimeoutMap<String,MetroBean>(60000); //TODO: make metro cache timeout configurable
28 torben 1042
29     public MetroBean cachedLookupMetroDepartures(int stationID) throws Exception {
30     final String key = "metro:" + stationID;
31    
32     MetroBean metroBean = cache.get(key);
33    
34     if (metroBean == null) {
35     metroBean = lookupMetroDepartures(stationID);
36     cache.put(key, metroBean);
37     } else {
38     Statistics.getInstance().incrementDepartureCacheHits();
39     logger.info("Metro: Cache hit " + key); //remove before production
40     }
41     return metroBean;
42     }
43    
44     public MetroBean lookupMetroDepartures(int stationID) throws Exception {
45    
46 torben 1060 StationEntry station = stationDAO.getById(stationID) ;
47 torben 1042
48    
49     URL url = new URL("http://www.m.dk/layouts/Metro/Widgets/MetroWidget.ashx?StationId=" + station.getMetro() + "&Congestion=true&Application=MyMetro&Expiration=true");
50 torben 1048 logger.fine("URL:" + url);
51 torben 1042
52     JsoupInvocation wrapper = new JsoupInvocation( url, 3000);
53     CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("metro");
54    
55     Document doc = (Document) breaker.invoke(wrapper);
56    
57     MetroBean bean = new MetroBean();
58    
59     bean.head = doc.getElementsByClass("metro-widget-headline").get(0).text();
60    
61     Element content = doc.getElementsByClass("metro-widget-content").get(0);
62     Elements contentElems = content.children();
63    
64 torben 1147 Elements contentTables = content.getElementsByTag("table");
65     if ( contentTables.size() > 0 ) {
66 torben 1042
67 torben 1147 Element departureTable = content.getElementsByTag("table").get(0);
68    
69     Elements rows = departureTable.getElementsByTag("tr");
70    
71     for (int i=1; i<rows.size(); i++) {
72     Element row = rows.get(i);
73     Elements fields = row.children();
74    
75    
76    
77     Elements metroFields = fields.get(0).children();
78     String metro ="";
79     for (Element elm : metroFields) {
80     metro = metro + elm.text() + " ";
81     }
82    
83    
84    
85     String destination = fields.get(1).text();
86    
87     Elements minuteFields = fields.get(2).children();
88     String minutes ="";
89     for (Element elm : minuteFields) {
90     minutes = minutes + elm.text() + " ";
91     }
92    
93     MetroEntry entry = new MetroEntry();
94     entry.metro = metro.trim();
95     entry.destination = destination.trim();
96     entry.minutes = minutes.trim();
97    
98     bean.entries.add(entry);
99 torben 1056 }
100 torben 1147 }
101    
102    
103     for (int i=0; i<contentElems.size(); i++) {
104     String currentText = contentElems.get(i).text().trim();
105     if (currentText.equalsIgnoreCase("driftsinformation")) {
106     bean.operationInfo = contentElems.get(i+1).text();
107 torben 1042 }
108    
109 torben 1147 if (currentText.equalsIgnoreCase("køreplan")) {
110 torben 1050 bean.plan = contentElems.get(i+1).text();
111     }
112 torben 1043 }
113 torben 1147
114 torben 1050
115 torben 1147
116 torben 1042 return bean;
117     }
118    
119     }

  ViewVC Help
Powered by ViewVC 1.1.20