Skip to content

Commit 48453c3

Browse files
author
Piotr Buchman
committed
Refactoring + additional unit tests
1 parent 928a3a9 commit 48453c3

24 files changed

+349
-40
lines changed

query/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ project.evaluationDependsOn(":core")
1212
dependencies {
1313
compile project(':core')
1414
compile project(':java')
15-
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
15+
compile 'org.apache.commons:commons-lang3:3.8.1'
1616
testCompile 'com.fasterxml.jackson.core:jackson-databind:2.3.0'
1717
testCompile 'junit:junit:4.11'
1818
testCompile 'org.hamcrest:hamcrest-library:1.3'
1919
testCompile 'org.mockito:mockito-core:1.9.5'
20+
testCompile 'pl.pragmatists:JUnitParams:1.1.1'
2021
testCompile project(':core').sourceSets.test.output
2122
}
2223

query/src/main/java/io/keen/client/java/AbsoluteTimeframe.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
46
import org.apache.commons.lang3.builder.ToStringStyle;
57

@@ -70,4 +72,14 @@ public Map<String, Object> constructTimeframeArgs() {
7072
public String toString() {
7173
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
7274
}
75+
76+
@Override
77+
public boolean equals(Object obj) {
78+
return EqualsBuilder.reflectionEquals(this, obj);
79+
}
80+
81+
@Override
82+
public int hashCode() {
83+
return HashCodeBuilder.reflectionHashCode(this);
84+
}
7385
}

query/src/main/java/io/keen/client/java/CachedDatasetRequest.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,6 @@ Collection<String> getGroupByParams() {
6565
}
6666

