Author: niallp
Date: Fri Oct 15 00:56:13 2010
New Revision: 1022799
URL: http://svn.apache.org/viewvc?rev=1022799&view=rev
Log:
Guard against trying to start am already running monitor or stop one not
running and add an accessor for the interval
Modified:
commons/proper/io/trunk/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
commons/proper/io/trunk/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java
Modified:
commons/proper/io/trunk/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
URL:
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java?rev=1022799&r1=1022798&r2=1022799&view=diff
==============================================================================
---
commons/proper/io/trunk/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
(original)
+++
commons/proper/io/trunk/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
Fri Oct 15 00:56:13 2010
@@ -52,6 +52,15 @@ public final class FileAlterationMonitor
}
/**
+ * Return the interval.
+ *
+ * @return the interval
+ */
+ public long getInterval() {
+ return interval;
+ }
+
+ /**
* Construct a monitor with the specified interval and set of observers.
*
* @param interval The amount of time in miliseconds to wait between
@@ -105,7 +114,10 @@ public final class FileAlterationMonitor
*
* @throws Exception if an error occurs initializing the observer
*/
- public void start() throws Exception {
+ public synchronized void start() throws Exception {
+ if (running) {
+ throw new IllegalStateException("Monitor is already running");
+ }
for (FileAlterationObserver observer : observers) {
observer.initialize();
}
@@ -119,7 +131,10 @@ public final class FileAlterationMonitor
*
* @throws Exception if an error occurs initializing the observer
*/
- public void stop() throws Exception {
+ public synchronized void stop() throws Exception {
+ if (running == false) {
+ throw new IllegalStateException("Monitor is not running");
+ }
running = false;
try {
thread.join(interval);
Modified:
commons/proper/io/trunk/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java
URL:
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java?rev=1022799&r1=1022798&r2=1022799&view=diff
==============================================================================
---
commons/proper/io/trunk/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java
(original)
+++
commons/proper/io/trunk/src/test/java/org/apache/commons/io/monitor/FileAlterationMonitorTestCase.java
Fri Oct 15 00:56:13 2010
@@ -18,6 +18,7 @@ package org.apache.commons.io.monitor;
import java.io.File;
import java.util.Collection;
+import java.util.Iterator;
/**
* {...@link FileAlterationMonitor} Test Case.
@@ -41,14 +42,64 @@ public class FileAlterationMonitorTestCa
}
/**
+ * Test default constructor.
+ */
+ public void testDefaultConstructor() {
+ FileAlterationMonitor monitor = new FileAlterationMonitor();
+ assertEquals("Interval", 10000, monitor.getInterval());
+ }
+
+ /**
+ * Test add/remove observers.
+ */
+ public void testAddRemoveObservers() {
+ FileAlterationObserver[] observers = null;
+ FileAlterationMonitor monitor = null;
+
+ // Null Observers
+ monitor = new FileAlterationMonitor(123, observers);
+ assertEquals("Interval", 123, monitor.getInterval());
+ assertFalse("Observers[1]",
monitor.getObservers().iterator().hasNext());
+
+ // Null Observer
+ observers = new FileAlterationObserver[1]; // observer is null
+ monitor = new FileAlterationMonitor(456, observers);
+ assertFalse("Observers[2]",
monitor.getObservers().iterator().hasNext());
+
+ // Null Observer
+ monitor.addObserver(null);
+ assertFalse("Observers[3]",
monitor.getObservers().iterator().hasNext());
+ monitor.removeObserver(null);
+
+ // Add Observer
+ FileAlterationObserver observer = new FileAlterationObserver("foo");
+ monitor.addObserver(observer);
+ Iterator<FileAlterationObserver> it =
monitor.getObservers().iterator();
+ assertTrue("Observers[4]", it.hasNext());
+ assertEquals("Added", observer, it.next());
+ assertFalse("Observers[5]", it.hasNext());
+
+ // Remove Observer
+ monitor.removeObserver(observer);
+ assertFalse("Observers[6]",
monitor.getObservers().iterator().hasNext());
+ }
+
+ /**
* Test checkAndNotify() method
*/
public void testMonitor() {
try {
long interval = 100;
FileAlterationMonitor monitor = new
FileAlterationMonitor(interval, observer);
+ assertEquals("Interval", interval, monitor.getInterval());
monitor.start();
+ try {
+ monitor.start(); // try and start again
+ } catch (IllegalStateException e) {
+ // expected result, monitor already running
+ }
+
// Create a File
checkCollectionsEmpty("A");
File file1 = touch(new File(testDir, "file1.java"));
@@ -70,6 +121,11 @@ public class FileAlterationMonitorTestCa
// Stop monitoring
monitor.stop();
+ try {
+ monitor.stop(); // try and stop again
+ } catch (IllegalStateException e) {
+ // expected result, monitor already stopped
+ }
} catch (Exception e) {
e.printStackTrace();
fail("Threw " + e);