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);


Reply via email to