You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tc...@apache.org on 2007/02/19 10:56:51 UTC

svn commit: r509144 [2/2] - in /jakarta/commons/sandbox/jci/trunk: compilers/eclipse/src/test/ compilers/eclipse/src/test/java/ compilers/eclipse/src/test/java/org/ compilers/eclipse/src/test/java/org/apache/ compilers/eclipse/src/test/java/org/apache/...

Modified: jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java?view=diff&rev=509144&r1=509143&r2=509144
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java (original)
+++ jakarta/commons/sandbox/jci/trunk/fam/src/main/java/org/apache/commons/jci/monitor/FilesystemAlterationObserverImpl.java Mon Feb 19 01:56:48 2007
@@ -1,401 +1,372 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation. Licensed under the Apache License, Version
- * 2.0 (the "License"); you may not use this file except in compliance with the License. You may
- * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
- * applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
- * the License for the specific language governing permissions and limitations under the License.
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.commons.jci.monitor;
 
 import java.io.File;
-import java.io.FileFilter;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections.MultiHashMap;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 /**
+ * Implementation of a FilesystemAlterationObserver
+ * 
  * @author tcurdt
  */
 public class FilesystemAlterationObserverImpl implements FilesystemAlterationObserver {
 
     private final Log log = LogFactory.getLog(FilesystemAlterationObserverImpl.class);
+    
+    private interface MonitorFile {
 
-    public class Entry {
-
-        private final File root;
-        private final File file;
-        private long lastModified;
-        private Set paths = new HashSet();
-        private Set childs = new HashSet();
-        private final boolean isDirectory;
+    	long lastModified();
+    	MonitorFile[] listFiles();
+    	boolean isDirectory();
+    	boolean exists();
+    	String getName();
 
+    }
+    
+	private final static class MonitorFileImpl implements MonitorFile {
+		
+		private final File file;
+		
+		public MonitorFileImpl( final File pFile ) {
+			file = pFile;
+		}
+
+		public boolean exists() {
+			return file.exists();
+		}
+
+		public MonitorFile[] listFiles() {
+			final File[] childs = file.listFiles();
+			
+			final MonitorFile[] providers = new MonitorFile[childs.length];
+			for (int i = 0; i < providers.length; i++) {
+				providers[i] = new MonitorFileImpl(childs[i]);
+			}
+			return providers;
+		}
+
+		public String getName() {
+			return file.getName();
+		}
+
+		public boolean isDirectory() {
+			return file.isDirectory();
+		}
+
+		public long lastModified() {
+			return file.lastModified();
+		}
+		
+		public String toString() {
+			return file.toString();
+		}
+		
+	}
+	
+	private final class Entry {
+
+    	private final static int TYPE_UNKNOWN = 0;
+    	private final static int TYPE_FILE = 1;
+    	private final static int TYPE_DIRECTORY = 2;
+    	
+        private final MonitorFile file;
+        private long lastModified = -1;
+        private int lastType = TYPE_UNKNOWN;
+        private Map childs = new HashMap();
 
-        public Entry(final File pRoot, final File pFile) {
-            root = pRoot;
+        public Entry(final MonitorFile pFile) {
             file = pFile;
-            lastModified = -1;
-            isDirectory = file.isDirectory();
-        }
-
-
-        public boolean hasChanged() {
-            final long modified = file.lastModified();
-            return modified != lastModified;
-        }
-
-
-        public boolean isDelected() {
-            return !file.exists();
-        }
-
-
-        public boolean isDirectory() {
-            return isDirectory;
-        }
-
-
-        public Entry[] getChilds() {
-            final Entry[] r = new Entry[childs.size()];
-            childs.toArray(r);
-            return r;
-        }
-
-
-        private FileFilter getFileFilter() {
-            return new FileFilter() {
-
-                public boolean accept( final File pathname ) {
-                    final String p = pathname.getAbsolutePath();
-                    return !paths.contains(p);
-                }
-            };
-        }
-
-
-        public Entry[] getNonChilds() {
-            final File[] newFiles = file.listFiles(getFileFilter());
-            final Entry[] r = new Entry[newFiles.length];
-            for (int i = 0; i < newFiles.length; i++) {
-                r[i] = new Entry(root, newFiles[i]);
-            }
-            return r;
         }
 
-
-        public void add( final Entry entry ) {
-            childs.add(entry);
-            paths.add(entry.toString());
-            onCreate(root, entry);
+        public String getName() {
+        	return file.getName();
         }
-
-
-        private void deleteChilds() {
-            final Entry[] childs = this.getChilds();
-            for (int i = 0; i < childs.length; i++) {
-                final Entry child = childs[i];
-                delete(child);
-            }
+        
+        
+		public String toString() {
+            return file.toString();
         }
 
 
-        public void delete( final Entry entry ) {
-            childs.remove(entry);
-            paths.remove(entry.toString());
-            entry.deleteChilds();
-            onDelete(root, entry);
+		private void compareChilds() {
+			if (!file.isDirectory()) {
+				return;
+			}
+			
+			final MonitorFile[] files = file.listFiles();
+			final Set deleted = new HashSet(childs.values());
+			for (int i = 0; i < files.length; i++) {
+				final MonitorFile f = files[i];
+				final String name = f.getName();
+				final Entry entry = (Entry)childs.get(name);
+				if (entry != null) {
+					// already recognized as child
+					deleted.remove(entry);
+					
+					if(entry.needsToBeDeleted()) {
+						// we have to delete this one
+						childs.remove(name);
+					}
+				} else {
+					// a new child
+					final Entry newChild = new Entry(f);
+					childs.put(name, newChild);
+					newChild.needsToBeDeleted();
+				}
+			}
+			
+			// the ones not found on disk anymore
+			
+			for (Iterator it = deleted.iterator(); it.hasNext();) {
+				final Entry entry = (Entry) it.next();
+				entry.deleteChildsAndNotify();				
+				childs.remove(entry.getName());
+			}
+		}
+
+		
+		private void deleteChildsAndNotify() {
+        	for (Iterator it = childs.values().iterator(); it.hasNext();) {
+				final Entry entry = (Entry) it.next();
+
+				entry.deleteChildsAndNotify();
+			}
+        	childs.clear();			
+
+			if(lastType == TYPE_DIRECTORY) {
+				notifyOnDirectoryDelete(this);
+			} else if (lastType == TYPE_FILE) {
+				notifyOnFileDelete(this);					
+			}
+		}
+		
+        public boolean needsToBeDeleted() {
+        	
+        	if (!file.exists()) {
+        		// deleted or has never existed yet
+        		
+//        		log.debug(file + " does not exist or has been deleted");
+
+        		deleteChildsAndNotify();
+
+        		// mark to be deleted by parent
+        		return true;        		
+        	} else {
+        		// exists
+        		final long currentModified = file.lastModified(); 
+
+        		if (currentModified != lastModified) {
+	        		// last modified has changed
+    				lastModified = currentModified;
+
+//            		log.debug(file + " has new last modified");
+    				
+        			// types only changes when also the last modified changes
+	        		final int newType = (file.isDirectory()?TYPE_DIRECTORY:TYPE_FILE); 
+	
+	        		if (lastType != newType) {
+	        			// the type has changed
+
+//	            		log.debug(file + " has a new type");
+	        			
+	        			deleteChildsAndNotify();
+	        				        			
+	        			lastType = newType;
+
+	        			// and then an add as the new type
+
+	        			if (newType == TYPE_DIRECTORY) {
+	        				notifyOnDirectoryCreate(this);     				
+	        				compareChilds();        				
+		        		} else {	        		
+		    				notifyOnFileCreate(this);     				
+		        		}
+
+	    	    		return false;
+	        		}
+	        		        		
+	        		if (newType == TYPE_DIRECTORY) {
+        				notifyOnDirectoryChange(this);     				
+        				compareChilds();        				
+	        		} else {	        		
+	    				notifyOnFileChange(this);     				
+	        		}
+	        		
+    	    		return false;
+
+        		} else {
+
+        			// so exists and has not changed
+        			
+//            		log.debug(file + " does exist and has not changed");
+
+        			compareChilds();
+
+        			return false;
+	        	}
+        	}    		
         }
-
-
-        public File getFile() {
+        
+        public MonitorFile getFile() {
             return file;
         }
 
-
         public void markNotChanged() {
             lastModified = file.lastModified();
         }
 
-
-        public String toString() {
-            return file.getAbsolutePath();
-        }
-    }
-
-    public static class UniqueMultiValueMap extends MultiHashMap {
-
-		private static final long serialVersionUID = 1L;
-
-		public UniqueMultiValueMap() {
-            super( );
-        }
-
-        public UniqueMultiValueMap(Map copy) {
-            super( copy );
-        }
-
-        protected Collection createCollection( Collection copy ) {
-            if (copy != null) {
-                return new HashSet(copy);
-            }
-            return new HashSet();
-        }
-        
-    }
-    
-    private Map listeners = new UniqueMultiValueMap();
-    private Map directories = new UniqueMultiValueMap();
-    private Map entries = new HashMap();
-    private final Object mutexListeners = new Object();
-    
-
-    public FilesystemAlterationObserverImpl() {
-    }
-
-
-    public void addListener( final FilesystemAlterationListener pListener ) {
-        final File directory = pListener.getRepository();
-        synchronized (mutexListeners) {
-            // listerner -> dir1, dir2, dir3
-            final UniqueMultiValueMap newListeners = new UniqueMultiValueMap(listeners);
-            newListeners.put(pListener, directory);
-            listeners = newListeners;
-            // directory -> listener1, listener2, listener3
-            final UniqueMultiValueMap newDirectories = new UniqueMultiValueMap(directories);
-            newDirectories.put(directory, pListener);
-            directories = newDirectories;
-        }
-    }
-
-    public Collection getListeners() {
-        synchronized (mutexListeners) {
-            return listeners.keySet();
-        }
-    }
-
-    public Collection getListenersFor( final File pRepository ) {
-        synchronized (mutexListeners) {
-            return (Collection) directories.get(pRepository);
-        }
-    }
-
-    public void removeListener( final FilesystemAlterationListener listener ) {
-        synchronized (mutexListeners) {
-            // listerner -> dir1, dir2, dir3
-            final UniqueMultiValueMap newListeners = new UniqueMultiValueMap(listeners);
-            Collection d = (Collection) newListeners.remove(listener);
-            listeners = newListeners;
-            if (d != null) {
-                // directory -> listener1, listener2, listener3
-                final UniqueMultiValueMap newDirectories = new UniqueMultiValueMap(directories);
-                for (Iterator it = d.iterator(); it.hasNext();) {
-                    newDirectories.remove(it.next());
-                    entries.remove(d);
-                }
-                directories = newDirectories;
-            }
-        }
-    }
-
-
-    private void onStart( final File root ) {
-        log.debug("start checking " + root);
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        final Collection l = (Collection) directories.get(root);
-        if (l != null) {
-            for (Iterator it = l.iterator(); it.hasNext();) {
-                final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                        .next();
-                listener.onStart();
-            }
-        }
-    }
-
-
-    private void onStop( final File root ) {
-        log.debug("stop checking " + root);
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        final Collection l = (Collection) directories.get(root);
-        if (l != null) {
-            for (Iterator it = l.iterator(); it.hasNext();) {
-                final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                        .next();
-                listener.onStop();
-            }
-        }
-    }
-
-
-    private void onCreate( final File root, final Entry entry ) {
-        log.debug("created " + ((entry.isDirectory()) ? "dir " : "file ") + entry);
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        final Collection l = (Collection) directories.get(root);
-        if (l != null) {
-            if (entry.isDirectory()) {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onCreateDirectory(entry.getFile());
-                }
-            } else {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onCreateFile(entry.getFile());
-                }
-            }
-        }
-        entry.markNotChanged();
-    }
-
-
-    private void onChange( final File root, final Entry entry ) {
-        log.debug("changed " + ((entry.isDirectory()) ? "dir " : "file ") + entry);
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        final Collection l = (Collection) directories.get(root);
-        if (l != null) {
-            if (entry.isDirectory()) {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onChangeDirectory(entry.getFile());
-                }
-            } else {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onChangeFile(entry.getFile());
-                }
-            }
-        }
-        entry.markNotChanged();
-    }
-
-
-    private void onDelete( final File root, final Entry entry ) {
-        log.debug("deleted " + ((entry.isDirectory()) ? "dir " : "file ") + entry);
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        final Collection l = (Collection) directories.get(root);
-        if (l != null) {
-            if (entry.isDirectory()) {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onDeleteDirectory(entry.getFile());
-                }
-            } else {
-                for (Iterator it = l.iterator(); it.hasNext();) {
-                    final FilesystemAlterationListener listener = (FilesystemAlterationListener) it
-                            .next();
-                    listener.onDeleteFile(entry.getFile());
-                }
-            }
-        }
-        entry.markNotChanged();
     }
 
+	private final File rootDirectory;
+	private final Entry rootEntry;
 
-    private void check( final File root, final Entry entry, final boolean create ) {
-        // log.debug("checking " + entry);
-        if (entry.isDirectory()) {
-            final Entry[] currentChilds = entry.getChilds();
-            if (entry.hasChanged() || create) {
-                // log.debug(entry + " has changed");
-                if (!create) {
-                    onChange(root, entry);
-                    for (int i = 0; i < currentChilds.length; i++) {
-                        final Entry child = currentChilds[i];
-                        if (child.isDelected()) {
-                            entry.delete(child);
-                            currentChilds[i] = null;
-                        }
-                    }
-                }
-                final Entry[] newChilds = entry.getNonChilds();
-                for (int i = 0; i < newChilds.length; i++) {
-                    final Entry child = newChilds[i];
-                    entry.add(child);
-                }
-                if (!create) {
-                    for (int i = 0; i < currentChilds.length; i++) {
-                        final Entry child = currentChilds[i];
-                        if (child != null) {
-                            check(root, child, false);
-                        }
-                    }
-                }
-                for (int i = 0; i < newChilds.length; i++) {
-                    final Entry child = newChilds[i];
-                    check(root, child, true);
-                }
-            } else {
-                // log.debug(entry + " has not changed");
-                for (int i = 0; i < currentChilds.length; i++) {
-                    final Entry child = currentChilds[i];
-                    check(root, child, false);
-                }
-            }
-        } else {
-            if (entry.isDelected()) {
-                onDelete(root, entry);
-            } else if (entry.hasChanged()) {
-                onChange(root, entry);
-            }
-        }
+	private FilesystemAlterationListener[] listeners = new FilesystemAlterationListener[0];
+	private Set listenersSet = new HashSet();
+	
+	public FilesystemAlterationObserverImpl( final File pRootDirectory ) {
+		rootDirectory = pRootDirectory;
+		rootEntry = new Entry(new MonitorFileImpl(pRootDirectory));
+	}
+
+	
+	
+	private void notifyOnStart() {
+		log.debug("onStart " + rootEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onStart(this);
+		}
+	}
+	private void notifyOnStop() {
+		log.debug("onStop " + rootEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onStop(this);
+		}
+	}
+
+	private void notifyOnFileCreate( final Entry pEntry ) {
+		log.debug("onFileCreate " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onFileCreate(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+	private void notifyOnFileChange( final Entry pEntry ) {
+		log.debug("onFileChange " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onFileChange(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+	private void notifyOnFileDelete( final Entry pEntry ) {
+		log.debug("onFileDelete " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onFileDelete(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+
+	private void notifyOnDirectoryCreate( final Entry pEntry ) {
+		log.debug("onDirectoryCreate " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onDirectoryCreate(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+	private void notifyOnDirectoryChange( final Entry pEntry ) {
+		log.debug("onDirectoryChange " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onDirectoryChange(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+	private void notifyOnDirectoryDelete( final Entry pEntry ) {
+		log.debug("onDirectoryDelete " + pEntry);
+		for (int i = 0; i < listeners.length; i++) {
+			final FilesystemAlterationListener listener = listeners[i];
+			listener.onDirectoryDelete(((MonitorFileImpl)pEntry.getFile()).file );
+		}
+	}
+	
+
+    private void checkEntries() {
+		if(rootEntry.needsToBeDeleted()) {
+			// root not existing
+			rootEntry.lastType = Entry.TYPE_UNKNOWN;
+		}    	
     }
 
-
-
-    public void check() {
-        log.debug("observation running");
-        Map directories;
-        synchronized (mutexListeners) {
-            directories = this.directories;
-        }
-        for (Iterator it = directories.keySet().iterator(); it.hasNext();) {
-            final File directory = (File) it.next();
-            if (directory.exists()) {
-                onStart(directory);
-                Entry root;
-                synchronized (mutexListeners) {
-                    root = (Entry) entries.get(directory);
-                    if (root == null) {
-                        root = new Entry(directory, directory);
-                        entries.put(directory, root);
-                    }
-                }
-                check(directory, root, false);
-                onStop(directory);
-            }
-        }
-        log.debug("observation exiting");
+    
+    public synchronized void checkAndNotify() {    	
+    	if (listeners.length == 0) {
+    		return;
+    	}
+    	
+    	notifyOnStart();
+        
+        checkEntries();
+        
+    	notifyOnStop();			
     }
 
-    public String toString() {
-        return listeners.toString() + directories.toString();
+    
+    public File getRootDirectory() {
+    	return rootDirectory;
     }
 
-    
+	public synchronized void addListener( final FilesystemAlterationListener pListener ) {
+		if (listenersSet.add(pListener)) {
+			createArrayFromSet();			
+		}		
+	}
+
+	public synchronized void removeListener( final FilesystemAlterationListener pListener ) {
+		if (listenersSet.remove(pListener)) {
+			createArrayFromSet();			
+		}		
+	}
+
+	private void createArrayFromSet() {
+		final FilesystemAlterationListener[] newListeners = new FilesystemAlterationListener[listenersSet.size()];
+		listenersSet.toArray(newListeners);
+		listeners = newListeners;		
+	}
+	
+	public FilesystemAlterationListener[] getListeners() {
+		return listeners;
+	}
+
+	
+	public static void main( String[] args ) {
+		final FilesystemAlterationObserverImpl observer = new FilesystemAlterationObserverImpl(new File(args[0]));
+		while(true) {
+			observer.checkEntries();
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+			}
+		}
+	}
 }

Modified: jakarta/commons/sandbox/jci/trunk/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java?view=diff&rev=509144&r1=509143&r2=509144
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java (original)
+++ jakarta/commons/sandbox/jci/trunk/fam/src/test/java/org/apache/commons/jci/monitor/FilesystemAlterationMonitorTestCase.java Mon Feb 19 01:56:48 2007
@@ -124,26 +124,14 @@
 
     
     private static class MyFilesystemAlterationListener extends AbstractFilesystemAlterationListener {
-    	
-    	final File directory;
-    	
-    	public MyFilesystemAlterationListener( final File pDirectory ) {
-    		directory = pDirectory;
-    	}
-
-		public File getRepository() {
-			return directory;
-		}
-
     }
 
     private void start() throws Exception {
         fam = new FilesystemAlterationMonitor();
-        listener = new MyFilesystemAlterationListener(directory);
-        fam.addListener(listener);
+        listener = new MyFilesystemAlterationListener();
+        fam.addListener(directory, listener);
         fam.start();
         listener.waitForFirstCheck();
-        delay(); // FIXME: really required?
     }
     
     private void stop() {
@@ -152,23 +140,23 @@
     
     public void testListenerDoublication() throws Exception {
         fam = new FilesystemAlterationMonitor();
-        listener = new MyFilesystemAlterationListener(directory);
+        listener = new MyFilesystemAlterationListener();
         
-        fam.addListener(listener);
-        assertTrue(fam.getListeners().size() == 1);
+        fam.addListener(directory, listener);
+        assertTrue(fam.getListenersFor(directory).length == 1);
         
-        fam.addListener(listener); 
-        assertTrue(fam.getListeners().size() == 1);
+        fam.addListener(directory, listener); 
+        assertTrue(fam.getListenersFor(directory).length == 1);
     }
 
     public void testDirectoryDoublication() throws Exception {
         fam = new FilesystemAlterationMonitor();
 
-        fam.addListener(new MyFilesystemAlterationListener(directory)); 
-        assertTrue(fam.getListenersFor(directory).size() == 1);
+        fam.addListener(directory, new MyFilesystemAlterationListener()); 
+        assertTrue(fam.getListenersFor(directory).length == 1);
         
-        fam.addListener(new MyFilesystemAlterationListener(directory)); 
-        assertTrue(fam.getListenersFor(directory).size() == 2);
+        fam.addListener(directory, new MyFilesystemAlterationListener()); 
+        assertTrue(fam.getListenersFor(directory).length == 2);
     }
 
     public void testCreateFileDetection() throws Exception {
@@ -176,9 +164,9 @@
         
         writeFile("file", "file");
         
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getCreatedFiles() == 1);
+        assertTrue(listener.getCreatedFiles().size() == 1);
         
         stop();
     }
@@ -188,9 +176,9 @@
 
         createDirectory("dir");
         
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getCreatedDirectories() == 1);
+        assertTrue(listener.getCreatedDirectories().size() == 1);
         
         stop();
     }
@@ -200,38 +188,41 @@
 
         final File file = writeFile("file", "file");
         
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getCreatedFiles() == 1);
+        assertTrue(listener.getCreatedFiles().size() == 1);
         
         file.delete();
         assertTrue(!file.exists());
 
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getDeletedFiles() == 1);
+        assertTrue(listener.getDeletedFiles().size() == 1);
         
         stop();        
     }
-
     public void testDeleteDirectoryDetection() throws Exception {
         start();
 
         final File dir = createDirectory("dir");
         createDirectory("dir/sub");
+        final File file = writeFile("dir/sub/file", "file");
+
+        listener.waitForCheck();
         
-        listener.waitForEvent();
-        
-        assertTrue(listener.getCreatedDirectories() == 2);
+        assertEquals(2, listener.getCreatedDirectories().size());
+        assertEquals(1, listener.getCreatedFiles().size());
 
         delay();
         
         FileUtils.deleteDirectory(dir);
         assertTrue(!dir.exists());
+        assertTrue(!file.exists());
 
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getDeletedDirectories() == 2);
+        assertEquals(2, listener.getDeletedDirectories().size());
+        assertEquals(1, listener.getDeletedFiles().size());
 
         stop();
     }
@@ -241,17 +232,17 @@
 
         writeFile("file", "file");
         
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getCreatedFiles() == 1);
+        assertTrue(listener.getCreatedFiles().size() == 1);
 
         delay();
 
         writeFile("file", "changed file");
 
-        listener.waitForEvent();
+        listener.waitForCheck();
         
-        assertTrue(listener.getChangedFiles() == 1);
+        assertTrue(listener.getChangedFiles().size() == 1);
         
         stop();
     }

Added: jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties?view=auto&rev=509144
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties (added)
+++ jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties Mon Feb 19 01:56:48 2007
@@ -0,0 +1,2 @@
+org.apache.commons.logging.simplelog.defaultlog=debug
+org.apache.commons.logging.simplelog.showdatetime=true
\ No newline at end of file

Propchange: jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/jci/trunk/fam/src/test/java/simplelog.properties
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org