17
17
import java .util .concurrent .CountDownLatch ;
18
18
import java .util .concurrent .TimeUnit ;
19
19
import java .util .concurrent .atomic .AtomicBoolean ;
20
- import java .util .stream .Collectors ;
21
20
import okhttp3 .Call ;
22
21
import okhttp3 .Callback ;
23
22
import okhttp3 .ConnectionPool ;
33
32
34
33
public class TectonHttpClient {
35
34
35
+ // Class to be used as a tag for each request to keep track of the index of the request.
36
+ static class RequestIndex {
37
+ final int index ;
38
+
39
+ RequestIndex (int index ) {
40
+ this .index = index ;
41
+ }
42
+ }
43
+
36
44
private HttpUrl url ;
37
45
private final String apiKey ;
38
46
private final OkHttpClient client ;
@@ -96,7 +104,7 @@ public boolean isClosed() {
96
104
public HttpResponse performRequest (String endpoint , HttpMethod method , String requestBody ) {
97
105
HttpRequest httpRequest =
98
106
new HttpRequest (url .url ().toString (), endpoint , method , apiKey , requestBody );
99
- Request request = buildRequestWithDefaultHeaders (httpRequest );
107
+ Request request = buildRequestWithDefaultHeaders (httpRequest , 0 );
100
108
Call call = client .newCall (request );
101
109
try (Response response = call .execute ()) {
102
110
return new HttpResponse (response );
@@ -113,13 +121,12 @@ public List<HttpResponse> performParallelRequests(
113
121
114
122
// Map request body to OkHttp Request
115
123
// ordering of requests is maintained
116
- List <Request > requestList =
117
- requestBodyList .stream ()
118
- .map (
119
- requestBody ->
120
- new HttpRequest (url .url ().toString (), endpoint , method , apiKey , requestBody ))
121
- .map (this ::buildRequestWithDefaultHeaders )
122
- .collect (Collectors .toList ());
124
+ List <Request > requestList = new ArrayList <>();
125
+ for (int i = 0 ; i < requestBodyList .size (); i ++) {
126
+ HttpRequest httpRequest =
127
+ new HttpRequest (url .url ().toString (), endpoint , method , apiKey , requestBodyList .get (i ));
128
+ requestList .add (buildRequestWithDefaultHeaders (httpRequest , i ));
129
+ }
123
130
124
131
// Initialize a countdown latch for numberOfCalls.
125
132
CountDownLatch countDownLatch = new CountDownLatch (requestBodyList .size ());
@@ -141,7 +148,8 @@ public void onResponse(Call call, Response response) {
141
148
try (ResponseBody responseBody = response .body ()) {
142
149
// Add response to corresponding index
143
150
parallelCallHandler .set (
144
- requestList .indexOf (call .request ()), new HttpResponse (response , responseBody ));
151
+ call .request ().tag (RequestIndex .class ).index ,
152
+ new HttpResponse (response , responseBody ));
145
153
} catch (Exception e ) {
146
154
throw new TectonServiceException (e .getMessage ());
147
155
} finally {
@@ -171,7 +179,7 @@ public void onResponse(Call call, Response response) {
171
179
}
172
180
}
173
181
174
- public Request buildRequestWithDefaultHeaders (HttpRequest httpRequest ) {
182
+ public Request buildRequestWithDefaultHeaders (HttpRequest httpRequest , int index ) {
175
183
// Construct url
176
184
Request .Builder requestBuilder = new Request .Builder ().url (httpRequest .getUrl ());
177
185
@@ -183,16 +191,10 @@ public Request buildRequestWithDefaultHeaders(HttpRequest httpRequest) {
183
191
requestBuilder .header (HttpHeader .AUTHORIZATION .getName (), apiKeyHeader );
184
192
185
193
// Add request body
186
- switch (httpRequest .getMethod ()) {
187
- case POST :
188
- default :
189
- {
190
- okhttp3 .MediaType mediaType =
191
- okhttp3 .MediaType .parse (MediaType .APPLICATION_JSON .getName ());
192
- RequestBody requestBody = RequestBody .create (httpRequest .getJsonBody (), mediaType );
193
- requestBuilder .post (requestBody );
194
- }
195
- }
194
+ okhttp3 .MediaType mediaType = okhttp3 .MediaType .parse (MediaType .APPLICATION_JSON .getName ());
195
+ RequestBody requestBody = RequestBody .create (httpRequest .getJsonBody (), mediaType );
196
+ requestBuilder .post (requestBody );
197
+ requestBuilder .tag (RequestIndex .class , new RequestIndex (index ));
196
198
return requestBuilder .build ();
197
199
}
198
200
0 commit comments