Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.mapbox.api.directions.v5.utils.ParseUtils;
import com.mapbox.geojson.Point;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.List;
Expand Down Expand Up @@ -844,6 +845,59 @@ public static RouteOptions fromUrl(@NonNull URL url) {
return fromJsonString(optionsJson.toString());
}

/**
* Create a URL from RouteOptions instance.
*
* @param accessToken access token to make API request
* @return a URL object instance
*/
@NonNull
public URL toUrl(@NonNull String accessToken) {
StringBuilder sb = new StringBuilder()
.append(baseUrl())
.append("/directions/v5")
.append(String.format("/%s", user()))
.append(String.format("/%s", profile()))
.append(String.format("/%s", coordinates()))
.append(String.format("?access_token=%s", accessToken))
.append(String.format("&alternatives=%s", alternatives()))
.append(String.format("&geometries=%s", geometries()))
.append(String.format("&overview=%s", overview()))
.append(String.format("&radiuses=%s", radiuses()))
.append(String.format("&steps=%s", steps()))
.append(String.format("&bearings=%s", bearings()))
.append(String.format("&layers=%s", layers()))
.append(String.format("&continue_straight=%s", continueStraight()))
.append(String.format("&annotations=%s", annotations()))
.append(String.format("&language=%s", language()))
.append(String.format("&roundabout_exits=%s", roundaboutExits()))
.append(String.format("&voice_instructions=%s", voiceInstructions()))
.append(String.format("&banner_instructions=%s", bannerInstructions()))
.append(String.format("&voice_units=%s", voiceUnits()))
.append(String.format("&exclude=%s", exclude()))
.append(String.format("&include=%s", include()))
.append(String.format("&approaches=%s", approaches()))
.append(String.format("&waypoints=%s", waypointIndices()))
.append(String.format("&waypoint_names=%s", waypointNames()))
.append(String.format("&waypoint_targets=%s", waypointTargets()))
.append(String.format("&enable_refresh=%s", enableRefresh()))
.append(String.format("&walking_speed=%s", walkingSpeed()))
.append(String.format("&walkway_bias=%s", walkwayBias()))
.append(String.format("&alley_bias=%s", alleyBias()))
.append(String.format("&snapping_include_closures=%s", snappingIncludeClosures()))
.append(String.format("&arrive_by=%s", arriveBy()))
.append(String.format("&depart_at=%s", departAt()))
.append(String.format("&max_height=%s", maxHeight()))
.append(String.format("&max_width=%s", maxWidth()))
.append(String.format("&metadata=%s", metadata()));

try {
return new URL(sb.toString());
} catch (MalformedURLException ex) {
throw new RuntimeException(ex);
}
}

@NonNull
private static RouteOptions fromJsonString(@NonNull String json) {
GsonBuilder gson = new GsonBuilder();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mapbox.api.directions.v5.models;

import static com.google.gson.JsonParser.parseString;
import java.net.URL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import com.mapbox.api.directions.v5.DirectionsCriteria;
Expand All @@ -17,6 +18,8 @@ public class RouteOptionsTest extends TestUtils {
* Always update this file when new option is introduced.
*/
private static final String ROUTE_OPTIONS_JSON = "route_options_v5.json";
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";
private static final String ACCESS_TOKEN = "pk.token";

private final String optionsJson = loadJsonFixture(ROUTE_OPTIONS_JSON);

Expand Down Expand Up @@ -318,6 +321,32 @@ public void routeOptionsList_toJson() {
assertEquals(parseString(optionsJson), parseString(options.toJson()));
}

@Test
public void routeOptions_toUrl_fromUrl() {
RouteOptions options = routeOptions();
URL url = options.toUrl(ACCESS_TOKEN);
RouteOptions optionsFromUrl = RouteOptions.fromUrl(url);

assertEquals(options, optionsFromUrl);
}

@Test
public void routeOptionsList_toUrl_fromUrl() {
RouteOptions options = routeOptionsList();
URL url = options.toUrl(ACCESS_TOKEN);
RouteOptions optionsFromUrl = RouteOptions.fromUrl(url);

assertEquals(options, optionsFromUrl);
}

@Test
public void routeOptions_toUrl() {
RouteOptions options = routeOptions();
URL url = options.toUrl(ACCESS_TOKEN);

assertEquals(ROUTE_OPTIONS_URL, url.toString());
}

/**
* Fills up all the options using string variants. Values need ot be equal to the ones in {@link #optionsJson}.
*/
Expand Down