Skip to content

Commit

Permalink
Merge pull request #19 from rchodava/issue-18
Browse files Browse the repository at this point in the history
Issue 18 - Allow a connect timeout to be specified for HTTP client requests
  • Loading branch information
rchodava committed Mar 23, 2016
2 parents e9ead48 + 68c0720 commit 7a3f882
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 9 deletions.
12 changes: 10 additions & 2 deletions core/src/main/java/org/chodavarapu/datamill/http/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class Client {

public Observable<Response> request(Function<RequestBuilder, Request> builder) {
Request request = builder.apply(new RequestBuilderImpl());
return request(request.method(), request.headers(), request.uri(), request.uriParameters(), request.entity());
return request(request.method(), request.headers(), request.uri(), request.uriParameters(), request.options(), request.entity());
}

public Observable<Response> request(Method method, Map<String, String> headers, String uri, Value entity) {
Expand All @@ -41,14 +41,15 @@ protected URLConnection createConnection(String uri) throws IOException {
}

public Observable<Response> request(Method method, Map<String, String> headers, String uri, Entity entity) {
return request(method, headers, uri, null, entity);
return request(method, headers, uri, null, null, entity);
}

public Observable<Response> request(
Method method,
Map<String, String> headers,
String uri,
Map<String, String> uriParameters,
Map<String, ?> options,
Entity entity) {
if (uriParameters != null && uriParameters.size() > 0) {
uri = uriBuilder.build(uri, uriParameters);
Expand All @@ -62,6 +63,13 @@ public Observable<Response> request(

httpConnection.setRequestMethod(method.toString());

if (options != null && options.size() > 0) {
Object connectTimeout = options.get(Request.OPTION_CONNECT_TIMEOUT);
if (connectTimeout instanceof Integer) {
httpConnection.setConnectTimeout((int) connectTimeout);
}
}

if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
httpConnection.addRequestProperty(header.getKey(), header.getValue());
Expand Down
4 changes: 4 additions & 0 deletions core/src/main/java/org/chodavarapu/datamill/http/Request.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface Request {
String OPTION_CONNECT_TIMEOUT = "connectTimeout";

Entity entity();

Map<String, String> headers();
Expand All @@ -19,6 +21,8 @@ public interface Request {

Method method();

Map<String, Object> options();

String uri();

Value uriParameter(String parameter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
public interface RequestBuilder {
Request build();
RequestBuilder connectTimeout(int milliseconds);
RequestBuilder entity(Value entity);
RequestBuilder entity(Entity entity);
RequestBuilder header(String name, String value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,21 @@
*/
public class RequestBuilderImpl implements RequestBuilder {
private Entity entity;
private String method;
private final Map<String, String> headers = new HashMap<>();
private String method;
private final Map<String, Object> options = new HashMap<>();
private String uri;
private final Map<String, String> uriParameters = new HashMap<>();

@Override
public Request build() {
return new RequestImpl(method, headers, uri, uriParameters, entity);
return new RequestImpl(method, headers, uri, uriParameters, options, entity);
}

@Override
public RequestBuilder connectTimeout(int milliseconds) {
options.put(Request.OPTION_CONNECT_TIMEOUT, milliseconds);
return this;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,19 @@ public class RequestImpl implements Request {
private final Entity entity;
private final String method;
private final Map<String, String> headers;
private final Map<String, Object> options;
private final String uri;
private final Map<String, String> uriParameters;

public RequestImpl(String method, Map<String, String> headers, String uri, Map<String, String> uriParameters, Entity entity) {
public RequestImpl(
String method,
Map<String, String> headers,
String uri,
Map<String, String> uriParameters,
Map<String, Object> options,
Entity entity) {
this.method = method;
this.options = options;
this.uri = uri;
this.uriParameters = uriParameters;
this.headers = headers;
Expand Down Expand Up @@ -54,6 +62,11 @@ public Method method() {
return Method.valueOf(method);
}

@Override
public Map<String, Object> options() {
return options;
}

@Override
public String uri() {
return uri;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
import org.chodavarapu.datamill.values.StringValue;
import org.chodavarapu.datamill.values.Value;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
Expand Down Expand Up @@ -77,6 +74,11 @@ public Method method() {
return null;
}

@Override
public Map<String, Object> options() {
return Collections.emptyMap();
}

@Override
public ResponseBuilder respond() {
return new ResponseBuilderImpl();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class RequestBuilderImplTest {
@Test
public void requestBuilding() {
Request request = new RequestBuilderImpl()
.connectTimeout(500)
.header(RequestHeader.ACCEPT, "application/json")
.header("Content-Type", "application/json")
.method(Method.GET)
Expand All @@ -28,6 +29,7 @@ public void requestBuilding() {
assertEquals("application/json", request.header(RequestHeader.CONTENT_TYPE).get().asString());
assertEquals(Method.GET, request.method());
assertEquals("http://sample.com", request.uri());
assertEquals(500, request.options().get(Request.OPTION_CONNECT_TIMEOUT));
}

@Test
Expand Down

0 comments on commit 7a3f882

Please sign in to comment.