private void check()

in src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java [148:203]


    private void check(final Monitorable monitorable, final ObservationReporter reporter) {
        log.trace("Checking {}", monitorable.file);
        // if the file is non existing, check if it has been readded
        if (monitorable.status instanceof NonExistingStatus) {
            if (monitorable.file.exists()) {
                // new file and reset status
                createStatus(monitorable, contentFileExtensions, contentFileCache);
                fileStatCache.clear();
                sendEvents(monitorable, ChangeType.ADDED, reporter);
                final FileStatus fs = (FileStatus) monitorable.status;
                if (fs instanceof DirStatus) {
                    final DirStatus ds = (DirStatus) fs;
                    // remove monitorables for new folder and update folder children to send events for directory
                    // contents
                    ds.children = new Monitorable[0];
                    checkDirStatusChildren(monitorable, reporter);
                }
            }
        } else {
            // check if the file has been removed
            if (!monitorable.file.exists()) {
                // removed file and update status
                if (contentFileCache != null) {
                    contentFileCache.remove(this.provider.transformPath(monitorable.path));
                }
                monitorable.status = NonExistingStatus.SINGLETON;
                fileStatCache.clear();
                sendEvents(monitorable, ChangeType.REMOVED, reporter);
            } else {
                // check for changes
                final FileStatus fs = (FileStatus) monitorable.status;
                boolean changed = false;
                if (fs.lastModified < monitorable.file.lastModified()) {
                    fs.lastModified = monitorable.file.lastModified();
                    // changed
                    if (contentFileCache != null) {
                        contentFileCache.remove(this.provider.transformPath(monitorable.path));
                    }
                    sendEvents(monitorable, ChangeType.CHANGED, reporter);
                    changed = true;
                }
                if (fs instanceof DirStatus) {
                    // directory
                    final DirStatus ds = (DirStatus) fs;
                    for (int i = 0; i < ds.children.length; i++) {
                        check(ds.children[i], reporter);
                    }
                    // if the dir changed we have to update
                    if (changed) {
                        // and now update
                        checkDirStatusChildren(monitorable, reporter);
                    }
                }
            }
        }
    }