Skip to content

Commit

Permalink
Adding LocationBias parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
domesticmouse committed Jun 21, 2018
1 parent 698cabe commit bca82fe
Show file tree
Hide file tree
Showing 2 changed files with 166 additions and 0 deletions.
82 changes: 82 additions & 0 deletions src/main/java/com/google/maps/FindPlaceFromTextRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.maps.internal.StringJoin;
import com.google.maps.internal.StringJoin.UrlValue;
import com.google.maps.model.FindPlaceFromText;
import com.google.maps.model.LatLng;
import com.google.maps.model.PlacesSearchResult;

public class FindPlaceFromTextRequest
Expand Down Expand Up @@ -53,18 +54,48 @@ public String toUrlValue() {
}
}

/**
* The text input specifying which place to search for (for example, a name, address, or phone
* number).
*
* @param input The text input.
* @return Returns {@code FindPlaceFromTextRequest} for call chaining.
*/
public FindPlaceFromTextRequest input(String input) {
return param("input", input);
}

/**
* The type of input.
*
* @param inputType The input type.
* @return Returns {@code FindPlaceFromTextRequest} for call chaining.
*/
public FindPlaceFromTextRequest inputType(InputType inputType) {
return param("inputtype", inputType);
}

/**
* The fields specifying the types of place data to return.
*
* @param fields The fields to return.
* @return Returns {@code FindPlaceFromTextRequest} for call chaining.
*/
public FindPlaceFromTextRequest fields(FieldMask... fields) {
return param("fields", StringJoin.join(',', fields));
}

/**
* Prefer results in a specified area, by specifying either a radius plus lat/lng, or two lat/lng
* pairs representing the points of a rectangle.
*
* @param locationBias The location bias for this request.
* @return Returns {@code FindPlaceFromTextRequest} for call chaining.
*/
public FindPlaceFromTextRequest locationBias(LocationBias locationBias) {
return param("locationbias", locationBias);
}

@Override
protected void validateRequest() {
if (!params().containsKey("input")) {
Expand Down Expand Up @@ -127,4 +158,55 @@ public String toUrlValue() {
return field;
}
}

public interface LocationBias extends UrlValue {}

public static class LocationBiasIP implements LocationBias {
public String toUrlValue() {
return "ipbias";
}
}

public static class LocationBiasPoint implements LocationBias {
private final LatLng point;

public LocationBiasPoint(LatLng point) {
this.point = point;
}

@Override
public String toUrlValue() {
return "point:" + point.toUrlValue();
}
}

public static class LocationBiasCircular implements LocationBias {
private final LatLng center;
private final int radius;

public LocationBiasCircular(LatLng center, int radius) {
this.center = center;
this.radius = radius;
}

@Override
public String toUrlValue() {
return "circle:" + radius + "@" + center.toUrlValue();
}
}

public static class LocationBiasRectangular implements LocationBias {
private final LatLng southWest;
private final LatLng northEast;

public LocationBiasRectangular(LatLng southWest, LatLng northEast) {
this.southWest = southWest;
this.northEast = northEast;
}

@Override
public String toUrlValue() {
return "rectangle:" + southWest.toUrlValue() + "|" + northEast.toUrlValue();
}
}
}
84 changes: 84 additions & 0 deletions src/test/java/com/google/maps/PlacesApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
import static org.junit.Assert.assertTrue;

import com.google.maps.FindPlaceFromTextRequest.InputType;
import com.google.maps.FindPlaceFromTextRequest.LocationBiasCircular;
import com.google.maps.FindPlaceFromTextRequest.LocationBiasIP;
import com.google.maps.FindPlaceFromTextRequest.LocationBiasPoint;
import com.google.maps.FindPlaceFromTextRequest.LocationBiasRectangular;
import com.google.maps.PlaceAutocompleteRequest.SessionToken;
import com.google.maps.model.AddressComponentType;
import com.google.maps.model.AutocompletePrediction;
Expand Down Expand Up @@ -926,11 +930,13 @@ public void testFindPlaceFromText() throws Exception {
FindPlaceFromTextRequest.FieldMask.RATING,
FindPlaceFromTextRequest.FieldMask.OPENING_HOURS,
FindPlaceFromTextRequest.FieldMask.GEOMETRY)
.locationBias(new LocationBiasIP())
.await();

