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());
+    }
 }