You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2018/03/01 14:44:12 UTC
svn commit: r1825653 - in /jackrabbit/oak/trunk/oak-store-document/src:
main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java
Author: mreutegg
Date: Thu Mar 1 14:44:12 2018
New Revision: 1825653
URL: http://svn.apache.org/viewvc?rev=1825653&view=rev
Log:
OAK-5922: Utils.abortingIterable should implement Closeable
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java?rev=1825653&r1=1825652&r2=1825653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java Thu Mar 1 14:44:12 2018
@@ -808,34 +808,33 @@ public class Utils {
/**
* Wraps the given iterable and aborts iteration over elements when the
- * predicate on an element evaluates to {@code false}.
+ * predicate on an element evaluates to {@code false}. Calling
+ * {@code close()} on the returned iterable will close the passed iterable
+ * if it is {@link Closeable}.
*
* @param iterable the iterable to wrap.
* @param p the predicate.
* @return the aborting iterable.
*/
- public static <T> Iterable<T> abortingIterable(final Iterable<T> iterable,
- final Predicate<T> p) {
+ public static <T> CloseableIterable<T> abortingIterable(Iterable<T> iterable,
+ Predicate<T> p) {
checkNotNull(iterable);
checkNotNull(p);
- return new Iterable<T>() {
- @Override
- public Iterator<T> iterator() {
- final Iterator<T> it = iterable.iterator();
- return new AbstractIterator<T>() {
- @Override
- protected T computeNext() {
- if (it.hasNext()) {
- T next = it.next();
- if (p.apply(next)) {
- return next;
- }
+ return new CloseableIterable<T>(() -> {
+ final Iterator<T> it = iterable.iterator();
+ return new AbstractIterator<T>() {
+ @Override
+ protected T computeNext() {
+ if (it.hasNext()) {
+ T next = it.next();
+ if (p.apply(next)) {
+ return next;
}
- return endOfData();
}
- };
- }
- };
+ return endOfData();
+ }
+ };
+ }, () -> closeIfCloseable(iterable));
}
/**
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java?rev=1825653&r1=1825652&r2=1825653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/UtilsTest.java Thu Mar 1 14:44:12 2018
@@ -16,7 +16,9 @@
*/
package org.apache.jackrabbit.oak.plugins.document.util;
+import java.util.Collections;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -318,4 +320,13 @@ public class UtilsTest {
assertFalse(Utils.isLocalChange(new RevisionVector(r11, r12), new RevisionVector(r21, r22), 1));
assertTrue(Utils.isLocalChange(new RevisionVector(r11, r12), new RevisionVector(r21, r12), 1));
}
+
+ @Test
+ public void abortingIterableIsCloseable() throws Exception {
+ AtomicBoolean closed = new AtomicBoolean(false);
+ Iterable<String> iterable = CloseableIterable.wrap(
+ Collections.emptyList(), () -> closed.set(true));
+ Utils.closeIfCloseable(Utils.abortingIterable(iterable, s -> true));
+ assertTrue(closed.get());
+ }
}