sc.assertParamValue(input, "input");
sc.assertParamValue("textquery", "inputtype");
sc.assertParamValue("photos,formatted_address,name,rating,opening_hours,geometry", "fields");
sc.assertParamValue("ipbias", "locationbias");

assertNotNull(response);
PlacesSearchResult candidate = response.candidates[0];
Expand All @@ -950,4 +956,82 @@ public void testFindPlaceFromText() throws Exception {
assertEquals(4.4, candidate.rating, 0.01);
}
}

@Test
public void testFindPlaceFromTextPoint() throws Exception {
try (LocalTestServerContext sc =
new LocalTestServerContext(findPlaceFromTextMuseumOfContemporaryArt)) {

String input = "Museum of Contemporary Art Australia";

FindPlaceFromText response =
PlacesApi.findPlaceFromText(sc.context, input, InputType.TEXT_QUERY)
.fields(
FindPlaceFromTextRequest.FieldMask.PHOTOS,
FindPlaceFromTextRequest.FieldMask.FORMATTED_ADDRESS,
FindPlaceFromTextRequest.FieldMask.NAME,
FindPlaceFromTextRequest.FieldMask.RATING,
FindPlaceFromTextRequest.FieldMask.OPENING_HOURS,
FindPlaceFromTextRequest.FieldMask.GEOMETRY)
.locationBias(new LocationBiasPoint(new LatLng(1, 2)))
.await();

sc.assertParamValue(input, "input");
sc.assertParamValue("textquery", "inputtype");
sc.assertParamValue("photos,formatted_address,name,rating,opening_hours,geometry", "fields");
sc.assertParamValue("point:1.00000000,2.00000000", "locationbias");
}
}

@Test
public void testFindPlaceFromTextCircular() throws Exception {
try (LocalTestServerContext sc =
new LocalTestServerContext(findPlaceFromTextMuseumOfContemporaryArt)) {

String input = "Museum of Contemporary Art Australia";

FindPlaceFromText response =
PlacesApi.findPlaceFromText(sc.context, input, InputType.TEXT_QUERY)
.fields(
FindPlaceFromTextRequest.FieldMask.PHOTOS,
FindPlaceFromTextRequest.FieldMask.FORMATTED_ADDRESS,
FindPlaceFromTextRequest.FieldMask.NAME,
FindPlaceFromTextRequest.FieldMask.RATING,
FindPlaceFromTextRequest.FieldMask.OPENING_HOURS,
FindPlaceFromTextRequest.FieldMask.GEOMETRY)
.locationBias(new LocationBiasCircular(new LatLng(1, 2), 3000))
.await();

sc.assertParamValue(input, "input");
sc.assertParamValue("textquery", "inputtype");
sc.assertParamValue("photos,formatted_address,name,rating,opening_hours,geometry", "fields");
sc.assertParamValue("circle:3000@1.00000000,2.00000000", "locationbias");
}
}

@Test
public void testFindPlaceFromTextRectangular() throws Exception {
try (LocalTestServerContext sc =
new LocalTestServerContext(findPlaceFromTextMuseumOfContemporaryArt)) {

String input = "Museum of Contemporary Art Australia";

FindPlaceFromText response =
PlacesApi.findPlaceFromText(sc.context, input, InputType.TEXT_QUERY)
.fields(
FindPlaceFromTextRequest.FieldMask.PHOTOS,
FindPlaceFromTextRequest.FieldMask.FORMATTED_ADDRESS,
FindPlaceFromTextRequest.FieldMask.NAME,
FindPlaceFromTextRequest.FieldMask.RATING,
FindPlaceFromTextRequest.FieldMask.OPENING_HOURS,
FindPlaceFromTextRequest.FieldMask.GEOMETRY)
.locationBias(new LocationBiasRectangular(new LatLng(1, 2), new LatLng(3, 4)))
.await();

sc.assertParamValue(input, "input");
sc.assertParamValue("textquery", "inputtype");
sc.assertParamValue("photos,formatted_address,name,rating,opening_hours,geometry", "fields");
sc.assertParamValue("rectangle:1.00000000,2.00000000|3.00000000,4.00000000", "locationbias");
}
}
}

0 comments on commit bca82fe

Please sign in to comment.