/** * Distributes the given file change event among all file change listeners. * * @param event the file change event to distribute */ protected void distributeFileChangeEvent(FileChangeEvent event) { Iterator it = fileListeners.iterator(); while (it.hasNext()) { FileChangeListener listener = (FileChangeListener) it.next(); listener.fileChanged(event); } }
@Override public void run() { synchronized (lock) { for (Map.Entry<File, Long> entry : files.entrySet()) { File file = entry.getKey(); long lastModifiedTime = entry.getValue().longValue(); long newModifiedTime = file.exists() ? file.lastModified() : -1; // check if file has been changed if (newModifiedTime != lastModifiedTime) { // store new modified time entry.setValue(new Long(newModifiedTime)); // notify listeners for (FileChangeListener listener : listeners) { listener.onFileChange(file); } } } } }
protected void fireFileChangeEvent(FileChangeListener listener, String fileName) { listener.fileChanged(fileName); }
/** * Remove the listener from the notification list. * * @param listener the listener to be removed. */ public void removeFileChangeListener(FileChangeListener listener, String fileName) { FileMonitorTask task = (FileMonitorTask) timerTasks.remove(fileName + listener.hashCode()); if (task != null) { task.cancel(); } }
/** * Start monitoring a file. * * @param listener listener to notify when the file changed. * @param fileName name of the file to monitor. * @param period polling period in milliseconds. */ public void addFileChangeListener(FileChangeListener listener, String fileName, long period) { removeFileChangeListener(listener, fileName); FileMonitorTask task = new FileMonitorTask(listener, fileName); timerTasks.put(fileName + listener.hashCode(), task); timer.schedule(task, period, period); }
private void notifyListeners() { final Properties properties = new Properties(this); for (FileChangeListener aListener : listeners) { aListener.notifyFileChanged(properties); } }