diff --git a/.gitignore b/.gitignore index ba46aa4ff..35db19ca4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,11 @@ /bin/ /com/ .gradle/ +.nb-gradle/ +.nb-gradle-properties *.iml .idea/ .settings/ .project .classpath -.vscode/ \ No newline at end of file +.vscode/ diff --git a/README.md b/README.md index 05859a54d..e67000b70 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ contribute, please read [How to Contribute][contrib]. Each Google Maps Web Service request requires an API key or client ID. API keys are freely available with a Google Account at -https://developers.google.com/console. The type of API key you need is a -**Server key**. +https://developers.google.com/console. The type of API key you need is a +**Server key**. To get an API key: @@ -72,8 +72,8 @@ To get an API key: * Time Zone API 1. Create a new **Server key**. 1. If you'd like to restrict requests to a specific IP address, do so now. - -For guided help, follow the instructions for the [Directions API][directions-key]. + +For guided help, follow the instructions for the [Directions API][directions-key]. You only need one API key, but remember to enable all the APIs you need. For even more information, see the guide to [API keys][apikey]. @@ -84,10 +84,10 @@ For even more information, see the guide to [API keys][apikey]. You can add the library to your project via Maven or Gradle. **Note:** Since 0.1.18 there is now a dependency on [SLF4J](https://www.slf4j.org/). You need to add -one of the adaptor dependencies that makes sense for your logging setup. In the configuration +one of the adapter dependencies that makes sense for your logging setup. In the configuration samples below we are integrating [slf4j-nop](https://search.maven.org/#artifactdetails%7Corg.slf4j%7Cslf4j-nop%7C1.7.25%7Cjar), -but there are others like +but there are others like [slf4j-log4j12](https://search.maven.org/#artifactdetails%7Corg.slf4j%7Cslf4j-log4j12%7C1.7.25%7Cjar) and [slf4j-jdk14](https://search.maven.org/#artifactdetails%7Corg.slf4j%7Cslf4j-jdk14%7C1.7.25%7Cjar) that will make more sense in other configurations. This will stop a warning message being emitted @@ -119,8 +119,8 @@ dependencies { } ``` -You can find the latest version at the top of this README or by searching -[Maven Central](https://search.maven.org/) or [Gradle, Please](http://gradleplease.appspot.com/). +You can find the latest version at the top of this README or by [searching +Maven Central](https://search.maven.org/#search%7Cga%7C1%7Ca%3A%22google-maps-services%22) or [Gradle, Please](http://gradleplease.appspot.com/#google-maps-services). ## Developer Documentation @@ -265,14 +265,16 @@ req.setCallback(new PendingResult.Callback() { $ ./gradlew javadoc # Publish documentation + $ git checkout $VERSION $ ./gradlew javadoc $ git checkout gh-pages - $ rm -rf javadoc $ mkdir $VERSION $ mv build/docs/javadoc $VERSION $ git add $VERSION/javadoc + $ rm latest + $ ln -s $VERSION latest $ git add latest - $ git commit + $ git commit -m "Javadoc for $VERSION" $ git push origin gh-pages [apikey]: https://developers.google.com/maps/faq#keysystem diff --git a/build.gradle b/build.gradle index c982f64fe..be6896e9f 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' - testCompile 'com.google.mockwebserver:mockwebserver:20130706' + testCompile 'com.squareup.okhttp3:mockwebserver:3.8.1' testCompile 'org.apache.httpcomponents:httpclient:4.5.3' testCompile 'org.slf4j:slf4j-simple:1.7.25' testCompile 'commons-lang:commons-lang:2.6' @@ -70,6 +70,14 @@ task updateVersion(type: Copy) { compileJava.source = "build/filtered/src/main/java" compileJava.dependsOn updateVersion +compileJava { + options.compilerArgs << "-Xlint:deprecation" +} + +compileTestJava { + options.compilerArgs << "-Xlint:deprecation" +} + // Propagate API Key system properties to test tasks tasks.withType(Test) { systemProperty 'api.key', System.getProperty('api.key') diff --git a/gradle.properties b/gradle.properties index ddddcba17..00a1a13b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=0.2.0 +version=0.2.1 # variables required to allow build.gradle to parse, # override in ~/.gradle/gradle.properties diff --git a/src/main/java/com/google/maps/GeoApiContext.java b/src/main/java/com/google/maps/GeoApiContext.java index 71d4e79c9..e96769709 100644 --- a/src/main/java/com/google/maps/GeoApiContext.java +++ b/src/main/java/com/google/maps/GeoApiContext.java @@ -292,6 +292,10 @@ public Builder() { requestHandlerBuilder(new OkHttpRequestHandler.Builder()); } + public Builder(RequestHandler.Builder builder) { + requestHandlerBuilder(builder); + } + /** * Change the RequestHandler.Builder strategy to change between the {@code OkHttpRequestHandler} * and the {@code OkHttpRequestHandler}. diff --git a/src/main/java/com/google/maps/internal/DayOfWeekAdaptor.java b/src/main/java/com/google/maps/internal/DayOfWeekAdapter.java similarity index 97% rename from src/main/java/com/google/maps/internal/DayOfWeekAdaptor.java rename to src/main/java/com/google/maps/internal/DayOfWeekAdapter.java index 77441c553..02857dd7c 100644 --- a/src/main/java/com/google/maps/internal/DayOfWeekAdaptor.java +++ b/src/main/java/com/google/maps/internal/DayOfWeekAdapter.java @@ -29,7 +29,7 @@ * href="https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/TypeAdapter.html">GSON * Type Adapter for more detail. */ -public class DayOfWeekAdaptor extends TypeAdapter { +public class DayOfWeekAdapter extends TypeAdapter { @Override public DayOfWeek read(JsonReader reader) throws IOException { diff --git a/src/main/java/com/google/maps/internal/GaePendingResult.java b/src/main/java/com/google/maps/internal/GaePendingResult.java index 1c0b0b1d8..6902fa9b9 100644 --- a/src/main/java/com/google/maps/internal/GaePendingResult.java +++ b/src/main/java/com/google/maps/internal/GaePendingResult.java @@ -187,8 +187,8 @@ private T parseResponse(GaePendingResult request, HTTPResponse response) LocationType.class, new SafeEnumAdapter(LocationType.UNKNOWN)) .registerTypeAdapter( RatingType.class, new SafeEnumAdapter(RatingType.UNKNOWN)) - .registerTypeAdapter(DayOfWeek.class, new DayOfWeekAdaptor()) - .registerTypeAdapter(PriceLevel.class, new PriceLevelAdaptor()) + .registerTypeAdapter(DayOfWeek.class, new DayOfWeekAdapter()) + .registerTypeAdapter(PriceLevel.class, new PriceLevelAdapter()) .registerTypeAdapter(Instant.class, new InstantAdapter()) .registerTypeAdapter(LocalTime.class, new LocalTimeAdapter()) .registerTypeAdapter(GeolocationApi.Response.class, new GeolocationResponseAdapter()) diff --git a/src/main/java/com/google/maps/internal/OkHttpPendingResult.java b/src/main/java/com/google/maps/internal/OkHttpPendingResult.java index 4215228b0..1d467ee14 100644 --- a/src/main/java/com/google/maps/internal/OkHttpPendingResult.java +++ b/src/main/java/com/google/maps/internal/OkHttpPendingResult.java @@ -254,8 +254,8 @@ private T parseResponse(OkHttpPendingResult request, Response response) LocationType.class, new SafeEnumAdapter(LocationType.UNKNOWN)) .registerTypeAdapter( RatingType.class, new SafeEnumAdapter(RatingType.UNKNOWN)) - .registerTypeAdapter(DayOfWeek.class, new DayOfWeekAdaptor()) - .registerTypeAdapter(PriceLevel.class, new PriceLevelAdaptor()) + .registerTypeAdapter(DayOfWeek.class, new DayOfWeekAdapter()) + .registerTypeAdapter(PriceLevel.class, new PriceLevelAdapter()) .registerTypeAdapter(Instant.class, new InstantAdapter()) .registerTypeAdapter(LocalTime.class, new LocalTimeAdapter()) .registerTypeAdapter(GeolocationApi.Response.class, new GeolocationResponseAdapter()) diff --git a/src/main/java/com/google/maps/internal/PriceLevelAdaptor.java b/src/main/java/com/google/maps/internal/PriceLevelAdapter.java similarity index 96% rename from src/main/java/com/google/maps/internal/PriceLevelAdaptor.java rename to src/main/java/com/google/maps/internal/PriceLevelAdapter.java index 58476e148..377d2e4eb 100644 --- a/src/main/java/com/google/maps/internal/PriceLevelAdaptor.java +++ b/src/main/java/com/google/maps/internal/PriceLevelAdapter.java @@ -29,7 +29,7 @@ * href="https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/TypeAdapter.html">GSON * Type Adapter for more detail. */ -public class PriceLevelAdaptor extends TypeAdapter { +public class PriceLevelAdapter extends TypeAdapter { @Override public PriceLevel read(JsonReader reader) throws IOException { diff --git a/src/test/java/com/google/maps/GeoApiContextTest.java b/src/test/java/com/google/maps/GeoApiContextTest.java index 5da5b131c..128559d03 100644 --- a/src/test/java/com/google/maps/GeoApiContextTest.java +++ b/src/test/java/com/google/maps/GeoApiContextTest.java @@ -24,14 +24,14 @@ import com.google.maps.internal.ApiConfig; import com.google.maps.internal.ApiResponse; import com.google.maps.model.GeocodingResult; -import com.google.mockwebserver.MockResponse; -import com.google.mockwebserver.MockWebServer; -import com.google.mockwebserver.RecordedRequest; import java.io.IOException; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import okhttp3.Headers; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -72,7 +72,7 @@ public void testGetIncludesDefaultUserAgent() throws Exception { // Set up the fake web server server.enqueue(new MockResponse()); - server.play(); + server.start(); setMockBaseUrl(); // Build & execute the request using our context @@ -81,14 +81,15 @@ public void testGetIncludesDefaultUserAgent() throws Exception { // Read the headers server.shutdown(); RecordedRequest request = server.takeRequest(); - List headers = request.getHeaders(); + Headers headers = request.getHeaders(); boolean headerFound = false; - for (String header : headers) { - if (header.startsWith("User-Agent: ")) { + for (String headerName : headers.names()) { + if (headerName.equals("User-Agent")) { headerFound = true; + String headerValue = headers.get(headerName); assertTrue( "User agent not in correct format", - header.matches("User-Agent: GoogleGeoApiClientJava/[^\\s]+")); + headerValue.matches("GoogleGeoApiClientJava/[^\\s]+")); } } @@ -103,7 +104,7 @@ public void testErrorResponseRetries() throws Exception { server.enqueue(errorResponse); server.enqueue(goodResponse); - server.play(); + server.start(); // Build the context under test setMockBaseUrl(); @@ -128,7 +129,7 @@ public void testSettingMaxRetries() throws Exception { server.enqueue(errorResponse); server.enqueue(errorResponse); server.enqueue(goodResponse); - server.play(); + server.start(); setMockBaseUrl(); // This should limit the number of retries, ensuring that the success response is NOT returned. @@ -200,7 +201,7 @@ public void testRetryCanBeDisabled() throws Exception { goodResponse.setBody("{\n \"results\" : [],\n \"status\" : \"ZERO_RESULTS\"\n}"); server.enqueue(goodResponse); - server.play(); + server.start(); setMockBaseUrl(); // This should disable the retry, ensuring that the success response is NOT returned @@ -220,7 +221,7 @@ public void testRetryEventuallyReturnsTheRightException() throws Exception { for (int i = 0; i < 10; i++) { server.enqueue(errorResponse); } - server.play(); + server.start(); // Wire the mock web server to the context setMockBaseUrl(); @@ -246,7 +247,7 @@ public void testQueryParamsHaveOrderPreserved() throws Exception { response.setBody("{}"); server.enqueue(response); - server.play(); + server.start(); setMockBaseUrl(); builder @@ -270,7 +271,7 @@ public void testToggleIfExceptionIsAllowedToRetry() throws Exception { server.enqueue(overQueryLimitResponse); server.enqueue(overQueryLimitResponse); server.enqueue(overQueryLimitResponse); - server.play(); + server.start(); builder.retryTimeout(1, TimeUnit.MILLISECONDS); builder.maxRetries(10); diff --git a/src/test/java/com/google/maps/GeocodingApiTest.java b/src/test/java/com/google/maps/GeocodingApiTest.java index 569c037a3..8fd84e63b 100644 --- a/src/test/java/com/google/maps/GeocodingApiTest.java +++ b/src/test/java/com/google/maps/GeocodingApiTest.java @@ -319,7 +319,7 @@ public void testGeocodeWithBounds() throws Exception { /** * Geocode with region biasing: Geocode for * Toledo in Spain. */ @Test diff --git a/src/test/java/com/google/maps/LocalTestServerContext.java b/src/test/java/com/google/maps/LocalTestServerContext.java index 7700b54fa..fb69ccd4a 100644 --- a/src/test/java/com/google/maps/LocalTestServerContext.java +++ b/src/test/java/com/google/maps/LocalTestServerContext.java @@ -18,14 +18,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import com.google.mockwebserver.MockResponse; -import com.google.mockwebserver.MockWebServer; -import com.google.mockwebserver.RecordedRequest; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.List; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.json.JSONObject; @@ -43,7 +43,7 @@ public class LocalTestServerContext implements AutoCloseable { MockResponse response = new MockResponse(); response.setBody(responseBody); server.enqueue(response); - server.play(); + server.start(); this.context = new GeoApiContext.Builder() @@ -67,7 +67,8 @@ private void takeRequest() throws InterruptedException { public JSONObject requestBody() throws InterruptedException { this.takeRequest(); - return new JSONObject(new String(request.getBody(), Charset.forName("UTF8"))); + + return new JSONObject(request.getBody().readUtf8()); } private List actualParams() throws InterruptedException, URISyntaxException { diff --git a/src/test/java/com/google/maps/PlacesApiTest.java b/src/test/java/com/google/maps/PlacesApiTest.java index c965ffff0..3c9bb4862 100644 --- a/src/test/java/com/google/maps/PlacesApiTest.java +++ b/src/test/java/com/google/maps/PlacesApiTest.java @@ -581,6 +581,7 @@ public void testNearbySearchRankbyDistanceWithoutKeywordNameOrType() throws Exce } @Test + @SuppressWarnings("deprecation") // radarSearchQuery still supported until 6/30/2018 public void testRadarSearchRequest() throws Exception { try (LocalTestServerContext sc = new LocalTestServerContext("{\"status\" : \"OK\"}")) { LatLng location = new LatLng(10, 20); @@ -607,6 +608,7 @@ public void testRadarSearchRequest() throws Exception { } @Test(expected = IllegalArgumentException.class) + @SuppressWarnings("deprecation") // radarSearchQuery still supported until 6/30/2018 public void testRadarSearchLocationWithoutKeywordNameOrType() throws Exception { try (LocalTestServerContext sc = new LocalTestServerContext("")) { LatLng location = new LatLng(10, 20); @@ -746,6 +748,7 @@ public void testNearbySearchRequestByType() throws Exception { } @Test + @SuppressWarnings("deprecation") // radarSearchQuery still supported until 6/30/2018 public void testRadarSearchRequestByKeyword() throws Exception { try (LocalTestServerContext sc = new LocalTestServerContext(placesApiRadarSearchRequestByKeyword)) { @@ -761,6 +764,7 @@ public void testRadarSearchRequestByKeyword() throws Exception { } @Test + @SuppressWarnings("deprecation") // radarSearchQuery still supported until 6/30/2018 public void testRadarSearchRequestByName() throws Exception { try (LocalTestServerContext sc = new LocalTestServerContext(placesApiRadarSearchRequestByName)) { @@ -779,6 +783,7 @@ public void testRadarSearchRequestByName() throws Exception { } @Test + @SuppressWarnings("deprecation") // radarSearchQuery still supported until 6/30/2018 public void testRadarSearchRequestByType() throws Exception { try (LocalTestServerContext sc = new LocalTestServerContext(placesApiRadarSearchRequestByType)) {