Skip to content

Commit c50b36c

Browse files
authored
Merge pull request #253 from bkuzmic/issue-243-FilteredUriBuilder
For #243: Adding filters to FilteredUriBuilder
2 parents 91e4e75 + f1419be commit c50b36c

File tree

5 files changed

+60
-55
lines changed

5 files changed

+60
-55
lines changed

src/main/java/com/amihaiemil/docker/FilteredUriBuilder.java

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,15 @@
2525
*/
2626
package com.amihaiemil.docker;
2727

28-
import org.apache.http.client.utils.URIBuilder;
29-
3028
import java.net.URI;
29+
import java.net.URISyntaxException;
30+
import java.util.List;
3131
import java.util.Map;
32+
import javax.json.Json;
33+
import javax.json.JsonArrayBuilder;
34+
import javax.json.JsonObjectBuilder;
35+
import org.apache.http.NameValuePair;
36+
import org.apache.http.client.utils.URIBuilder;
3237

3338
/**
3439
* {@link URIBuilder} with filtering.
@@ -43,10 +48,6 @@ final class FilteredUriBuilder extends URIBuilder {
4348
*/
4449
private final URIBuilder origin;
4550

46-
/**
47-
* Filters.
48-
*/
49-
private final Map<String, Iterable<String>> filters;
5051

5152
/**
5253
* Constructor.
@@ -57,11 +58,42 @@ final class FilteredUriBuilder extends URIBuilder {
5758
FilteredUriBuilder(final URIBuilder builder,
5859
final Map<String, Iterable<String>> filters){
5960
this.origin = builder;
60-
this.filters = filters;
61+
this.addFilters(filters);
6162
}
6263

6364
@Override
6465
public URI build() {
65-
throw new UnsupportedOperationException("filters not implemented yet");
66+
try {
67+
return this.origin.build();
68+
} catch (final URISyntaxException ex) {
69+
throw new IllegalStateException(
70+
"Unexpected error while building a URI!", ex
71+
);
72+
}
73+
}
74+
75+
@Override
76+
public List<NameValuePair> getQueryParams() {
77+
return this.origin.getQueryParams();
78+
}
79+
80+
/**
81+
* Adds a JSON encoded `filters` parameter.
82+
* @param filters Filters.
83+
*/
84+
private void addFilters(final Map<String, Iterable<String>> filters) {
85+
if (filters != null && !filters.isEmpty()) {
86+
final JsonObjectBuilder json = Json.createObjectBuilder();
87+
filters.forEach(
88+
(name, values) -> {
89+
final JsonArrayBuilder array = Json.createArrayBuilder();
90+
values.forEach(array::add);
91+
json.add(name, array);
92+
}
93+
);
94+
this.origin.addParameter("filters", json.build().toString());
95+
}
96+
97+
6698
}
6799
}

src/main/java/com/amihaiemil/docker/ListedImages.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,13 @@
2525
*/
2626
package com.amihaiemil.docker;
2727

28-
import org.apache.http.client.HttpClient;
29-
import org.apache.http.client.methods.HttpGet;
30-
3128
import java.net.URI;
3229
import java.util.Collections;
3330
import java.util.HashMap;
3431
import java.util.Iterator;
3532
import java.util.Map;
33+
import org.apache.http.client.HttpClient;
34+
import org.apache.http.client.methods.HttpGet;
3635

3736
/**
3837
* Listed images, which may have a filter applied.
@@ -75,9 +74,11 @@ final class ListedImages extends RtImages {
7574

7675
@Override
7776
public Iterator<Image> iterator() {
78-
final UncheckedUriBuilder uri = new UncheckedUriBuilder(
79-
super.baseUri().toString().concat("/json")
80-
).addFilters(this.filters);
77+
final FilteredUriBuilder uri = new FilteredUriBuilder(
78+
new UncheckedUriBuilder(
79+
super.baseUri().toString().concat("/json")
80+
),
81+
this.filters);
8182

8283
return new ResourcesIterator<>(
8384
super.client(),

src/main/java/com/amihaiemil/docker/ListedVolumes.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,9 @@ final class ListedVolumes extends RtVolumes {
7171

7272
@Override
7373
public Iterator<Volume> iterator() {
74-
final UncheckedUriBuilder uri = new UncheckedUriBuilder(
75-
super.baseUri().toString()
76-
).addFilters(this.filters);
77-
74+
final FilteredUriBuilder uri = new FilteredUriBuilder(
75+
new UncheckedUriBuilder(super.baseUri().toString()), this.filters
76+
);
7877
return new ResourcesIterator<>(
7978
super.client(),
8079
new HttpGet(

src/main/java/com/amihaiemil/docker/UncheckedUriBuilder.java

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,6 @@
2727

2828
import java.net.URI;
2929
import java.net.URISyntaxException;
30-
import java.util.Map;
31-
32-
import javax.json.Json;
33-
import javax.json.JsonArrayBuilder;
34-
import javax.json.JsonObjectBuilder;
35-
3630
import org.apache.http.client.utils.URIBuilder;
3731

3832
/**
@@ -63,33 +57,6 @@ public UncheckedUriBuilder addParameter(
6357
super.addParameter(name, value);
6458
return this;
6559
}
66-
67-
/**
68-
* Adds a JSON encoded `filters` parameter.
69-
*
70-
* @param filters Value of the filters.
71-
* @return A {@link UncheckedUriBuilder} instance.
72-
*
73-
* @todo #240:30min Finish FilteredUriBuilder implementation moving this
74-
* method to that class and uncommenting test in FilteredUriBuilderTests
75-
*/
76-
public UncheckedUriBuilder addFilters(
77-
final Map<String, Iterable<String>> filters
78-
) {
79-
if (filters != null && !filters.isEmpty()) {
80-
final JsonObjectBuilder json = Json.createObjectBuilder();
81-
filters.forEach(
82-
(name, values) -> {
83-
final JsonArrayBuilder array = Json.createArrayBuilder();
84-
values.forEach(array::add);
85-
json.add(name, array);
86-
}
87-
);
88-
this.addParameter("filters", json.build().toString());
89-
}
90-
91-
return this;
92-
}
9360

9461
@Override
9562
public URI build() {

src/test/java/com/amihaiemil/docker/FilteredUriBuilderTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@
2525
*/
2626
package com.amihaiemil.docker;
2727

28+
import java.util.Arrays;
2829
import java.util.HashMap;
30+
import java.util.Map;
2931
import org.apache.http.client.utils.URIBuilder;
3032
import org.hamcrest.MatcherAssert;
3133
import org.hamcrest.collection.IsIterableWithSize;
3234
import org.hamcrest.core.IsEqual;
33-
import org.junit.Ignore;
3435
import org.junit.Test;
3536

3637
/**
@@ -45,17 +46,22 @@ public class FilteredUriBuilderTest {
4546
* Tests if the {@link FilteredUriBuilder} can add filter parameters.
4647
*/
4748
@Test
48-
@Ignore
4949
public final void addFilterParameters() {
50+
final Map<String, Iterable<String>> filters = new HashMap<>();
51+
filters.put(
52+
"driver",
53+
Arrays.asList(
54+
"bridge"
55+
)
56+
);
5057
MatcherAssert.assertThat(
5158
"Did not added filter parameters to URI",
5259
new FilteredUriBuilder(
53-
new URIBuilder(), new HashMap<>()
60+
new URIBuilder(), filters
5461
).getQueryParams(),
5562
new IsIterableWithSize<>(
5663
new IsEqual<>(1)
5764
)
5865
);
59-
6066
}
6167
}

0 commit comments

Comments
 (0)