示例#1
0
 /**
  * Compare two file lists for files which have been created, modified or deleted.
  *
  * @param parent The parent entry
  * @param previous The original list of files
  * @param files The current list of files
  */
 private void checkAndNotify(FileEntry parent, FileEntry[] previous, File[] files) {
   int c = 0;
   FileEntry[] current = files.length > 0 ? new FileEntry[files.length] : FileEntry.EMPTY_ENTRIES;
   for (FileEntry 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]));
       current[c] = entry;
       c++;
     } else {
       checkAndNotify(entry, entry.getChildren(), FileUtils.EMPTY_FILE_ARRAY);
       doDelete(entry);
     }
   }
   for (; c < files.length; c++) {
     current[c] = createFileEntry(parent, files[c]);
     doCreate(current[c]);
   }
   parent.setChildren(current);
 }
示例#2
0
 /**
  * Fire directory/file created events to the registered listeners.
  *
  * @param entry The file entry
  */
 private void doCreate(FileEntry entry) {
   for (FileAlterationListener listener : listeners) {
     if (entry.isDirectory()) {
       listener.onDirectoryCreate(entry.getFile());
     } else {
       listener.onFileCreate(entry.getFile());
     }
   }
   FileEntry[] children = entry.getChildren();
   for (FileEntry aChildren : children) {
     doCreate(aChildren);
   }
 }
示例#3
0
  /** Check whether the file and its chlidren have been created, modified or deleted. */
  public void checkAndNotify() {

    /* fire onStart() */
    for (FileAlterationListener listener : listeners) {
      listener.onStart(this);
    }

    /* fire directory/file events */
    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 (FileAlterationListener listener : listeners) {
      listener.onStop(this);
    }
  }