Skip to content

Commit 0721213

Browse files
refactor getUnsuccessfulResponse
1 parent 3e52d22 commit 0721213

File tree

1 file changed

+70
-55
lines changed

1 file changed

+70
-55
lines changed
Lines changed: 70 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,98 @@
11
package com.osrm.client;
22

3-
import okhttp3.OkHttpClient;
4-
import okhttp3.MediaType;
5-
import okhttp3.RequestBody;
6-
import okhttp3.Request;
7-
import okhttp3.Response;
8-
import okhttp3.OkHttpClient.Builder;
9-
10-
import java.io.IOException;
113
import java.util.ArrayList;
124
import java.util.List;
135
import java.util.concurrent.TimeUnit;
6+
import okhttp3.MediaType;
7+
import okhttp3.OkHttpClient;
8+
import okhttp3.OkHttpClient.Builder;
9+
import okhttp3.Request;
10+
import okhttp3.RequestBody;
11+
import okhttp3.Response;
1412

1513

1614
public class OSRMClient {
17-
private final String uri;
15+
private final String uri;
1816

19-
public OSRMClient(String uri) throws EmptyUrlException {
20-
if (uri != null || !uri.isEmpty()) {
21-
this.uri = uri;
22-
}
23-
else {
24-
throw new EmptyUrlException("OSRMClient Constructor requires a OSRM http url");
25-
}
17+
public OSRMClient(String uri) throws EmptyUrlException {
18+
if (uri != null || !uri.isEmpty()) {
19+
this.uri = uri;
20+
} else {
21+
throw new EmptyUrlException("OSRMClient Constructor requires a OSRM http url");
2622
}
23+
}
2724

2825

29-
public OSRMDistanceResponse getDistanceMatrix(List<GeoLocation> locations, double speedRate, String country, String token, String profile, String startTime) throws OptimizationDistanceMatrixException {
30-
OSRMDistanceResponse osrmDistanceResponse;
26+
public OSRMDistanceResponse getDistanceMatrix(List<GeoLocation> locations, double speedRate, String country,
27+
String token, String profile,
28+
String startTime) throws OptimizationDistanceMatrixException {
29+
Builder requestBuilder = new Builder();
3130

32-
Builder requestBuilder = new Builder();
31+
requestBuilder.readTimeout(900000, TimeUnit.MILLISECONDS);
32+
requestBuilder.writeTimeout(900000, TimeUnit.MILLISECONDS);
3333

34-
requestBuilder.readTimeout(900000, TimeUnit.MILLISECONDS);
35-
requestBuilder.writeTimeout(900000, TimeUnit.MILLISECONDS);
34+
OkHttpClient client = requestBuilder.build();
3635

37-
OkHttpClient client = requestBuilder.build();
36+
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
3837

39-
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
38+
List<String> locationsCollection = new ArrayList<>();
4039

41-
List<String> locationsCollection = new ArrayList<>();
4240

41+
for (GeoLocation geoloc : locations) {
42+
locationsCollection.add(geoloc.getLatLongString());
43+
}
4344

44-
for (GeoLocation geoloc: locations) {
45-
locationsCollection.add(geoloc.getLatLongString());
46-
}
47-
48-
String paramsString = String.join("&loc=", locationsCollection);
49-
50-
paramsString += "&speedRate=" + speedRate;
51-
paramsString += "&country=" + country;
45+
String paramsString = String.join("&loc=", locationsCollection);
5246

53-
if (startTime != null & !startTime.isEmpty()) {
54-
paramsString += "&start_time=" + startTime;
55-
}
47+
paramsString += "&speedRate=" + speedRate;
48+
paramsString += "&country=" + country;
5649

57-
RequestBody body = RequestBody.create(mediaType, "loc=" + paramsString);
50+
if (startTime != null && !startTime.isEmpty()) {
51+
paramsString += "&start_time=" + startTime;
52+
}
5853

59-
Request request = new Request.Builder()
60-
.url(this.uri + "/table/" + profile)
61-
.post(body)
62-
.addHeader("Content-Type", "application/x-www-form-urlencoded")
63-
.addHeader("Authorization", token)
64-
.build();
54+
RequestBody body = RequestBody.create(mediaType, "loc=" + paramsString);
55+
56+
Request request = new Request.Builder()
57+
.url(this.uri + "/table/" + profile)
58+
.post(body)
59+
.addHeader("Content-Type", "application/x-www-form-urlencoded")
60+
.addHeader("Authorization", token)
61+
.build();
62+
63+
Response response;
64+
try {
65+
response = client.newCall(request).execute();
66+
if (response.isSuccessful()) {
67+
return OSRMDistanceResponse.fromJSON(response.body().string());
68+
}
69+
} catch (Exception e) {
70+
System.out.print(e.getMessage());
71+
throw new OptimizationDistanceMatrixException("Error while connecting to OSRM Server");
72+
}
6573

66-
try {
67-
Response response = client.newCall(request).execute();
74+
UnsuccessfulResponse unsuccessfulResponse = this.getUnsuccessfulResponse(response);
75+
if (unsuccessfulResponse != null && unsuccessfulResponse.getMessage() != null) {
76+
throw new DistanceMatrixResponseException("OSRM Error: " + unsuccessfulResponse.getMessage());
77+
}
6878

69-
if (!response.isSuccessful()) {
70-
UnsuccessfulResponse unsuccessfulResponse = UnsuccessfulResponse.fromJSON(response.body().string());
71-
throw new DistanceMatrixResponseException("OSRM Error: " + unsuccessfulResponse.getMessage());
72-
}
79+
throw new DistanceMatrixResponseException("OSRM Error: " + response);
80+
}
7381

74-
osrmDistanceResponse = OSRMDistanceResponse.fromJSON(response.body().string());
75-
}
76-
catch(Exception e) {
77-
System.out.print(e.getMessage());
78-
throw new OptimizationDistanceMatrixException("Error while connecting to OSRM Server");
82+
private UnsuccessfulResponse getUnsuccessfulResponse(Response response){
83+
try {
84+
if (response.body() != null) {
85+
String bodyResponse = response.body().string();
86+
UnsuccessfulResponse unsuccessfulResponse = UnsuccessfulResponse.fromJSON(bodyResponse);
87+
if(unsuccessfulResponse.getMessage() == null){
88+
return new UnsuccessfulResponse(bodyResponse,String.valueOf(response.code()),"");
7989
}
90+
}
91+
} catch (Exception e) {
92+
System.out.print("Error getUnsuccessfulResponse.fromJSON: " + e.getMessage());
93+
}
94+
return null;
95+
}
96+
8097

81-
return osrmDistanceResponse;
82-
}
8398
}

0 commit comments

Comments
 (0)