Skip to content

Commit 92df497

Browse files
abhishek1508Łukasz Paczos
authored andcommitted
add metadata deserializers
1 parent f09ceb2 commit 92df497

9 files changed

Lines changed: 160 additions & 6 deletions

File tree

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ public static Builder builder() {
9595
@Nullable
9696
public abstract String uuid();
9797

98+
/**
99+
* A complex data structure that provides versioning information.
100+
*
101+
* @return a Metadata holding versioning information
102+
*/
103+
@Nullable
104+
public abstract Metadata metadata();
105+
98106
/**
99107
* Convert the current {@link DirectionsResponse} to its builder holding the currently assigned
100108
* values. This allows you to modify a single property and then rebuild the object resulting in
@@ -234,6 +242,14 @@ public abstract static class Builder {
234242
*/
235243
public abstract Builder uuid(@Nullable String uuid);
236244

245+
/**
246+
* A complex data structure that provides versioning information.
247+
*
248+
* @param metadata a Metadata holding versioning information
249+
* @return this builder for chaining options together
250+
*/
251+
public abstract Builder metadata(@Nullable Metadata metadata);
252+
237253
abstract DirectionsResponse autoBuild();
238254

239255
/**
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.mapbox.api.directions.v5.models;
2+
3+
import androidx.annotation.Nullable;
4+
import com.google.auto.value.AutoValue;
5+
import com.google.gson.Gson;
6+
import com.google.gson.GsonBuilder;
7+
import com.google.gson.TypeAdapter;
8+
import com.google.gson.annotations.SerializedName;
9+
import com.mapbox.api.directions.v5.DirectionsAdapterFactory;
10+
11+
import java.util.Map;
12+
13+
/**
14+
* Object representing metadata associated with a route request.
15+
*/
16+
@AutoValue
17+
public abstract class Metadata extends DirectionsJsonObject {
18+
19+
/**
20+
* Create a new instance of this class by using the {@link Metadata.Builder} class.
21+
*
22+
* @return {@link Metadata.Builder} for creating a new instance
23+
*/
24+
public static Builder builder() {
25+
return new AutoValue_Metadata.Builder();
26+
}
27+
28+
/**
29+
* Map containing a key/value pair of all the properties inside `map` json element including
30+
* map sources, version information etc. Metadata map is generic and can give access to many
31+
* different key/value pairs other than the ones specified.
32+
* @return map of key/value pairs
33+
*/
34+
@Nullable
35+
@SerializedName("map")
36+
public abstract Map<String, String> mapInfo();
37+
38+
/**
39+
* Convert the current {@link Metadata} to its builder holding the currently assigned
40+
* values. This allows you to modify a single property and then rebuild the object resulting in
41+
* an updated and modified {@link Metadata}.
42+
*
43+
* @return a {@link Metadata.Builder} with the same values set to match the ones defined
44+
* in this {@link Metadata}
45+
*/
46+
public abstract Builder toBuilder();
47+
48+
/**
49+
* Gson type adapter for parsing Gson to this class.
50+
*
51+
* @param gson the built {@link Gson} object
52+
* @return the type adapter for this class
53+
*/
54+
public static TypeAdapter<Metadata> typeAdapter(Gson gson) {
55+
return new AutoValue_Metadata.GsonTypeAdapter(gson);
56+
}
57+
58+
/**
59+
* Create a new instance of this class by passing in a formatted valid JSON String.
60+
*
61+
* @param json a formatted valid JSON string defining a Metadata
62+
* @return a new instance of this class defined by the values passed inside this static factory
63+
* method
64+
*/
65+
public static Metadata fromJson(String json) {
66+
GsonBuilder gson = new GsonBuilder();
67+
gson.registerTypeAdapterFactory(DirectionsAdapterFactory.create());
68+
return gson.create().fromJson(json, Metadata.class);
69+
}
70+
71+
/**
72+
* This builder can be used to set the values describing the {@link Metadata}.
73+
*/
74+
@AutoValue.Builder
75+
public abstract static class Builder {
76+
77+
/**
78+
* Map indicating the key/value pairs.
79+
*
80+
* @param mapInfo indicating the key/value pairs
81+
* @return a {@link Metadata.Builder} object
82+
*/
83+
public abstract Builder mapInfo(Map<String, String> mapInfo);
84+
85+
/**
86+
* Build a new {@link Metadata} object.
87+
*
88+
* @return a new {@link Metadata} using the provided values in this builder
89+
*/
90+
public abstract Metadata build();
91+
}
92+
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,16 @@ public List<Boolean> snappingIncludeClosuresList() {
649649
@Nullable
650650
public abstract Boolean enableRefresh();
651651

652+
/**
653+
* Whether the response should contain metadata holding versioning information.
654+
* <p>
655+
*
656+
* @return whether the response should hold metadata
657+
*/
658+
@SerializedName("metadata")
659+
@Nullable
660+
public abstract Boolean metadata();
661+
652662
/**
653663
* Gson type adapter for parsing Gson to this class.
654664
*
@@ -1421,6 +1431,16 @@ public Builder snappingIncludeClosuresList(@Nullable List<Boolean> snappingClosu
14211431
@NonNull
14221432
public abstract Builder enableRefresh(@Nullable Boolean enableRefresh);
14231433

1434+
/**
1435+
* Whether the response should contain metadata holding versioning information.
1436+
* <p>
1437+
*
1438+
* @param metadata whether the routes should be refreshable
1439+
* @return this builder
1440+
*/
1441+
@NonNull
1442+
public abstract Builder metadata(@Nullable Boolean metadata);
1443+
14241444
/**
14251445
* Builds the object.
14261446
*

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,13 @@ public void enableRefreshIsValid_fromJson() {
251251
assertEquals(true, options.enableRefresh());
252252
}
253253

254+
@Test
255+
public void metadataIsValid_fromJson() {
256+
RouteOptions options = RouteOptions.fromJson(optionsJson);
257+
258+
assertEquals(true, options.metadata());
259+
}
260+
254261
@Test
255262
public void routeOptions_toJson() {
256263
RouteOptions options = routeOptions();
@@ -304,6 +311,7 @@ private RouteOptions routeOptions() {
304311
.snappingIncludeClosures(";false;true")
305312
.user(DirectionsCriteria.PROFILE_DEFAULT_USER)
306313
.enableRefresh(true)
314+
.metadata(true)
307315
.build();
308316
}
309317

@@ -378,6 +386,7 @@ private RouteOptions routeOptionsList() {
378386
}})
379387
.user(DirectionsCriteria.PROFILE_DEFAULT_USER)
380388
.enableRefresh(true)
389+
.metadata(true)
381390
.build();
382391
}
383392
}

services-directions-models/src/test/resources/route_options_v5.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@
2727
"walkway_bias": -0.2,
2828
"arrive_by": "2021-01-01'T'01:01",
2929
"depart_at": "2021-02-02'T'02:02",
30-
"enable_refresh": true
30+
"enable_refresh": true,
31+
"metadata": true
3132
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ interface DirectionsService {
5050
* @param snappingIncludeClosures {@link RouteOptions#snappingIncludeClosures()}
5151
* @param arriveBy {@link RouteOptions#arriveBy()}
5252
* @param departAt {@link RouteOptions#departAt()}
53+
* @param metadata {@link RouteOptions#metadata()}
5354
* @return the {@link DirectionsResponse} in a Call wrapper
5455
*/
5556
@GET("directions/v5/{user}/{profile}/{coordinates}")
@@ -83,7 +84,8 @@ Call<DirectionsResponse> getCall(
8384
@Query("alley_bias") Double alleyBias,
8485
@Query("snapping_include_closures") String snappingIncludeClosures,
8586
@Query("arrive_by") String arriveBy,
86-
@Query("depart_at") String departAt
87+
@Query("depart_at") String departAt,
88+
@Query("metadata") Boolean metadata
8789
);
8890

8991
/**
@@ -119,6 +121,7 @@ Call<DirectionsResponse> getCall(
119121
* @param snappingIncludeClosures {@link RouteOptions#snappingIncludeClosures()}
120122
* @param arriveBy {@link RouteOptions#arriveBy()}
121123
* @param departAt {@link RouteOptions#departAt()}
124+
* @param metadata {@link RouteOptions#metadata()}
122125
* @return the {@link DirectionsResponse} in a Call wrapper
123126
*/
124127
@FormUrlEncoded
@@ -153,6 +156,7 @@ Call<DirectionsResponse> postCall(
153156
@Field("alley_bias") Double alleyBias,
154157
@Field("snapping_include_closures") String snappingIncludeClosures,
155158
@Field("arrive_by") String arriveBy,
156-
@Field("depart_at") String departAt
159+
@Field("depart_at") String departAt,
160+
@Field("metadata") Boolean metadata
157161
);
158162
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ private Call<DirectionsResponse> get() {
104104
routeOptions().alleyBias(),
105105
routeOptions().snappingIncludeClosures(),
106106
routeOptions().arriveBy(),
107-
routeOptions().departAt()
107+
routeOptions().departAt(),
108+
routeOptions().metadata()
108109
);
109110
}
110111

@@ -139,7 +140,8 @@ private Call<DirectionsResponse> post() {
139140
routeOptions().alleyBias(),
140141
routeOptions().snappingIncludeClosures(),
141142
routeOptions().arriveBy(),
142-
routeOptions().departAt()
143+
routeOptions().departAt(),
144+
routeOptions().metadata()
143145
);
144146
}
145147

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,15 @@ public void build_walkingWalkingSpeedOptions() {
135135
assertTrue(directions.cloneCall().request().url().toString().contains("walking_speed=5.11"));
136136
}
137137

138+
@Test
139+
public void build_metadataOptions() {
140+
MapboxDirections directions = MapboxDirections.builder()
141+
.accessToken("token")
142+
.routeOptions(routeOptions)
143+
.build();
144+
assertTrue(directions.cloneCall().request().url().toString().contains("metadata=true"));
145+
}
146+
138147
@Test
139148
public void build_walkingWalkwayBiasOptions() {
140149
MapboxDirections directions = MapboxDirections.builder()

services-directions/src/test/resources/route_options_v5.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@
2727
"walkway_bias": -0.2,
2828
"arrive_by": "2021-01-01'T'01:01",
2929
"depart_at": "2021-02-02'T'02:02",
30-
"enable_refresh": true
30+
"enable_refresh": true,
31+
"metadata": true
3132
}

0 commit comments

Comments
 (0)