static SortedSet sortAndEnrichFilesAndDirectories()

in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/ValidateFilesMojo.java [295:328]


    static SortedSet<Path> sortAndEnrichFilesAndDirectories(Path baseDir, String[] files, String[] directories) {
        // first sort by segments
        NavigableSet<Path> paths = new TreeSet<>(new ParentAndDotContentXmlFirstComparator());
        for (String file : files) {
            paths.add(Paths.get(file));
        }
        for (String directory : directories) {
            paths.add(Paths.get(directory));
        }
        // start with longest path first
        Iterator<Path> pathIterator = paths.descendingIterator();
        Set<Path> additionalPaths = new HashSet<>();
        while (pathIterator.hasNext()) {
            Path path = pathIterator.next();
            // add in addition all potentially relevant parent node definitions
            Path parent = path.getParent();
            if (parent != null) {
                if (!paths.contains(parent) && !additionalPaths.contains(parent) && Files.isDirectory(baseDir.resolve(parent))) {
                    additionalPaths.add(parent);
                }
                Path parentContentXml = parent.resolve(Constants.DOT_CONTENT_XML);
                if (!paths.contains(parentContentXml) && !additionalPaths.contains(parentContentXml) && Files.exists(baseDir.resolve(parentContentXml))) {
                    additionalPaths.add(parentContentXml);
                }
                // and the node definition for https://jackrabbit.apache.org/filevault/vaultfs.html#Extended_File_aggregates
                Path extendedFileAggregateContentXml = parent.resolve(path.getFileName().toString() + ".dir").resolve(Constants.DOT_CONTENT_XML);
                if (!paths.contains(extendedFileAggregateContentXml) && !additionalPaths.contains(extendedFileAggregateContentXml) && Files.exists(baseDir.resolve(extendedFileAggregateContentXml))) {
                    additionalPaths.add(parentContentXml);
                }
            }
        }
        paths.addAll(additionalPaths);
        return paths;
    }