public void init(HbaseAdapter hbaseAdapter) { this.hbaseAdapter = hbaseAdapter; File confDir = Util.getConfDirPath(adapterName); try { FileAlterationObserver observer = new FileAlterationObserver(confDir, FileFilterUtils.and(FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter("yml"))); FileListener listener = new FileListener(); observer.addListener(listener); fileMonitor = new FileAlterationMonitor(3000, observer); fileMonitor.start(); } catch (Exception e) { logger.error(e.getMessage(), e); } }
for (final FileEntry entry : previous) { while (c < files.length && comparator.compare(entry.getFile(), files[c]) > 0) { current[c] = createFileEntry(parent, files[c]); doCreate(current[c]); c++; doMatch(entry, files[c]); checkAndNotify(entry, entry.getChildren(), listFiles(files[c])); current[c] = entry; c++; } else { checkAndNotify(entry, entry.getChildren(), FileUtils.EMPTY_FILE_ARRAY); doDelete(entry); current[c] = createFileEntry(parent, files[c]); doCreate(current[c]);
/** * Create a {@link FileAlterationObserver}. * * @param file The directory to observe * @param fileFilter The file filter to apply */ protected void createObserver(final File file, final FileFilter fileFilter) { observer = new FileAlterationObserver(file, fileFilter); observer.addListener(listener); observer.addListener(new FileAlterationListenerAdaptor()); try { observer.initialize(); } catch (final Exception e) { fail("Observer init() threw " + e); } }
/** * Check whether the file and its children have been created, modified or deleted. */ public void checkAndNotify() { /* fire onStart() */ for (final FileAlterationListener listener : listeners) { listener.onStart(this); } /* fire directory/file events */ final File rootFile = rootEntry.getFile(); if (rootFile.exists()) { checkAndNotify(rootEntry, rootEntry.getChildren(), listFiles(rootFile)); } else if (rootEntry.isExists()) { checkAndNotify(rootEntry, rootEntry.getChildren(), FileUtils.EMPTY_FILE_ARRAY); } else { // Didn't exist and still doesn't } /* fire onStop() */ for (final FileAlterationListener listener : listeners) { listener.onStop(this); } }
/** * Test add/remove listeners. */ @Test public void testAddRemoveListeners() { final FileAlterationObserver observer = new FileAlterationObserver("/foo"); // Null Listener observer.addListener(null); assertFalse("Listeners[1]", observer.getListeners().iterator().hasNext()); observer.removeListener(null); assertFalse("Listeners[2]", observer.getListeners().iterator().hasNext()); // Add Listener final FileAlterationListenerAdaptor listener = new FileAlterationListenerAdaptor(); observer.addListener(listener); final Iterator<FileAlterationListener> it = observer.getListeners().iterator(); assertTrue("Listeners[3]", it.hasNext()); assertEquals("Added", listener, it.next()); assertFalse("Listeners[4]", it.hasNext()); // Remove Listener observer.removeListener(listener); assertFalse("Listeners[5]", observer.getListeners().iterator().hasNext()); }
synchronized protected void takeFullSnapshot(DirectorySnapshot snapshot) { // update the snapshot with every file in the directory spec FileAlterationObserver observer = new FileAlterationObserver(fileTriggerRouter .getFileTrigger().getBaseDir(), fileTriggerRouter.getFileTrigger() .createIOFileFilter()); observer.addListener(new SnapshotUpdater(snapshot)); observer.checkAndNotify(); }
public void addFileObserverListener(FileObserverListener listener) { observer.addListener(listener); }
/** * Test toString(). */ @Test public void testToString() { final File file = new File("/foo"); FileAlterationObserver observer = null; observer = new FileAlterationObserver(file); assertEquals("FileAlterationObserver[file='" + file.getPath() + "', listeners=0]", observer.toString()); observer = new FileAlterationObserver(file, CanReadFileFilter.CAN_READ); assertEquals("FileAlterationObserver[file='" + file.getPath() + "', CanReadFileFilter, listeners=0]", observer.toString()); assertEquals(file, observer.getDirectory()); }
/** * Test add/remove observers. */ @Test 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 final FileAlterationObserver observer = new FileAlterationObserver("foo"); monitor.addObserver(observer); final 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()); }
{ FileAlterationMonitor monitor = new FileAlterationMonitor(); Iterator<FileAlterationObserver> iterator = monitor.getObservers().iterator(); FileAlterationObserver last = null; while (iterator.hasNext()) { last = iterator.next(); } final CountDownLatch cdl = new CountDownLatch(1); monitor.removeObserver(last); monitor.addObserver(new FileAlterationObserver(last.getDirectory(), last.getFileFilter()) { @Override public void initialize() throws Exception { super.initialize(); cdl.countDown(); } }); try { // wait until last observer would be initialized monitor.start(); cdl.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
synchronized public DirectorySnapshot trackChanges() { pollForChanges(); DirectorySnapshot changes = changesSinceLastSnapshot; changesSinceLastSnapshot = new DirectorySnapshot(fileTriggerRouter); SnapshotUpdater newListener = new SnapshotUpdater(changesSinceLastSnapshot); fileObserver.addListener(newListener); fileObserver.removeListener(currentListener); currentListener = newListener; lastSnapshot.merge(changes); return changes; }
/** * Run. */ @Override public void run() { while (running) { for (final FileAlterationObserver observer : observers) { observer.checkAndNotify(); } if (!running) { break; } try { Thread.sleep(interval); } catch (final InterruptedException ignored) { } } } }
/** * Provide a String representation of this observer. * * @return a String representation of this observer */ @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append(getClass().getSimpleName()); builder.append("[file='"); builder.append(getDirectory().getPath()); builder.append('\''); if (fileFilter != null) { builder.append(", "); builder.append(fileFilter.toString()); } builder.append(", listeners="); builder.append(listeners.size()); builder.append("]"); return builder.toString(); }
/** * Stop monitoring. * * @param stopInterval the amount of time in milliseconds to wait for the thread to finish. * A value of zero will wait until the thread is finished (see {@link Thread#join(long)}). * @throws Exception if an error occurs initializing the observer * @since 2.1 */ public synchronized void stop(final long stopInterval) throws Exception { if (running == false) { throw new IllegalStateException("Monitor is not running"); } running = false; try { thread.join(stopInterval); } catch (final InterruptedException e) { Thread.currentThread().interrupt(); } for (final FileAlterationObserver observer : observers) { observer.destroy(); } }
/** * Start monitoring. * * @throws Exception if an error occurs initializing the observer */ public synchronized void start() throws Exception { if (running) { throw new IllegalStateException("Monitor is already running"); } for (final FileAlterationObserver observer : observers) { observer.initialize(); } running = true; if (threadFactory != null) { thread = threadFactory.newThread(this); } else { thread = new Thread(this); } thread.start(); }
fao.addListener( listener ); monitor.addObserver( fao ); monitor.start();
/** * A file observer that uses the specified interval to check for file changes. * * @param rootDirectory * @param ms */ public FileObserver(File rootDirectory, long ms) { this.observer = new FileAlterationObserver(rootDirectory); this.monitor = new FileAlterationMonitor(ms, observer); }
/** * Check whether the file and its children have been created, modified or deleted. */ public void checkAndNotify() { /* fire onStart() */ for (final FileAlterationListener listener : listeners) { listener.onStart(this); } /* fire directory/file events */ final File rootFile = rootEntry.getFile(); if (rootFile.exists()) { checkAndNotify(rootEntry, rootEntry.getChildren(), listFiles(rootFile)); } else if (rootEntry.isExists()) { checkAndNotify(rootEntry, rootEntry.getChildren(), FileUtils.EMPTY_FILE_ARRAY); } else { // Didn't exist and still doesn't } /* fire onStop() */ for (final FileAlterationListener listener : listeners) { listener.onStop(this); } }
/** * Call {@link FileAlterationObserver#checkAndNotify()}. * * @throws Exception if an error occurs */ protected void checkAndNotify() throws Exception { observer.checkAndNotify(); } }
@Override public void onStart(FileAlterationObserver observer) { this.dir = observer.getDirectory(); }