From f1419bef86c8f84c7a3eaceeaeef44ca37a123a1 Mon Sep 17 00:00:00 2001 From: Boris Kuzmic Date: Wed, 2 Jan 2019 15:10:51 +0100 Subject: [PATCH] Adding filters to FilteredUriBuilder --- .../amihaiemil/docker/FilteredUriBuilder.java | 48 +++++++++++++++---- .../com/amihaiemil/docker/ListedImages.java | 13 ++--- .../com/amihaiemil/docker/ListedVolumes.java | 7 ++- .../docker/UncheckedUriBuilder.java | 33 ------------- .../docker/FilteredUriBuilderTest.java | 14 ++++-- 5 files changed, 60 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/amihaiemil/docker/FilteredUriBuilder.java b/src/main/java/com/amihaiemil/docker/FilteredUriBuilder.java index 44091d50..277c5b01 100644 --- a/src/main/java/com/amihaiemil/docker/FilteredUriBuilder.java +++ b/src/main/java/com/amihaiemil/docker/FilteredUriBuilder.java @@ -25,10 +25,15 @@ */ package com.amihaiemil.docker; -import org.apache.http.client.utils.URIBuilder; - import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; import java.util.Map; +import javax.json.Json; +import javax.json.JsonArrayBuilder; +import javax.json.JsonObjectBuilder; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URIBuilder; /** * {@link URIBuilder} with filtering. @@ -43,10 +48,6 @@ final class FilteredUriBuilder extends URIBuilder { */ private final URIBuilder origin; - /** - * Filters. - */ - private final Map> filters; /** * Constructor. @@ -57,11 +58,42 @@ final class FilteredUriBuilder extends URIBuilder { FilteredUriBuilder(final URIBuilder builder, final Map> filters){ this.origin = builder; - this.filters = filters; + this.addFilters(filters); } @Override public URI build() { - throw new UnsupportedOperationException("filters not implemented yet"); + try { + return this.origin.build(); + } catch (final URISyntaxException ex) { + throw new IllegalStateException( + "Unexpected error while building a URI!", ex + ); + } + } + + @Override + public List getQueryParams() { + return this.origin.getQueryParams(); + } + + /** + * Adds a JSON encoded `filters` parameter. + * @param filters Filters. + */ + private void addFilters(final Map> filters) { + if (filters != null && !filters.isEmpty()) { + final JsonObjectBuilder json = Json.createObjectBuilder(); + filters.forEach( + (name, values) -> { + final JsonArrayBuilder array = Json.createArrayBuilder(); + values.forEach(array::add); + json.add(name, array); + } + ); + this.origin.addParameter("filters", json.build().toString()); + } + + } } diff --git a/src/main/java/com/amihaiemil/docker/ListedImages.java b/src/main/java/com/amihaiemil/docker/ListedImages.java index 0b83e19e..3a66bdd1 100644 --- a/src/main/java/com/amihaiemil/docker/ListedImages.java +++ b/src/main/java/com/amihaiemil/docker/ListedImages.java @@ -25,14 +25,13 @@ */ package com.amihaiemil.docker; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; - import java.net.URI; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; /** * Listed images, which may have a filter applied. @@ -75,9 +74,11 @@ final class ListedImages extends RtImages { @Override public Iterator iterator() { - final UncheckedUriBuilder uri = new UncheckedUriBuilder( - super.baseUri().toString().concat("/json") - ).addFilters(this.filters); + final FilteredUriBuilder uri = new FilteredUriBuilder( + new UncheckedUriBuilder( + super.baseUri().toString().concat("/json") + ), + this.filters); return new ResourcesIterator<>( super.client(), diff --git a/src/main/java/com/amihaiemil/docker/ListedVolumes.java b/src/main/java/com/amihaiemil/docker/ListedVolumes.java index b567a7e5..969031f4 100644 --- a/src/main/java/com/amihaiemil/docker/ListedVolumes.java +++ b/src/main/java/com/amihaiemil/docker/ListedVolumes.java @@ -71,10 +71,9 @@ final class ListedVolumes extends RtVolumes { @Override public Iterator iterator() { - final UncheckedUriBuilder uri = new UncheckedUriBuilder( - super.baseUri().toString() - ).addFilters(this.filters); - + final FilteredUriBuilder uri = new FilteredUriBuilder( + new UncheckedUriBuilder(super.baseUri().toString()), this.filters + ); return new ResourcesIterator<>( super.client(), new HttpGet( diff --git a/src/main/java/com/amihaiemil/docker/UncheckedUriBuilder.java b/src/main/java/com/amihaiemil/docker/UncheckedUriBuilder.java index 6ca3f756..80c960d2 100644 --- a/src/main/java/com/amihaiemil/docker/UncheckedUriBuilder.java +++ b/src/main/java/com/amihaiemil/docker/UncheckedUriBuilder.java @@ -27,12 +27,6 @@ import java.net.URI; import java.net.URISyntaxException; -import java.util.Map; - -import javax.json.Json; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObjectBuilder; - import org.apache.http.client.utils.URIBuilder; /** @@ -63,33 +57,6 @@ public UncheckedUriBuilder addParameter( super.addParameter(name, value); return this; } - - /** - * Adds a JSON encoded `filters` parameter. - * - * @param filters Value of the filters. - * @return A {@link UncheckedUriBuilder} instance. - * - * @todo #240:30min Finish FilteredUriBuilder implementation moving this - * method to that class and uncommenting test in FilteredUriBuilderTests - */ - public UncheckedUriBuilder addFilters( - final Map> filters - ) { - if (filters != null && !filters.isEmpty()) { - final JsonObjectBuilder json = Json.createObjectBuilder(); - filters.forEach( - (name, values) -> { - final JsonArrayBuilder array = Json.createArrayBuilder(); - values.forEach(array::add); - json.add(name, array); - } - ); - this.addParameter("filters", json.build().toString()); - } - - return this; - } @Override public URI build() { diff --git a/src/test/java/com/amihaiemil/docker/FilteredUriBuilderTest.java b/src/test/java/com/amihaiemil/docker/FilteredUriBuilderTest.java index b5f625e7..279cec63 100644 --- a/src/test/java/com/amihaiemil/docker/FilteredUriBuilderTest.java +++ b/src/test/java/com/amihaiemil/docker/FilteredUriBuilderTest.java @@ -25,12 +25,13 @@ */ package com.amihaiemil.docker; +import java.util.Arrays; import java.util.HashMap; +import java.util.Map; import org.apache.http.client.utils.URIBuilder; import org.hamcrest.MatcherAssert; import org.hamcrest.collection.IsIterableWithSize; import org.hamcrest.core.IsEqual; -import org.junit.Ignore; import org.junit.Test; /** @@ -45,17 +46,22 @@ public class FilteredUriBuilderTest { * Tests if the {@link FilteredUriBuilder} can add filter parameters. */ @Test - @Ignore public final void addFilterParameters() { + final Map> filters = new HashMap<>(); + filters.put( + "driver", + Arrays.asList( + "bridge" + ) + ); MatcherAssert.assertThat( "Did not added filter parameters to URI", new FilteredUriBuilder( - new URIBuilder(), new HashMap<>() + new URIBuilder(), filters ).getQueryParams(), new IsIterableWithSize<>( new IsEqual<>(1) ) ); - } }