private void check()

in src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java [153: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
                contentFileCache.remove(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
                    contentFileCache.remove(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);
                    }
                }
            }
        }
    }