1 | package pl.zankowski.iextrading4j.client.rest.manager; | |
2 | ||
3 | import com.google.common.collect.Maps; | |
4 | import javax.ws.rs.client.Entity; | |
5 | import javax.ws.rs.client.Invocation; | |
6 | import javax.ws.rs.core.MediaType; | |
7 | import javax.ws.rs.core.Response; | |
8 | import pl.zankowski.iextrading4j.api.exception.IEXTradingException; | |
9 | import pl.zankowski.iextrading4j.client.IEXCloudToken; | |
10 | ||
11 | import java.util.Map; | |
12 | ||
13 | import static java.util.stream.Collectors.joining; | |
14 | ||
15 | public class RestManager { | |
16 | ||
17 | private static final String TOKEN_QUERY_PARAM = "token"; | |
18 | private static final int SUCCESS = 200; | |
19 | private static final int WRITE_SUCCESS = 201; | |
20 | ||
21 | private final RestClient restClient; | |
22 | ||
23 | public RestManager(final RestClient restClient) { | |
24 | this.restClient = restClient; | |
25 | } | |
26 | ||
27 | public <R> RestResponse<R> executeRequest(final RestRequest<R> restRequest) { | |
28 | final String url = createURL(restRequest, restClient.getRestClientMetadata().getToken(), | |
29 | restClient.getRestClientMetadata().getUrl()); | |
30 | ||
31 | final Invocation.Builder target = restClient.getClient().target(url).request(MediaType.APPLICATION_JSON); | |
32 | Response response = null; | |
33 | ||
34 | try { | |
35 | switch (restRequest.getMethodType()) { | |
36 | case GET: | |
37 | response = target.get(); | |
38 | break; | |
39 | case POST: | |
40 | final PostEntity requestEntity = restRequest.getRequestEntity(); | |
41 |
1
1. executeRequest : removed call to pl/zankowski/iextrading4j/client/rest/manager/PostEntity::setToken → NO_COVERAGE |
requestEntity.setToken(resolveToken(restRequest, restClient.getRestClientMetadata().getToken())); |
42 | response = target.post(Entity.entity(requestEntity, MediaType.APPLICATION_JSON)); | |
43 | break; | |
44 | default: | |
45 | throw new IllegalStateException("Method Type not supported."); | |
46 | } | |
47 | ||
48 |
1
1. executeRequest : negated conditional → KILLED |
if (!isSuccessful(response)) { |
49 | final String errorMessage = response.readEntity(String.class); | |
50 | throw new IEXTradingException(errorMessage, response.getStatus()); | |
51 | } | |
52 | ||
53 |
1
1. executeRequest : replaced return value with null for pl/zankowski/iextrading4j/client/rest/manager/RestManager::executeRequest → KILLED |
return new RestResponseBuilder<R>() |
54 | .withMessage(response.getStatusInfo().getReasonPhrase()) | |
55 | .withResponse(response.readEntity(restRequest.getResponseType())) | |
56 | .build(); | |
57 | } finally { | |
58 |
1
1. executeRequest : negated conditional → KILLED |
if (response != null) { |
59 |
1
1. executeRequest : removed call to javax/ws/rs/core/Response::close → KILLED |
response.close(); |
60 | } | |
61 | } | |
62 | } | |
63 | ||
64 | private boolean isSuccessful(final Response response) { | |
65 |
3
1. isSuccessful : negated conditional → KILLED 2. isSuccessful : negated conditional → KILLED 3. isSuccessful : replaced boolean return with true for pl/zankowski/iextrading4j/client/rest/manager/RestManager::isSuccessful → KILLED |
return response.getStatus() == SUCCESS || response.getStatus() == WRITE_SUCCESS; |
66 | } | |
67 | ||
68 | private <R> String createURL(final RestRequest<R> restRequest, final IEXCloudToken token, final String url) { | |
69 |
1
1. createURL : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::createURL → KILLED |
return new StringBuilder() |
70 | .append(url) | |
71 | .append(createPath(restRequest.getPath(), restRequest.getPathParams())) | |
72 | .append(createQueryParameters(restRequest.getQueryParams(), resolveUrlToken(restRequest, token))) | |
73 | .toString(); | |
74 | } | |
75 | ||
76 | private <R> String resolveUrlToken(final RestRequest<R> restRequest, final IEXCloudToken token) { | |
77 |
2
1. resolveUrlToken : negated conditional → SURVIVED 2. resolveUrlToken : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::resolveUrlToken → KILLED |
return restRequest.getMethodType() != MethodType.GET ? null : resolveToken(restRequest, token); |
78 | } | |
79 | ||
80 | private <R> String resolveToken(final RestRequest<R> restRequest, final IEXCloudToken token) { | |
81 |
2
1. resolveToken : negated conditional → KILLED 2. resolveToken : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::resolveToken → KILLED |
return token == null |
82 | ? null | |
83 |
1
1. resolveToken : negated conditional → NO_COVERAGE |
: restRequest.getUseSecretToken() |
84 | ? token.getSecretToken() | |
85 | : token.getPublishableToken(); | |
86 | } | |
87 | ||
88 | ||
89 | private String createPath(final String originalPath, final Map<String, String> pathParams) { | |
90 | String path = originalPath; | |
91 | for (final Map.Entry<String, String> entry : pathParams.entrySet()) { | |
92 | path = path.replaceFirst("\\{" + entry.getKey() + "\\}", entry.getValue()); | |
93 | } | |
94 | ||
95 |
1
1. createPath : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::createPath → KILLED |
return path; |
96 | } | |
97 | ||
98 | private String createQueryParameters(final Map<String, String> queryParams, final String publishableToken) { | |
99 |
2
1. createQueryParameters : negated conditional → SURVIVED 2. createQueryParameters : negated conditional → KILLED |
if (queryParams.isEmpty() && publishableToken == null) { |
100 | return ""; | |
101 | } | |
102 | ||
103 | final Map<String, String> paramsCopy = Maps.newHashMap(queryParams); | |
104 |
1
1. createQueryParameters : negated conditional → KILLED |
if (publishableToken != null) { |
105 | paramsCopy.put(TOKEN_QUERY_PARAM, publishableToken); | |
106 | } | |
107 | ||
108 |
1
1. createQueryParameters : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::createQueryParameters → KILLED |
return paramsCopy.entrySet().stream() |
109 | .map(this::createQueryParam) | |
110 | .collect(joining("&", "?", "")); | |
111 | } | |
112 | ||
113 | private String createQueryParam(final Map.Entry<String, String> queryParam) { | |
114 |
1
1. createQueryParam : replaced return value with "" for pl/zankowski/iextrading4j/client/rest/manager/RestManager::createQueryParam → KILLED |
return queryParam.getKey() + "=" + queryParam.getValue(); |
115 | } | |
116 | ||
117 | } | |
Mutations | ||
41 |
1.1 |
|
48 |
1.1 |
|
53 |
1.1 |
|
58 |
1.1 |
|
59 |
1.1 |
|
65 |
1.1 2.2 3.3 |
|
69 |
1.1 |
|
77 |
1.1 2.2 |
|
81 |
1.1 2.2 |
|
83 |
1.1 |
|
95 |
1.1 |
|
99 |
1.1 2.2 |
|
104 |
1.1 |
|
108 |
1.1 |
|
114 |
1.1 |