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;
}