Skip to content

Commit 7bb36d5

Browse files
authored
Return place from feature if no gid present (#389)
1 parent 4a21bf4 commit 7bb36d5

File tree

8 files changed

+88
-26
lines changed

8 files changed

+88
-26
lines changed

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PeliasCallbackHandler.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
*/
1414
class PeliasCallbackHandler {
1515

16-
private PeliasFeatureToPlaceConverter converter;
16+
private PeliasFeatureConverter converter;
1717

1818
/**
1919
* Constructor.
2020
*/
2121
PeliasCallbackHandler() {
22-
converter = new PeliasFeatureToPlaceConverter();
22+
converter = new PeliasFeatureConverter();
2323
}
2424

2525
/**
@@ -41,7 +41,7 @@ void handleSuccess(String title, Response<Result> response,
4141
for (Feature feature : response.body().getFeatures()) {
4242
if (feature.properties.name.equals(title)) {
4343
Place place = converter.getFetchedPlace(feature);
44-
String details = getDetails(feature, title);
44+
String details = converter.getDetails(feature, title);
4545
listener.onFetchSuccess(place, details);
4646
}
4747
}
@@ -63,9 +63,8 @@ void handleSuccess(Response<Result> response, OnPlaceDetailsFetchedListener list
6363
}
6464

6565
Feature feature = response.body().getFeatures().get(0);
66-
String title = feature.properties.name;
6766
Place place = converter.getFetchedPlace(feature);
68-
String details = getDetails(feature, title);
67+
String details = converter.getDetails(feature);
6968
listener.onFetchSuccess(place, details);
7069
}
7170

@@ -88,10 +87,4 @@ private boolean isValidResponse(Response<Result> response) {
8887
void handleFailure(OnPlaceDetailsFetchedListener listener) {
8988
listener.onFetchFailure();
9089
}
91-
92-
private String getDetails(Feature feature, String title) {
93-
String label = feature.properties.label;
94-
label = label.replace(title + ",", "").trim();
95-
return title + "\n" + label;
96-
}
9790
}

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PeliasFeatureToPlaceConverter.java renamed to mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PeliasFeatureConverter.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010
import java.util.Locale;
1111

1212
/**
13-
* Handles converting Pelias {@link Feature} objects into {@link Place} objects for
14-
* {@link PeliasCallbackHandler}.
13+
* Handles converting Pelias {@link Feature} objects into {@link Place} objects and detail strings
14+
* for {@link PeliasCallbackHandler}.
1515
*/
16-
class PeliasFeatureToPlaceConverter {
16+
class PeliasFeatureConverter {
1717

1818
private PeliasLayerToPlaceTypeConverter layerConverter;
1919
private PointToBoundsConverter pointConverter;
2020

2121
/**
2222
* Constructor.
2323
*/
24-
PeliasFeatureToPlaceConverter() {
24+
PeliasFeatureConverter() {
2525
layerConverter = new PeliasLayerToPlaceTypeConverter();
2626
pointConverter = new PointToBoundsConverter();
2727
}
@@ -59,4 +59,26 @@ Place getFetchedPlace(Feature feature) {
5959
.setWebsiteUri(null)
6060
.build();
6161
}
62+
63+
/**
64+
* Constructs a detail string from a {@link Feature}.
65+
* @param feature
66+
* @return
67+
*/
68+
String getDetails(Feature feature) {
69+
String title = feature.properties.name;
70+
return getDetails(feature, title);
71+
}
72+
73+
/**
74+
* Constructs a detail string from a {@link Feature} and title.
75+
* @param feature
76+
* @param title
77+
* @return
78+
*/
79+
String getDetails(Feature feature, String title) {
80+
String label = feature.properties.label;
81+
label = label.replace(title + ",", "").trim();
82+
return title + "\n" + label;
83+
}
6284
}

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PeliasLayerToPlaceTypeConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
/**
3333
* Converts a "layer" returned from Pelias into a list of {@link com.mapzen.places.api.Place} types
34-
* for {@link PeliasFeatureToPlaceConverter}.
34+
* for {@link PeliasFeatureConverter}.
3535
*/
3636
class PeliasLayerToPlaceTypeConverter {
3737

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PlaceAutocompleteActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,11 @@ public class PlaceAutocompleteActivity extends AppCompatActivity
8787
PeliasCallbackHandler callbackHandler = new PeliasCallbackHandler();
8888
PlaceDetailFetcher detailFetcher = new PeliasPlaceDetailFetcher(mapzenSearch.getPelias(),
8989
callbackHandler);
90+
PeliasFeatureConverter featureConverter = new PeliasFeatureConverter();
9091
OnPlaceDetailsFetchedListener detailFetchListener = new AutocompleteDetailFetchListener(this);
9192
FilterMapper filterMapper = new PeliasFilterMapper();
92-
presenter = new PlaceAutocompletePresenter(detailFetcher, detailFetchListener, filterMapper);
93+
presenter = new PlaceAutocompletePresenter(detailFetcher, featureConverter, detailFetchListener,
94+
filterMapper);
9395
presenter.setBounds((LatLngBounds) safeGetExtra(EXTRA_BOUNDS));
9496
presenter.setFilter((AutocompleteFilter) safeGetExtra(EXTRA_FILTER));
9597
LostApiClient client = new LostApiClient.Builder(this).build();

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PlaceAutocompletePresenter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import com.mapzen.android.lost.api.LocationServices;
44
import com.mapzen.android.lost.api.LostApiClient;
55
import com.mapzen.pelias.BoundingBox;
6+
import com.mapzen.pelias.gson.Feature;
67
import com.mapzen.pelias.gson.Properties;
78
import com.mapzen.pelias.gson.Result;
89
import com.mapzen.places.api.AutocompleteFilter;
910
import com.mapzen.places.api.LatLngBounds;
11+
import com.mapzen.places.api.Place;
1012

1113
import android.location.Location;
1214
import android.util.Log;
@@ -22,6 +24,7 @@ class PlaceAutocompletePresenter {
2224
private static final double LON_DEFAULT = 0.0;
2325

2426
private final PlaceDetailFetcher detailFetcher;
27+
private final PeliasFeatureConverter featureConverter;
2528
private final OnPlaceDetailsFetchedListener detailFetchListener;
2629
private final FilterMapper filterMapper;
2730
private final PointToBoundsConverter pointConverter;
@@ -33,8 +36,10 @@ class PlaceAutocompletePresenter {
3336
* Creates a new instance.
3437
*/
3538
PlaceAutocompletePresenter(PlaceDetailFetcher detailFetcher,
39+
PeliasFeatureConverter featureConverter,
3640
OnPlaceDetailsFetchedListener detailFetchListener, FilterMapper filterMapper) {
3741
this.detailFetcher = detailFetcher;
42+
this.featureConverter = featureConverter;
3843
this.detailFetchListener = detailFetchListener;
3944
this.filterMapper = filterMapper;
4045
this.pointConverter = new PointToBoundsConverter();
@@ -64,9 +69,16 @@ void setLostClient(LostApiClient client) {
6469
* @param response parsed result returned by the service.
6570
*/
6671
void onResponse(Response<Result> response) {
67-
Properties properties = response.body().getFeatures().get(0).properties;
72+
Feature feature = response.body().getFeatures().get(0);
73+
Properties properties = feature.properties;
6874
String gid = properties.gid;
69-
detailFetcher.fetchDetails(gid, detailFetchListener);
75+
if (gid.isEmpty()) {
76+
Place place = featureConverter.getFetchedPlace(feature);
77+
String details = featureConverter.getDetails(feature);
78+
detailFetchListener.onFetchSuccess(place, details);
79+
} else {
80+
detailFetcher.fetchDetails(gid, detailFetchListener);
81+
}
7082
}
7183

7284
/**

mapzen-places-api/src/main/java/com/mapzen/places/api/internal/PlacePickerViewController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
interface PlacePickerViewController {
1010
/**
1111
* Show an alert dialog to represent the place selected by the user.
12-
* @param id
13-
* @param title
12+
* @param id the selected {@link Place}'s id.
13+
* @param title the dialog title.
1414
*/
1515
void showDialog(String id, String title);
1616

1717
/**
1818
* Update the visible dialog with more details about the selected place.
19-
* @param id
20-
* @param message
19+
* @param id the selected {@link Place}'s id.
20+
* @param message the dialog message.
2121
*/
2222
void updateDialog(String id, String message);
2323

mapzen-places-api/src/test/java/com/mapzen/places/api/internal/PeliasFeatureToPlaceConverterTest.java renamed to mapzen-places-api/src/test/java/com/mapzen/places/api/internal/PeliasFeatureConverterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import static com.mapzen.places.api.Place.TYPE_POINT_OF_INTEREST;
1313
import static org.assertj.core.api.Assertions.assertThat;
1414

15-
public class PeliasFeatureToPlaceConverterTest {
15+
public class PeliasFeatureConverterTest {
1616

17-
PeliasFeatureToPlaceConverter converter = new PeliasFeatureToPlaceConverter();
17+
PeliasFeatureConverter converter = new PeliasFeatureConverter();
1818

1919
@Test
2020
public void getFetchedPlace_shouldHaveCorrectAddress() throws Exception {

mapzen-places-api/src/test/java/com/mapzen/places/api/internal/PlaceAutocompletePresenterTest.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.mapzen.pelias.gson.Result;
1212
import com.mapzen.places.api.LatLng;
1313
import com.mapzen.places.api.LatLngBounds;
14+
import com.mapzen.places.api.Place;
1415

1516
import org.junit.Test;
1617

@@ -19,17 +20,19 @@
1920

2021
import static org.assertj.core.api.Assertions.assertThat;
2122
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.times;
2224
import static org.mockito.Mockito.verify;
2325
import static org.mockito.Mockito.when;
2426
import retrofit2.Response;
2527

2628
public class PlaceAutocompletePresenterTest {
2729

2830
private PlaceDetailFetcher detailFetcher = mock(PlaceDetailFetcher.class);
31+
private PeliasFeatureConverter featureConverter = mock(PeliasFeatureConverter.class);
2932
private OnPlaceDetailsFetchedListener detailFetchListener = mock(
3033
OnPlaceDetailsFetchedListener.class);
3134
private PlaceAutocompletePresenter presenter = new PlaceAutocompletePresenter(detailFetcher,
32-
detailFetchListener, null);
35+
featureConverter, detailFetchListener, null);
3336

3437
@Test
3538
public void shouldNotBeNull() throws Exception {
@@ -43,6 +46,25 @@ public void onResponse_shouldFetchPlaceDetails() throws Exception {
4346
verify(detailFetcher).fetchDetails("123abc", detailFetchListener);
4447
}
4548

49+
@Test
50+
public void onResponse_noGid_shouldNotFetchDetails() throws Exception {
51+
Response<Result> response = getTestResponseNoGid();
52+
presenter.onResponse(response);
53+
verify(detailFetcher, times(0)).fetchDetails("123abc", detailFetchListener);
54+
}
55+
56+
@Test
57+
public void onResponse_noGid_shouldReturnPlaceFromResponse() throws Exception {
58+
Response<Result> response = getTestResponseNoGid();
59+
Place place = mock(Place.class);
60+
String details = "Test detail";
61+
Feature feature = response.body().getFeatures().get(0);
62+
when(featureConverter.getFetchedPlace(feature)).thenReturn(place);
63+
when(featureConverter.getDetails(feature)).thenReturn(details);
64+
presenter.onResponse(response);
65+
verify(detailFetchListener).onFetchSuccess(place, details);
66+
}
67+
4668
@Test
4769
public void getBoundingBox_shouldReturnCorrectBox() throws Exception {
4870
LatLng sw = new LatLng(0.0, 0.0);
@@ -120,4 +142,15 @@ public void getLon_noBoundingBox_noLostClient_shouldReturnDefaultLat() throws Ex
120142
return Response.success(result);
121143
}
122144

145+
@NonNull private Response<Result> getTestResponseNoGid() {
146+
Result result = new Result();
147+
Feature feature = new Feature();
148+
Properties properties = new Properties();
149+
properties.gid = "";
150+
properties.name = "Test Name No Gid";
151+
feature.properties = properties;
152+
result.getFeatures().add(feature);
153+
return Response.success(result);
154+
}
155+
123156
}

0 commit comments

Comments
 (0)