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

Diff of /android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableFetcher.java

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

revision 387 by torben, Fri Oct 2 15:06:08 2009 UTC revision 591 by torben, Wed Feb 10 14:07:04 2010 UTC
# Line 5  import java.io.IOException; Line 5  import java.io.IOException;
5  import java.net.URL;  import java.net.URL;
6  import java.util.ArrayList;  import java.util.ArrayList;
7  import java.util.List;  import java.util.List;
8    import java.util.Map;
9  import java.util.logging.Logger;  import java.util.logging.Logger;
10    
11    import com.gargoylesoftware.htmlunit.BrowserVersion;
12  import com.gargoylesoftware.htmlunit.Page;  import com.gargoylesoftware.htmlunit.Page;
13  import com.gargoylesoftware.htmlunit.RefreshHandler;  import com.gargoylesoftware.htmlunit.RefreshHandler;
14  import com.gargoylesoftware.htmlunit.WebClient;  import com.gargoylesoftware.htmlunit.WebClient;
# Line 14  import com.gargoylesoftware.htmlunit.htm Line 16  import com.gargoylesoftware.htmlunit.htm
16  import com.gargoylesoftware.htmlunit.html.HtmlElement;  import com.gargoylesoftware.htmlunit.html.HtmlElement;
17  import com.gargoylesoftware.htmlunit.html.HtmlPage;  import com.gargoylesoftware.htmlunit.html.HtmlPage;
18    
19    import dk.thoerup.circuitbreaker.CircuitBreaker;
20    import dk.thoerup.circuitbreaker.CircuitBreakerManager;
21    
22  public class TimetableFetcher {  public class TimetableFetcher {
23                    
24          class NullRefreshHandler implements RefreshHandler {          class NullRefreshHandler implements RefreshHandler {
# Line 22  public class TimetableFetcher { Line 27  public class TimetableFetcher {
27                                    
28          }          }
29                                    
30          TimeoutCache<String, List<TimetableBean>> cache = new TimeoutCache<String,List<TimetableBean>>(120 * 1000);          Map<String, List<TimetableBean>> cache;
31                    
32                    
33          Logger logger = Logger.getLogger(TimetableFetcher.class.getName());          Logger logger = Logger.getLogger(TimetableFetcher.class.getName());
34                    
35            private boolean useTempSite;
36            
37            public TimetableFetcher(boolean tmpSite, int cacheTimeout) {
38                    useTempSite = tmpSite;
39                    
40                    cache = new TimeoutMap<String,List<TimetableBean>>(cacheTimeout);
41            }
42            
43                    
44          List<TimetableBean> cachedLookupTimetable(String trainID, String type) throws Exception {          List<TimetableBean> cachedLookupTimetable(String trainID, String type) throws Exception {
45                  String key = trainID+type;                  String key = trainID+type;
46                  List<TimetableBean> list = cache.get(key);                  List<TimetableBean> list = cache.get(key);
47                                    
48                  if (list == null) {                  if (list == null) {
                         logger.warning("Timetable: Cache miss " + trainID); //remove before production  
49                          list = lookupTimetable(trainID,type);                          list = lookupTimetable(trainID,type);
50                          cache.put(key, list);                          cache.put(key, list);
51                  } else {                  } else {
52                          logger.warning("Timetable: Cache hit " + trainID); //remove before production                          logger.info("Timetable: Cache hit " + trainID);
53                  }                  }
54                  return list;                  return list;
55          }          }
56            
57            List<TimetableBean> lookupTimetable(String trainID, String type) throws Exception {
58                    if (useTempSite == false ){
59                            return lookupTimetableRealSite(trainID, type);
60                    } else {
61                            return new ArrayList<TimetableBean>(); // no timetable data on temp site
62                    }
63            }
64    
65          List<TimetableBean> lookupTimetable(String trainID, String type) throws Exception {                      List<TimetableBean> lookupTimetableRealSite(String trainID, String type) throws Exception {            
66                  List<TimetableBean> timetableList = new ArrayList<TimetableBean>();                  List<TimetableBean> timetableList = new ArrayList<TimetableBean>();
67                                    
68                  String url = "http://www.bane.dk/visRute.asp?W=" + type + "&TogNr=" + trainID + "&artikelId=4276";                  String url = "http://www.bane.dk/visRute.asp?W=" + type + "&TogNr=" + trainID + "&artikelId=4276";
69                                                                    
70    
71              final WebClient webClient = new WebClient();              final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
72              webClient.setTimeout(2500);              webClient.setTimeout(2500);
73              webClient.setJavaScriptEnabled(false);                      webClient.setJavaScriptEnabled(false);        
74              webClient.setRefreshHandler( new NullRefreshHandler() );              webClient.setRefreshHandler( new NullRefreshHandler() );
75              webClient.setCssEnabled(false);              webClient.setCssEnabled(false);
76                            
77                            
78              final HtmlPage page = webClient.getPage(url);              BanedkInvocation wrapper = new BanedkInvocation(webClient, url);
79                CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("banedk");
80                            
81                HtmlPage page = (HtmlPage) breaker.invoke(wrapper);
82                        
83                            
84              boolean currentStation = false;              boolean currentStation = false;
85              boolean currentStationSaved = false;              boolean currentStationSaved = false;
# Line 96  public class TimetableFetcher { Line 119  public class TimetableFetcher {
119              } else {              } else {
120                  logger.warning("No time table found, trainID=" + trainID + " type=" + type);                  logger.warning("No time table found, trainID=" + trainID + " type=" + type);
121              }              }
122                webClient.closeAllWindows();
123                                    
124                  return timetableList;                  return timetableList;
125          }          }

Legend:
Removed from v.387  
changed lines
  Added in v.591

  ViewVC Help
Powered by ViewVC 1.1.20