/** * author: Marcel Genzmehr * 03.11.2011 */ package org.freeplane.plugin.workspace.io; import java.io.File; import java.util.Iterator; import org.apache.commons.io.monitor.FileAlterationListener; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.apache.commons.io.monitor.FileAlterationObserver; /** * */ public class FileSystemAlterationMonitor { private final FileAlterationMonitor monitor; private boolean isRunning; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public FileSystemAlterationMonitor(long interval) { monitor = new FileAlterationMonitor(interval); start(); } /*********************************************************************************** * METHODS **********************************************************************************/ public final void addFileSystemListener(File file, FileAlterationListener listener) { Iterator<FileAlterationObserver> observers = monitor.getObservers().iterator(); while(observers.hasNext()) { FileAlterationObserver observer = observers.next(); if(observer.getDirectory().getPath().equals(file.getPath())) { observer.removeListener(listener); observer.addListener(listener); return; } } if(file.exists() && file.isDirectory()) { FileAlterationObserver observer = new FileAlterationObserver(file); observer.addListener(listener); monitor.addObserver(observer); } } public final void removeFileSystemListener(File file, FileAlterationListener listener) { Iterator<FileAlterationObserver> observers = monitor.getObservers().iterator(); while(observers.hasNext()) { FileAlterationObserver observer = observers.next(); if(observer.getDirectory().getPath().equals(file.getPath())) { Iterator<FileAlterationListener> listeners = observer.getListeners().iterator(); while(listeners.hasNext()) { if(listeners.next().equals(listener)) { observer.removeListener(listener); } } } } } public final boolean isRunning() { return isRunning; } public final void stop() { if(isRunning()) { try { monitor.stop(); } catch (Exception e) { e.printStackTrace(); } } isRunning = false; } public final void start() { if(isRunning()) { return; } try { monitor.start(); isRunning = true; } catch (Exception e) { isRunning = false; e.printStackTrace(); } } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ }