From eedc2ae68c9cb1b847640f587fb3273fbbea9703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Sat, 11 Feb 2017 11:56:40 +0100 Subject: [PATCH] Use functional interface for ResourceIterator --- .../org/shredzone/acme4j/Registration.java | 14 ++--------- .../acme4j/connector/ResourceIterator.java | 24 +++++++------------ .../connector/ResourceIteratorTest.java | 9 ++----- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Registration.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Registration.java index 00a5fd81..60e18de9 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Registration.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Registration.java @@ -125,12 +125,7 @@ public class Registration extends AcmeResource { public Iterator getAuthorizations() throws AcmeException { LOG.debug("getAuthorizations"); load(); - return new ResourceIterator(getSession(), KEY_AUTHORIZATIONS, authorizations) { - @Override - protected Authorization create(Session session, URI uri) { - return Authorization.bind(session, uri); - } - }; + return new ResourceIterator<>(getSession(), KEY_AUTHORIZATIONS, authorizations, Authorization::bind); } /** @@ -147,12 +142,7 @@ public class Registration extends AcmeResource { public Iterator getCertificates() throws AcmeException { LOG.debug("getCertificates"); load(); - return new ResourceIterator(getSession(), KEY_CERTIFICATES, certificates) { - @Override - protected Certificate create(Session session, URI uri) { - return Certificate.bind(session, uri); - } - }; + return new ResourceIterator<>(getSession(), KEY_CERTIFICATES, certificates, Certificate::bind); } /** diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java index d83ff9b2..e5d25606 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java @@ -20,6 +20,7 @@ import java.util.Deque; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Objects; +import java.util.function.BiFunction; import org.shredzone.acme4j.AcmeResource; import org.shredzone.acme4j.Session; @@ -34,11 +35,12 @@ import org.shredzone.acme4j.util.JSON; * @param * {@link AcmeResource} type to iterate over */ -public abstract class ResourceIterator implements Iterator { +public class ResourceIterator implements Iterator { private final Session session; private final String field; private final Deque uriList = new ArrayDeque<>(); + private final BiFunction creator; private boolean eol = false; private URI nextUri; @@ -51,11 +53,15 @@ public abstract class ResourceIterator implements Iterat * Field name to be used in the JSON response * @param start * URI of the first JSON array, may be {@code null} for an empty iterator + * @param creator + * Creator for an {@link AcmeResource} that is bound to the given + * {@link Session} and {@link URI}. */ - public ResourceIterator(Session session, String field, URI start) { + public ResourceIterator(Session session, String field, URI start, BiFunction creator) { this.session = Objects.requireNonNull(session, "session"); this.field = Objects.requireNonNull(field, "field"); this.nextUri = start; + this.creator = Objects.requireNonNull(creator, "creator"); } /** @@ -101,7 +107,7 @@ public abstract class ResourceIterator implements Iterat throw new NoSuchElementException("no more " + field); } - return create(session, next); + return creator.apply(session, next); } /** @@ -112,18 +118,6 @@ public abstract class ResourceIterator implements Iterat throw new UnsupportedOperationException("cannot remove " + field); } - /** - * Creates a new {@link AcmeResource} object by binding it to the {@link Session} and - * using the given {@link URI}. - * - * @param session - * {@link Session} to bind the object to - * @param uri - * {@link URI} of the resource - * @return Created object - */ - protected abstract T create(Session session, URI uri); - /** * Fetches the next batch of URIs. Handles exceptions. Does nothing if there is no * URI of the next batch. diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/ResourceIteratorTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/ResourceIteratorTest.java index 4f4c5765..8a87b193 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/ResourceIteratorTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/ResourceIteratorTest.java @@ -31,8 +31,8 @@ import org.shredzone.acme4j.Authorization; import org.shredzone.acme4j.Session; import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.provider.TestableConnectionProvider; -import org.shredzone.acme4j.util.JSONBuilder; import org.shredzone.acme4j.util.JSON; +import org.shredzone.acme4j.util.JSONBuilder; /** * Unit test for {@link ResourceIterator}. @@ -167,12 +167,7 @@ public class ResourceIteratorTest { provider.close(); - return new ResourceIterator(session, TYPE, first) { - @Override - protected Authorization create(Session session, URI uri) { - return Authorization.bind(session, uri); - } - }; + return new ResourceIterator<>(session, TYPE, first, Authorization::bind); } }