private void compareChildren()

in fam/src/main/java/org/apache/commons/jci2/fam/monitor/FilesystemAlterationObserverImpl.java [119:151]


        private void compareChildren() {
            if (!file.isDirectory()) {
                return;
            }

            final MonitorFile[] files = file.listFiles();
            final Set<Entry> deleted = new HashSet<>(children.values());
            for (final MonitorFile f : files) {
                final String name = f.getName();
                final Entry entry = children.get(name);
                if (entry != null) {
                    // already recognized as child
                    deleted.remove(entry);

                    if(entry.needsToBeDeleted()) {
                        // we have to delete this one
                        children.remove(name);
                    }
                } else {
                    // a new child
                    final Entry newChild = new Entry(f);
                    children.put(name, newChild);
                    newChild.needsToBeDeleted();
                }
            }

            // the ones not found on disk anymore

            for (final Entry entry : deleted) {
                entry.deleteChildrenAndNotify();
                children.remove(entry.getName());
            }
        }