/** * Return the directory being observed. * * @return the directory being observed */ public File getDirectory() { return rootEntry.getFile(); }
/** * Fire directory/file delete events to the registered listeners. * * @param entry The file entry */ private void doDelete(FileInfo entry) { for (FileChangeListener listener : listeners) { if (entry.isDirectory()) { listener.onDirectoryDelete(this,entry.getFile()); } else { listener.onFileDelete(this,entry.getFile()); } } }
/** * Initialize the observer. * * @throws Exception if an error occurs */ protected synchronized void initialize() { rootEntry.refresh(rootEntry.getFile()); File[] files = listFiles(rootEntry.getFile()); FileInfo[] children = files.length > 0 ? new FileInfo[files.length] : FileInfo.EMPTY_FILE_INFOS; for (int i = 0; i < files.length; i++) { children[i] = createFileEntry(rootEntry, files[i]); } rootEntry.setChildren(children); _initialized = true; }
/** * Construct an observer for the specified directory, file filter and * file comparator. * * @param rootEntry the root directory to observe * @param fileFilter The file filter or null if none * @param caseSensitivity what case sensitivity to use comparing file names, null means system sensitive */ protected FileChangeObserver(FileInfo rootEntry, FileFilter fileFilter, IOCase caseSensitivity) { if (rootEntry == null) { throw new IllegalArgumentException("Root entry is missing"); } if (rootEntry.getFile() == null) { throw new IllegalArgumentException("Root directory is missing"); } this.rootEntry = rootEntry; this.fileFilter = fileFilter; if (caseSensitivity == null || caseSensitivity.equals(IOCase.SYSTEM)) { this.comparator = IOComparators.nameSystem(); } else if (caseSensitivity.equals(IOCase.INSENSITIVE)) { this.comparator = IOComparators.nameInsensitive(); } else { this.comparator = IOComparators.nameSensitive(); } }
/** * Fire directory/file created events to the registered listeners. * * @param entry The file entry */ private void doCreate(FileInfo entry) { for (FileChangeListener listener : listeners) { if (entry.isDirectory()) { listener.onDirectoryCreate(this,entry.getFile()); } else { listener.onFileCreate(this,entry.getFile()); } } FileInfo[] children = entry.getChildren(); for (FileInfo aChildren : children) { doCreate(aChildren); } }
FileInfo[] current = files.length > 0 ? new FileInfo[files.length] : FileInfo.EMPTY_FILE_INFOS; for (FileInfo entry : previous) { while (c < files.length && comparator.compare(entry.getFile(), files[c]) > 0) { current[c] = createFileEntry(parent, files[c]); doCreate(current[c]); c++; if (c < files.length && comparator.compare(entry.getFile(), files[c]) == 0) { doMatch(entry, files[c]); checkAndNotify(entry, entry.getChildren(), listFiles(files[c]));
File rootFile = rootEntry.getFile(); if (rootFile.exists()) { checkAndNotify(rootEntry, rootEntry.getChildren(), listFiles(rootFile));