Skip to content

Commit 755e6e6

Browse files
committed
Add RequestHeadersSupplier
1 parent 056e7d8 commit 755e6e6

8 files changed

Lines changed: 59 additions & 56 deletions

File tree

src/main/java/com/taboola/rest/api/RestAPIClient.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
import com.taboola.rest.api.internal.serialization.SerializationMapperCreator;
2121
import com.taboola.rest.api.model.CommunicationInterceptor;
2222
import com.taboola.rest.api.model.HttpLoggingLevel;
23+
import com.taboola.rest.api.model.MultiRequestHeadersSupplier;
2324
import com.taboola.rest.api.model.NoOpCommunicationInterceptor;
2425
import com.taboola.rest.api.model.RequestHeader;
25-
import com.taboola.rest.api.model.RequestHeaders;
26+
import com.taboola.rest.api.model.RequestHeadersSupplier;
2627
import com.taboola.rest.api.model.StringResponseFactory;
2728

2829
/**
@@ -71,6 +72,7 @@ public static class RestAPIClientBuilder {
7172
private Boolean debug;
7273
private SerializationConfig serializationConfig;
7374
private Collection<RequestHeader> headers;
75+
private RequestHeadersSupplier headersSupplier;
7476
private String userAgentPrefix;
7577
private String userAgentSuffix;
7678
private String restAPIVersion;
@@ -79,7 +81,6 @@ public static class RestAPIClientBuilder {
7981
private final StringResponseFactories stringResponseFactories = new StringResponseFactories();
8082
private HttpLoggingLevel loggingLevel;
8183
private CommunicationInterceptor communicationInterceptor;
82-
private RequestHeaders requestHeaders;
8384

8485
public RestAPIClientBuilder setLoggingLevel(HttpLoggingLevel loggingLevel) {
8586
this.loggingLevel = loggingLevel;
@@ -141,6 +142,11 @@ public RestAPIClientBuilder setHeaders(Collection<RequestHeader> headers) {
141142
return this;
142143
}
143144

145+
public RestAPIClientBuilder setHeadersSupplier(RequestHeadersSupplier headersSupplier) {
146+
this.headersSupplier = headersSupplier;
147+
return this;
148+
}
149+
144150
public RestAPIClientBuilder setAPIVersion(String restAPIVersion) {
145151
this.restAPIVersion = restAPIVersion;
146152
return this;
@@ -166,17 +172,14 @@ public RestAPIClientBuilder addStringBodyResponseFactory(Class<?> clazz, StringR
166172
return this;
167173
}
168174

169-
public RestAPIClientBuilder setRequestHeaders(RequestHeaders requestHeaders) {
170-
this.requestHeaders = requestHeaders;
171-
return this;
172-
}
173-
174175
public RestAPIClient build() {
175176
organizeState();
176177
String finalUserAgent = String.format("%s/%s/%s (%s)", userAgentPrefix, restAPIVersion, VERSION, userAgentSuffix);
177178
Collection<RequestHeader> headers = getAllHeaders(this.headers, finalUserAgent);
179+
RequestHeadersSupplier multiRequestHeadersSupplier = new MultiRequestHeadersSupplier(() -> headers, headersSupplier);
180+
178181
CommunicationConfig config = new CommunicationConfig(baseUrl, connectionTimeoutMillis, readTimeoutMillis, writeTimeoutMillis, maxIdleConnections,
179-
keepAliveDurationMillis, headers, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor, requestHeaders);
182+
keepAliveDurationMillis, multiRequestHeadersSupplier, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor);
180183
return new RestAPIClient(new CommunicationFactory(config));
181184
}
182185

src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private Retrofit.Builder createRetrofitBuilder(CommunicationConfig config) {
5757

5858
private OkHttpClient createOkHttpClient(CommunicationConfig config) {
5959
return new OkHttpClient.Builder()
60-
.addInterceptor(new HeadersInterceptor(config.getHeaders(), config.getRequestHeaders()))
60+
.addInterceptor(new HeadersInterceptor(config.getRequestHeadersSupplier()))
6161
.addInterceptor(createLoggingInterceptor(config))
6262
.addInterceptor(new ImmutableRequestResponseInterceptor(config.getCommunicationInterceptor()))
6363
.readTimeout(config.getReadTimeoutMillis(), TimeUnit.MILLISECONDS)

src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
import com.taboola.rest.api.internal.StringResponseFactories;
99
import com.taboola.rest.api.model.CommunicationInterceptor;
1010
import com.taboola.rest.api.model.HttpLoggingLevel;
11-
import com.taboola.rest.api.model.RequestHeader;
12-
import com.taboola.rest.api.model.RequestHeaders;
11+
import com.taboola.rest.api.model.RequestHeadersSupplier;
1312

1413
/**
1514
* Created by vladi
@@ -26,33 +25,31 @@ public class CommunicationConfig {
2625
private final int maxIdleConnections;
2726
private final long keepAliveDurationMillis;
2827
private final boolean debug;
29-
private final Collection<RequestHeader> headers;
28+
private final RequestHeadersSupplier requestHeadersSupplier;
3029
private final ExceptionFactory exceptionFactory;
3130
private final ObjectMapper objectMapper;
3231
private final StringResponseFactories stringResponseFactories;
3332
private final HttpLoggingLevel loggingLevel;
3433
private final CommunicationInterceptor communicationInterceptor;
35-
private final RequestHeaders requestHeaders;
3634

3735
public CommunicationConfig(String baseUrl, Long connectionTimeoutMillis, Long readTimeoutMillis,
3836
Long writeTimeoutMillis, Integer maxIdleConnections, Long keepAliveDurationMillis,
39-
Collection<RequestHeader> headers, boolean debug, ExceptionFactory exceptionFactory,
37+
RequestHeadersSupplier requestHeadersSupplier, boolean debug, ExceptionFactory exceptionFactory,
4038
ObjectMapper objectMapper, StringResponseFactories stringResponseFactories, HttpLoggingLevel loggingLevel,
41-
CommunicationInterceptor communicationInterceptor, RequestHeaders requestHeaders) {
39+
CommunicationInterceptor communicationInterceptor) {
4240
this.baseUrl = baseUrl;
4341
this.connectionTimeoutMillis = connectionTimeoutMillis;
4442
this.readTimeoutMillis = readTimeoutMillis;
4543
this.writeTimeoutMillis = writeTimeoutMillis;
4644
this.maxIdleConnections = maxIdleConnections;
4745
this.keepAliveDurationMillis = keepAliveDurationMillis;
48-
this.headers = headers;
46+
this.requestHeadersSupplier = requestHeadersSupplier;
4947
this.debug = debug;
5048
this.exceptionFactory = exceptionFactory;
5149
this.objectMapper = objectMapper;
5250
this.stringResponseFactories = stringResponseFactories;
5351
this.loggingLevel = loggingLevel;
5452
this.communicationInterceptor = communicationInterceptor;
55-
this.requestHeaders = requestHeaders;
5653
}
5754

5855
public String getBaseUrl() {
@@ -79,8 +76,8 @@ public long getKeepAliveDurationMillis() {
7976
return keepAliveDurationMillis;
8077
}
8178

82-
public Collection<RequestHeader> getHeaders() {
83-
return headers;
79+
public RequestHeadersSupplier getRequestHeadersSupplier() {
80+
return requestHeadersSupplier;
8481
}
8582

8683
public boolean isDebug() {
@@ -107,10 +104,6 @@ public CommunicationInterceptor getCommunicationInterceptor() {
107104
return communicationInterceptor;
108105
}
109106

110-
public RequestHeaders getRequestHeaders() {
111-
return requestHeaders;
112-
}
113-
114107
@Override
115108
public String toString() {
116109
return "CommunicationConfig{" +
@@ -121,13 +114,12 @@ public String toString() {
121114
", maxIdleConnections=" + maxIdleConnections +
122115
", keepAliveDurationMillis=" + keepAliveDurationMillis +
123116
", debug=" + debug +
124-
", headers=" + headers +
117+
", requestHeadersSupplier=" + requestHeadersSupplier +
125118
", exceptionFactory=" + exceptionFactory +
126119
", objectMapper=" + objectMapper +
127120
", stringResponseFactories=" + stringResponseFactories +
128121
", loggingLevel=" + loggingLevel +
129122
", communicationInterceptor=" + communicationInterceptor +
130-
", requestHeaders=" + requestHeaders +
131123
'}';
132124
}
133125
}
Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.taboola.rest.api.internal.interceptors;
22

33
import java.io.IOException;
4-
import java.util.Collection;
5-
import java.util.Map;
64

75
import com.taboola.rest.api.model.RequestHeader;
8-
import com.taboola.rest.api.model.RequestHeaders;
6+
import com.taboola.rest.api.model.RequestHeadersSupplier;
97

108
import okhttp3.Interceptor;
119
import okhttp3.Request;
@@ -15,37 +13,23 @@
1513
* Created on 10/21/20.
1614
*/
1715
public class HeadersInterceptor implements Interceptor {
18-
private final Collection<RequestHeader> headers;
19-
private final RequestHeaders requestHeaders;
16+
private final RequestHeadersSupplier requestHeadersSupplier;
2017

21-
public HeadersInterceptor(Collection<RequestHeader> headers, RequestHeaders requestHeaders) {
22-
this.headers = headers;
23-
this.requestHeaders = requestHeaders;
18+
public HeadersInterceptor(RequestHeadersSupplier requestHeadersSupplier) {
19+
this.requestHeadersSupplier = requestHeadersSupplier;
2420
}
2521

2622
@Override
2723
public Response intercept(Chain chain) throws IOException {
2824
Request.Builder builder = chain.request().newBuilder();
29-
30-
headers.stream()
25+
requestHeadersSupplier.get()
26+
.stream()
3127
.filter(this::validateHeader)
3228
.forEach(header -> builder.header(header.getName(), header.getValue()));
33-
34-
if (requestHeaders != null) {
35-
requestHeaders.get()
36-
.entrySet()
37-
.stream().filter(this::validateHeader)
38-
.forEach(entry -> builder.header(entry.getKey(), entry.getValue()));
39-
}
40-
4129
return chain.proceed(builder.build());
4230
}
4331

4432
private boolean validateHeader(RequestHeader header) {
4533
return header.getName() != null && header.getValue() != null;
4634
}
47-
48-
private boolean validateHeader(Map.Entry<String, String> entry) {
49-
return entry.getKey() != null && entry.getValue() != null;
50-
}
5135
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.taboola.rest.api.model;
2+
3+
import java.util.Collection;
4+
import java.util.Objects;
5+
import java.util.stream.Collectors;
6+
import java.util.stream.Stream;
7+
8+
public class MultiRequestHeadersSupplier implements RequestHeadersSupplier {
9+
private final Collection<RequestHeadersSupplier> suppliers;
10+
11+
public MultiRequestHeadersSupplier(RequestHeadersSupplier... suppliers) {
12+
this.suppliers = Stream.of(suppliers == null ? new RequestHeadersSupplier[0] : suppliers)
13+
.filter(Objects::nonNull)
14+
.collect(Collectors.toList());
15+
}
16+
17+
@Override
18+
public Collection<RequestHeader> get() {
19+
return suppliers.stream()
20+
.map(RequestHeadersSupplier::get)
21+
.flatMap(Collection::stream)
22+
.collect(Collectors.toList());
23+
}
24+
}

src/main/java/com/taboola/rest/api/model/RequestHeaders.java

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.taboola.rest.api.model;
2+
3+
import java.util.Collection;
4+
import java.util.function.Supplier;
5+
6+
public interface RequestHeadersSupplier extends Supplier<Collection<RequestHeader>> {
7+
}

src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public interface TestEndpoint {
3838
public void beforeTest() {
3939
CommunicationConfig communicationConfig = new CommunicationConfig("http://localhost",
4040
1L, 1L, 1L, 1, 60L,
41-
Collections.singleton(new UserAgentHeader("Dummy-Agent")), true, new DefaultExceptionFactory(),
42-
new ObjectMapper(), new StringResponseFactories(), HttpLoggingLevel.BASIC, new NoOpCommunicationInterceptor(), null);
41+
() -> Collections.singleton(new UserAgentHeader("Dummy-Agent")), true, new DefaultExceptionFactory(),
42+
new ObjectMapper(), new StringResponseFactories(), HttpLoggingLevel.BASIC, new NoOpCommunicationInterceptor());
4343
testInstance = new CommunicationFactory(communicationConfig);
4444
}
4545

0 commit comments

Comments
 (0)