You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/01/30 16:15:58 UTC

[commons-io] branch master updated: Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 59cf9ef  Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
59cf9ef is described below

commit 59cf9efdb1c35269b463973ada9945f0d6d7747f
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 30 11:15:53 2021 -0500

    Add and use ObservableInputStream.ObservableInputStream(InputStream,
    Observer...).
---
 src/changes/changes.xml                            |  3 ++
 .../input/MessageDigestCalculatingInputStream.java |  9 ++---
 .../commons/io/input/ObservableInputStream.java    | 25 ++++++++++++-
 .../io/input/ObservableInputStreamTest.java        | 43 +++++++++++++++++++++-
 4 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7ced17b..6bbaeee 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -157,6 +157,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="add" due-to="Gary Gregory">
         Add and use IOExceptionList(String, List).
       </action>
+      <action dev="ggregory" type="add" due-to="Gary Gregory">
+        Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
+      </action>
       <!-- UPDATES -->
       <action dev="ggregory" type="update" due-to="Dependabot">
         Update junit-jupiter from 5.6.2 to 5.7.0 #153.
diff --git a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
index da71ead..1e9d46f 100644
--- a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
@@ -61,12 +61,11 @@ public class MessageDigestCalculatingInputStream extends ObservableInputStream {
     /** Creates a new instance, which calculates a signature on the given stream,
      * using the given {@link MessageDigest}.
      * @param inputStream the stream to calculate the message digest for
-     * @param MessageDigest the message digest to use
+     * @param messageDigest the message digest to use
      */
-    public MessageDigestCalculatingInputStream(final InputStream inputStream, final MessageDigest MessageDigest) {
-        super(inputStream);
-        this.messageDigest = MessageDigest;
-        add(new MessageDigestMaintainingObserver(MessageDigest));
+    public MessageDigestCalculatingInputStream(final InputStream inputStream, final MessageDigest messageDigest) {
+        super(inputStream, new MessageDigestMaintainingObserver(messageDigest));
+        this.messageDigest = messageDigest;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
index fab72be..22edfdb 100644
--- a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
@@ -21,6 +21,7 @@ import static org.apache.commons.io.IOUtils.EOF;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
@@ -100,7 +101,7 @@ public class ObservableInputStream extends ProxyInputStream {
         }
     }
 
-    private final List<Observer> observers = new ArrayList<>();
+    private final List<Observer> observers;
 
     /**
      * Creates a new ObservableInputStream for the given InputStream.
@@ -108,7 +109,29 @@ public class ObservableInputStream extends ProxyInputStream {
      * @param inputStream the input stream to proxy.
      */
     public ObservableInputStream(final InputStream inputStream) {
+        this(inputStream, new ArrayList<>());
+    }
+
+    /**
+     * Creates a new ObservableInputStream for the given InputStream.
+     *
+     * @param inputStream the input stream to proxy.
+     * @param observers List of callbacks.
+     */
+    private ObservableInputStream(final InputStream inputStream, final List<Observer> observers) {
         super(inputStream);
+        this.observers = observers;
+    }
+
+    /**
+     * Creates a new ObservableInputStream for the given InputStream.
+     *
+     * @param inputStream the input stream to proxy.
+     * @param observers List of callbacks.
+     * @since 2.9.0
+     */
+    public ObservableInputStream(final InputStream inputStream, final Observer... observers) {
+        this(inputStream, Arrays.asList(observers));
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
index cb5c43a..e888528 100644
--- a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
@@ -17,6 +17,7 @@
 package org.apache.commons.io.input;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -28,6 +29,7 @@ import org.apache.commons.io.input.ObservableInputStream.Observer;
 import org.junit.jupiter.api.Test;
 
 public class ObservableInputStreamTest {
+
     private static class LastByteKeepingObserver extends Observer {
         private int lastByteSeen = -1;
         private boolean finished;
@@ -70,7 +72,7 @@ public class ObservableInputStreamTest {
      * Tests that {@link Observer#data(int)} is called.
      */
     @Test
-    public void testDataByteCalled() throws Exception {
+    public void testDataByteCalled_add() throws Exception {
         final byte[] buffer = MessageDigestCalculatingInputStreamTest
                 .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
         final LastByteKeepingObserver lko = new LastByteKeepingObserver();
@@ -99,6 +101,37 @@ public class ObservableInputStreamTest {
     }
 
     /**
+     * Tests that {@link Observer#data(int)} is called.
+     */
+    @Test
+    public void testDataByteCalled_ctor() throws Exception {
+        final byte[] buffer = MessageDigestCalculatingInputStreamTest
+                .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
+        final LastByteKeepingObserver lko = new LastByteKeepingObserver();
+        try (final ObservableInputStream ois = new ObservableInputStream(new ByteArrayInputStream(buffer), lko)) {
+            assertEquals(-1, lko.lastByteSeen);
+            ois.read();
+            assertNotEquals(-1, lko.lastByteSeen);
+            assertFalse(lko.finished);
+            assertFalse(lko.closed);
+            for (int i = 1; i < buffer.length; i++) {
+                final int result = ois.read();
+                assertEquals((byte) result, buffer[i]);
+                assertEquals(result, lko.lastByteSeen);
+                assertFalse(lko.finished);
+                assertFalse(lko.closed);
+            }
+            final int result = ois.read();
+            assertEquals(-1, result);
+            assertTrue(lko.finished);
+            assertFalse(lko.closed);
+            ois.close();
+            assertTrue(lko.finished);
+            assertTrue(lko.closed);
+        }
+    }
+
+    /**
      * Tests that {@link Observer#data(byte[],int,int)} is called.
      */
     @Test
@@ -137,4 +170,12 @@ public class ObservableInputStreamTest {
         }
     }
 
+    @Test
+    public void testTimestamped() {
+        final byte[] buffer = MessageDigestCalculatingInputStreamTest
+            .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
+    final ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+    final ObservableInputStream ois = new ObservableInputStream(bais);
+        
+    }
 }