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 3a67213 Add constructor accepting collection of file alteration observers (#236) 3a67213 is described below commit 3a67213d2e297a8cab9e18860e344de51931f268 Author: nstdspace <maksim.rotm...@gmail.com> AuthorDate: Sat May 22 14:28:20 2021 +0200 Add constructor accepting collection of file alteration observers (#236) * Add constructor accepting collection of file alteration observers * Add missing whitespace * Use optionals for null-safe implementation * Add unit-tests for collection constructor * Add missing param descriptions Co-authored-by: Rotmann, Maksim <maksim.rotm...@soptim.de> --- .../commons/io/monitor/FileAlterationMonitor.java | 18 ++++++++++++++++ .../io/monitor/FileAlterationMonitorTestCase.java | 25 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java b/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java index 48fceac..534ea8d 100644 --- a/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java +++ b/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java @@ -16,7 +16,10 @@ */ package org.apache.commons.io.monitor; +import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ThreadFactory; @@ -53,6 +56,21 @@ public final class FileAlterationMonitor implements Runnable { } /** + * Wrapper constructor for {@link #FileAlterationMonitor(long, FileAlterationObserver...)}. + * Constructs a monitor with the specified interval and collection of observers. + * + * @param interval The amount of time in milliseconds to wait between + * checks of the file system + * @param observers The collection of observers to add to the monitor + */ + public FileAlterationMonitor(final long interval, final Collection<FileAlterationObserver> observers) { + this(interval, Optional.ofNullable(observers) + .orElse(Collections.emptyList()) + .toArray(new FileAlterationObserver[0]) + ); + } + + /** * Constructs a monitor with the specified interval and set of observers. * * @param interval The amount of time in milliseconds to wait between diff --git a/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java b/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java index 15bdf6e..5167352 100644 --- a/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java +++ b/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java @@ -53,6 +53,31 @@ public class FileAlterationMonitorTestCase extends AbstractMonitorTestCase { assertEquals(10000, monitor.getInterval(), "Interval"); } + @Test + public void testCollectionConstructorShouldDoNothingWithNullCollection() { + Collection<FileAlterationObserver> observers = null; + final FileAlterationMonitor monitor = new FileAlterationMonitor(0, observers); + assertFalse(monitor.getObservers().iterator().hasNext()); + } + + @Test + public void testCollectionConstructorShouldDoNothingWithNullObservers() { + Collection<FileAlterationObserver> observers = new ArrayList<>(5); + final FileAlterationMonitor monitor = new FileAlterationMonitor(0, observers); + assertFalse(monitor.getObservers().iterator().hasNext()); + } + + @Test + public void testCollectionConstructor() { + Collection<FileAlterationObserver> observers = new ArrayList<>(); + FileAlterationObserver observer = new FileAlterationObserver("foo"); + observers.add(observer); + + FileAlterationMonitor monitor = new FileAlterationMonitor(0, observers); + Iterator<FileAlterationObserver> iterator = monitor.getObservers().iterator(); + assertEquals(observer, iterator.next()); + } + /** * Test add/remove observers. */