/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/GoogleStreetnameHelper.java
ViewVC logotype

Annotation of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/GoogleStreetnameHelper.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2566 - (hide annotations) (download)
Thu Jun 4 19:29:39 2015 UTC (9 years ago) by torben
File size: 3727 byte(s)
integrate RateLimiter from google guava
1 torben 2409 package dk.daoas.daoadresseservice;
2    
3     import java.util.List;
4    
5     import com.google.code.geocoder.Geocoder;
6     import com.google.code.geocoder.GeocoderRequestBuilder;
7     import com.google.code.geocoder.model.GeocodeResponse;
8     import com.google.code.geocoder.model.GeocoderAddressComponent;
9     import com.google.code.geocoder.model.GeocoderRequest;
10     import com.google.code.geocoder.model.GeocoderResult;
11     import com.google.code.geocoder.model.GeocoderStatus;
12    
13 torben 2566 import com.google.common.util.concurrent.RateLimiter;
14    
15 torben 2409 import dk.daoas.daoadresseservice.admin.ServiceConfig;
16 torben 2411 import dk.daoas.daoadresseservice.beans.SearchRequest;
17 torben 2409 import dk.daoas.daoadresseservice.beans.SearchResult;
18     import dk.thoerup.circuitbreaker.CircuitBreaker;
19     import dk.thoerup.circuitbreaker.CircuitBreakerManager;
20     import dk.thoerup.circuitbreaker.CircuitInvocation;
21    
22     public class GoogleStreetnameHelper implements StreetnameHelper {
23    
24     ServiceConfig conf;
25 torben 2566 RateLimiter limiter;
26    
27 torben 2409 public GoogleStreetnameHelper(ServiceConfig conf) {
28     this.conf = conf;
29 torben 2566
30     limiter = RateLimiter.create( 10.0 ); //max 10 req /sec
31 torben 2409 }
32    
33     @Override
34 torben 2411 public String proposeStreetName(SearchRequest request, SearchResult result) {
35 torben 2409 if (conf.useGoogle == false)
36     return null;
37    
38 torben 2566 limiter.acquire();
39    
40 torben 2409 result.google = true;
41    
42     try {
43 torben 2411 GoogleInvocation wrapper = new GoogleInvocation( conf, request.postnr, request.vejnavn );
44 torben 2409 CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("google");
45    
46    
47     result.googleVej = (String) breaker.invoke(wrapper);
48     return result.googleVej;
49    
50    
51     } catch (Exception e) {
52     System.out.println( "GoogleError: " + e.getClass().getName() +" / "+ e.getMessage() );
53     }
54     return null;
55     }
56    
57     static class GoogleInvocation implements CircuitInvocation {
58     ServiceConfig conf;
59     int postnr;
60     String vejnavn;
61    
62     public GoogleInvocation(ServiceConfig conf, int postnr, String vejnavn) {
63     this.conf = conf;
64     this.postnr= postnr;
65     this.vejnavn = vejnavn;
66    
67     }
68    
69     @Override
70     public String proceed() throws Exception {
71    
72     final Geocoder geocoder;
73     if ( conf.googleApiKey != null ) {
74     geocoder = new Geocoder(conf.googleApiUser, conf.googleApiKey); //Throws InvalidKeyException
75     } else {
76     geocoder = new Geocoder();
77     }
78     //TimingHelper timer = new TimingHelper();
79    
80     String search = vejnavn + ", " + postnr + ", Denmark";
81     GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(search).setLanguage("en").getGeocoderRequest();
82     GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
83    
84     //timer.printElapsed("Google elapsed");
85    
86     //System.out.println( "Status: >" + geocoderResponse.getStatus() + "<");
87     if ( geocoderResponse.getStatus() != GeocoderStatus.OK) {
88    
89     if (geocoderResponse.getStatus() == GeocoderStatus.ZERO_RESULTS) {
90     return null;
91     } else {
92     System.out.println("Google responded with " + geocoderResponse.getStatus() );
93     //Hvis det er alvorlige fejl skal vi afbryde med exception og trigger circuitbreakeren
94     throw new Exception("Google responded with " + geocoderResponse.getStatus() );
95     }
96    
97     }
98    
99     List<GeocoderResult> resList = geocoderResponse.getResults();
100     //System.out.println( "Count: " + resList.size() );
101    
102     if (resList.size() != 1) {
103     return null;
104     }
105     GeocoderResult res = resList.get(0);
106    
107     List<GeocoderAddressComponent> compList = res.getAddressComponents();
108     for (GeocoderAddressComponent c : compList) {
109     //System.out.println(c);
110     if (c.getTypes().contains("route")) {
111     return c.getLongName();
112     }
113     }
114     return null;
115     }
116    
117     }
118    
119    
120     }

  ViewVC Help
Powered by ViewVC 1.1.20