Skip to content

Commit 1c17212

Browse files
authored
routeOptions toUrl() (#1300)
1 parent d489b94 commit 1c17212

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.mapbox.api.directions.v5.utils.ParseUtils;
1616
import com.mapbox.geojson.Point;
1717
import java.io.UnsupportedEncodingException;
18+
import java.net.MalformedURLException;
1819
import java.net.URL;
1920
import java.net.URLDecoder;
2021
import java.util.List;
@@ -844,6 +845,59 @@ public static RouteOptions fromUrl(@NonNull URL url) {
844845
return fromJsonString(optionsJson.toString());
845846
}
846847

848+
/**
849+
* Create a URL from RouteOptions instance.
850+
*
851+
* @param accessToken access token to make API request
852+
* @return a URL object instance
853+
*/
854+
@NonNull
855+
public URL toUrl(@NonNull String accessToken) {
856+
StringBuilder sb = new StringBuilder()
857+
.append(baseUrl())
858+
.append("/directions/v5")
859+
.append(String.format("/%s", user()))
860+
.append(String.format("/%s", profile()))
861+
.append(String.format("/%s", coordinates()))
862+
.append(String.format("?access_token=%s", accessToken))
863+
.append(String.format("&alternatives=%s", alternatives()))
864+
.append(String.format("&geometries=%s", geometries()))
865+
.append(String.format("&overview=%s", overview()))
866+
.append(String.format("&radiuses=%s", radiuses()))
867+
.append(String.format("&steps=%s", steps()))
868+
.append(String.format("&bearings=%s", bearings()))
869+
.append(String.format("&layers=%s", layers()))
870+
.append(String.format("&continue_straight=%s", continueStraight()))
871+
.append(String.format("&annotations=%s", annotations()))
872+
.append(String.format("&language=%s", language()))
873+
.append(String.format("&roundabout_exits=%s", roundaboutExits()))
874+
.append(String.format("&voice_instructions=%s", voiceInstructions()))
875+
.append(String.format("&banner_instructions=%s", bannerInstructions()))
876+
.append(String.format("&voice_units=%s", voiceUnits()))
877+
.append(String.format("&exclude=%s", exclude()))
878+
.append(String.format("&include=%s", include()))
879+
.append(String.format("&approaches=%s", approaches()))
880+
.append(String.format("&waypoints=%s", waypointIndices()))
881+
.append(String.format("&waypoint_names=%s", waypointNames()))
882+
.append(String.format("&waypoint_targets=%s", waypointTargets()))
883+
.append(String.format("&enable_refresh=%s", enableRefresh()))
884+
.append(String.format("&walking_speed=%s", walkingSpeed()))
885+
.append(String.format("&walkway_bias=%s", walkwayBias()))
886+
.append(String.format("&alley_bias=%s", alleyBias()))
887+
.append(String.format("&snapping_include_closures=%s", snappingIncludeClosures()))
888+
.append(String.format("&arrive_by=%s", arriveBy()))
889+
.append(String.format("&depart_at=%s", departAt()))
890+
.append(String.format("&max_height=%s", maxHeight()))
891+
.append(String.format("&max_width=%s", maxWidth()))
892+
.append(String.format("&metadata=%s", metadata()));
893+
894+
try {
895+
return new URL(sb.toString());
896+
} catch (MalformedURLException ex) {
897+
throw new RuntimeException(ex);
898+
}
899+
}
900+
847901
@NonNull
848902
private static RouteOptions fromJsonString(@NonNull String json) {
849903
GsonBuilder gson = new GsonBuilder();

services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mapbox.api.directions.v5.models;
22

33
import static com.google.gson.JsonParser.parseString;
4+
import java.net.URL;
45
import static org.junit.Assert.assertEquals;
56
import static org.junit.Assert.assertNull;
67
import com.mapbox.api.directions.v5.DirectionsCriteria;
@@ -17,6 +18,8 @@ public class RouteOptionsTest extends TestUtils {
1718
* Always update this file when new option is introduced.
1819
*/
1920
private static final String ROUTE_OPTIONS_JSON = "route_options_v5.json";
21+
private static final String ROUTE_OPTIONS_URL = "https://api.mapbox.com/directions/v5/mapbox/driving/-122.4003312,37.7736941;-122.4187529,37.7689715;-122.4255172,37.7775835?access_token=pk.token&alternatives=false&geometries=polyline6&overview=full&radiuses=;unlimited;5.1&steps=true&bearings=0,90;90,0;&layers=-42;;0&continue_straight=false&annotations=congestion,distance,duration&language=ru&roundabout_exits=false&voice_instructions=true&banner_instructions=true&voice_units=metric&exclude=toll,ferry&include=hot,hov2&approaches=;curb;&waypoints=0;1;2&waypoint_names=;two;&waypoint_targets=;12.2,21.2;&enable_refresh=true&walking_speed=5.11&walkway_bias=-0.2&alley_bias=0.75&snapping_include_closures=;false;true&arrive_by=2021-01-01'T'01:01&depart_at=2021-02-02'T'02:02&max_height=1.5&max_width=1.4&metadata=true";
22+
private static final String ACCESS_TOKEN = "pk.token";
2023

2124
private final String optionsJson = loadJsonFixture(ROUTE_OPTIONS_JSON);
2225

@@ -318,6 +321,32 @@ public void routeOptionsList_toJson() {
318321
assertEquals(parseString(optionsJson), parseString(options.toJson()));
319322
}
320323

324+
@Test
325+
public void routeOptions_toUrl_fromUrl() {
326+
RouteOptions options = routeOptions();
327+
URL url = options.toUrl(ACCESS_TOKEN);
328+
RouteOptions optionsFromUrl = RouteOptions.fromUrl(url);
329+
330+
assertEquals(options, optionsFromUrl);
331+
}
332+
333+
@Test
334+
public void routeOptionsList_toUrl_fromUrl() {
335+
RouteOptions options = routeOptionsList();
336+
URL url = options.toUrl(ACCESS_TOKEN);
337+
RouteOptions optionsFromUrl = RouteOptions.fromUrl(url);
338+
339+
assertEquals(options, optionsFromUrl);
340+
}
341+
342+
@Test
343+
public void routeOptions_toUrl() {
344+
RouteOptions options = routeOptions();
345+
URL url = options.toUrl(ACCESS_TOKEN);
346+
347+
assertEquals(ROUTE_OPTIONS_URL, url.toString());
348+
}
349+
321350
/**
322351
* Fills up all the options using string variants. Values need ot be equal to the ones in {@link #optionsJson}.
323352
*/

0 commit comments

Comments
 (0)