6767
private Map<String, Object> queryArgs() throws IOException {
68-
if (indexByValues == null) {
69-
throw new IllegalArgumentException("index_by is required");
70-
}
71-
if (indexByValues.size() != datasetDefinition.getIndexBy().size()) {
72-
throw new IllegalArgumentException("Values for all index_by properties are required: " + datasetDefinition.getIndexBy());
73-
}
74-
if (timeframe == null) {
75-
throw new IllegalArgumentException("timeframe is required");
76-
}
77-
7868
Object timeframeAsArgs = timeframe.constructTimeframeArgs().get(KeenQueryConstants.TIMEFRAME);
7969

8070
HashMap<String, Object> queryArgs = new HashMap<String, Object>();

query/src/main/java/io/keen/client/java/CachedDatasetsClient.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import io.keen.client.java.result.IntervalResultValue;
44

55
import java.io.IOException;
6+
import java.util.Arrays;
67
import java.util.Collection;
78
import java.util.List;
89
import java.util.Map;
910

11+
import static org.apache.commons.lang3.StringUtils.isBlank;
12+
1013
class CachedDatasetsClient implements CachedDatasets {
1114

1215
private KeenQueryClient keenQueryClient;
@@ -17,22 +20,49 @@ class CachedDatasetsClient implements CachedDatasets {
1720

1821
@Override
1922
public DatasetDefinition create(String datasetName, String displayName, DatasetQuery query, Collection<String> indexBy) throws IOException {
20-
KeenQueryRequest request = CachedDatasetRequest.creationRequest(datasetName, displayName, query, indexBy);
23+
if (isBlank(datasetName)) {
24+
throw new IllegalArgumentException("Dataset name cannot be blank");
25+
}
26+
if (isBlank(displayName)) {
27+
throw new IllegalArgumentException("Display name cannot be blank");
28+
}
29+
if (query == null) {
30+
throw new IllegalArgumentException("Dataset query is required");
31+
}
32+
if (indexBy == null || indexBy.isEmpty()) {
33+
throw new IllegalArgumentException("At least one index property is required");
34+
}
2135

36+
KeenQueryRequest request = CachedDatasetRequest.creationRequest(datasetName, displayName, query, indexBy);
2237
return DatasetDefinition.fromMap(keenQueryClient.getMapResponse(request));
2338
}
2439

2540
@Override
2641
public DatasetDefinition getDefinition(String datasetName) throws IOException {
27-
KeenQueryRequest request = CachedDatasetRequest.definitionRequest(datasetName);
42+
if (isBlank(datasetName)) {
43+
throw new IllegalArgumentException("Dataset name cannot be blank");
44+
}
2845

46+
KeenQueryRequest request = CachedDatasetRequest.definitionRequest(datasetName);
2947
return DatasetDefinition.fromMap(keenQueryClient.getMapResponse(request));
3048
}
3149

3250
@Override
3351
public List<IntervalResultValue> getResults(DatasetDefinition datasetDefinition, Map<String, ?> indexByValues, Timeframe timeframe) throws IOException {
34-
KeenQueryRequest request = CachedDatasetRequest.resultsRequest(datasetDefinition, indexByValues, timeframe);
52+
if (datasetDefinition == null) {
53+
throw new IllegalArgumentException("Dataset definition is required");
54+
}
55+
if (indexByValues == null || indexByValues.isEmpty()) {
56+
throw new IllegalArgumentException("Values for all index_by properties are required: " + datasetDefinition.getIndexBy());
57+
}
58+
if (!Arrays.equals(indexByValues.keySet().toArray(), datasetDefinition.getIndexBy().toArray())) {
59+
throw new IllegalArgumentException("Values for the following index_by properties must be present: " + datasetDefinition.getIndexBy() + ". Found for: " + indexByValues.keySet());
60+
}
61+
if (timeframe == null) {
62+
throw new IllegalArgumentException("Timeframe is required");
63+
}
3564

65+
KeenQueryRequest request = CachedDatasetRequest.resultsRequest(datasetDefinition, indexByValues, timeframe);
3666
return keenQueryClient.execute(request).getIntervalResults();
3767
}
3868

@@ -44,14 +74,16 @@ public List<DatasetDefinition> getDefinitionsByProject() throws IOException {
4474
@Override
4575
public List<DatasetDefinition> getDefinitionsByProject(Integer limit, String afterName) throws IOException {
4676
KeenQueryRequest request = CachedDatasetRequest.definitionsByProjectRequest(limit, afterName);
47-
4877
return DatasetDefinition.definitionsFromMap(keenQueryClient.getMapResponse(request));
4978
}
5079

5180
@Override
5281
public boolean delete(String datasetName) throws IOException {
53-
KeenQueryRequest request = CachedDatasetRequest.deletionRequest(datasetName);
82+
if (isBlank(datasetName)) {
83+
throw new IllegalArgumentException("Dataset name cannot be blank");
84+
}
5485

86+
KeenQueryRequest request = CachedDatasetRequest.deletionRequest(datasetName);
5587
return keenQueryClient.getMapResponse(request).isEmpty();
5688
}
5789

query/src/main/java/io/keen/client/java/DatasetDefinition.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
46
import org.apache.commons.lang3.builder.ToStringStyle;
57

@@ -99,6 +101,15 @@ public String toString() {
99101
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
100102
}
101103

104+
@Override
105+
public boolean equals(Object obj) {
106+
return EqualsBuilder.reflectionEquals(this, obj);
107+
}
108+
109+
@Override
110+
public int hashCode() {
111+
return HashCodeBuilder.reflectionHashCode(this);
112+
}
102113

103114
public static final class DatasetDefinitionBuilder {
104115
private String datasetName;

query/src/main/java/io/keen/client/java/DatasetQuery.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
46
import org.apache.commons.lang3.builder.ToStringStyle;
57

@@ -159,6 +161,15 @@ public String toString() {
159161
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
160162
}
161163

164+
@Override
165+
public boolean equals(Object obj) {
166+
return EqualsBuilder.reflectionEquals(this, obj);
167+
}
168+
169+
@Override
170+
public int hashCode() {
171+
return HashCodeBuilder.reflectionHashCode(this);
172+
}
162173

163174
public static final class DatasetQueryBuilder {
164175
private String projectId;

query/src/main/java/io/keen/client/java/Filter.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
46
import org.apache.commons.lang3.builder.ToStringStyle;
57

@@ -66,4 +68,14 @@ Map<String, Object> constructParameterRequestArgs() {
6668
public String toString() {
6769
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
6870
}
71+
72+
@Override
73+
public boolean equals(Object obj) {
74+
return EqualsBuilder.reflectionEquals(this, obj);
75+
}
76+
77+
@Override
78+
public int hashCode() {
79+
return HashCodeBuilder.reflectionHashCode(this);
80+
}
6981
}

query/src/main/java/io/keen/client/java/Percentile.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
5+
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
6+
import org.apache.commons.lang3.builder.ToStringStyle;
7+
38
/**
49
* A Percentile representation enforcing the format and range specified by the Keen APIs.
510
*
@@ -105,4 +110,19 @@ private static int getNumDecimalPlaces(double doubleVal) {
105110

106111
return numDecimalPlaces;
107112
}
113+
114+
@Override
115+
public String toString() {
116+
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
117+
}
118+
119+
@Override
120+
public boolean equals(Object obj) {
121+
return EqualsBuilder.reflectionEquals(this, obj);
122+
}
123+
124+
@Override
125+
public int hashCode() {
126+
return HashCodeBuilder.reflectionHashCode(this);
127+
}
108128
}

query/src/main/java/io/keen/client/java/RelativeTimeframe.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.keen.client.java;
22

3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
46
import org.apache.commons.lang3.builder.ToStringStyle;
57

@@ -80,4 +82,14 @@ public Map<String, Object> constructTimeframeArgs() {
8082
public String toString() {
8183
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
8284
}
85+
86+
@Override
87+
public boolean equals(Object obj) {
88+
return EqualsBuilder.reflectionEquals(this, obj);
89+
}
90+
91+
@Override
92+
public int hashCode() {
93+
return HashCodeBuilder.reflectionHashCode(this);
94+
}
8395
}

query/src/main/java/io/keen/client/java/RequestUrlBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ URL getAnalysisUrl(String projectId, String analysisPath) throws KeenQueryClient
6161
}
6262
}
6363

64-
URL getDatasetsUrl(String projectId, String datasetName, boolean fetchResults, Map<String, Object> queryParams) throws KeenQueryClientException {
64+
URL getDatasetsUrl(String projectId, String datasetName, boolean fetchResults, Map<String, ?> queryParams) throws KeenQueryClientException {
6565
try {
6666
StringBuilder url = new StringBuilder(String.format(Locale.US,
6767
"%s/%s/projects/%s/%s",
@@ -80,7 +80,7 @@ URL getDatasetsUrl(String projectId, String datasetName, boolean fetchResults, M
8080

8181
if (queryParams != null && !queryParams.isEmpty()) {
8282
StringBuilder query = new StringBuilder();
83-
for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
83+
for (Map.Entry<String, ?> entry : queryParams.entrySet()) {
8484
query.append(String.format("%s=", URLEncoder.encode(entry.getKey(), "UTF-8")));
8585
query.append(String.format("%s&", URLEncoder.encode(entry.getValue().toString(), "UTF-8")));
8686
}

0 commit comments

Comments
 (0)