diff --git a/main/commons/src/main/java/org/cryptomator/common/AutoClosingStream.java b/main/commons/src/main/java/org/cryptomator/common/AutoClosingStream.java new file mode 100644 index 000000000..02207009a --- /dev/null +++ b/main/commons/src/main/java/org/cryptomator/common/AutoClosingStream.java @@ -0,0 +1,173 @@ +package org.cryptomator.common; + +import java.util.Comparator; +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.BinaryOperator; +import java.util.function.Consumer; +import java.util.function.IntFunction; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.DoubleStream; +import java.util.stream.IntStream; +import java.util.stream.LongStream; +import java.util.stream.Stream; + +/** + *
+ * A Stream which is automatically closed on after execution of a terminal operation. + *
+ * The stream keeps its auto closing behavior on invocations of intermediate operations as long as no conversion to an {@link IntStream}, {@link LongStream} or {@link DoubleStream} occurs.
+ *
+ * @author Markus Kreusch
+ */
+public final class AutoClosingStream Stream wrapped(Stream other) {
+ if (getClass().isInstance(other)) {
+ return other;
+ } else {
+ return wrapper.wrap(other);
+ }
+ }
+
+ public Iterator Stream wrap(Stream other);
+
+ }
+
+}
diff --git a/main/commons/src/test/java/org/cryptomator/common/AutoClosingStreamTest.java b/main/commons/src/test/java/org/cryptomator/common/AutoClosingStreamTest.java
new file mode 100644
index 000000000..e831ecefa
--- /dev/null
+++ b/main/commons/src/test/java/org/cryptomator/common/AutoClosingStreamTest.java
@@ -0,0 +1,59 @@
+package org.cryptomator.common;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InOrder;
+
+@SuppressWarnings("unchecked")
+public class AutoClosingStreamTest {
+
+ private Stream