in tutorials-convert/src/main/java/org/netbeans/tools/tutorials/AsciidocPostProcessor.java [169:255]
static void generateIndexes(File dest, Map<File, String> titles) throws IOException {
LOG.info("Generating index.asciidoc (and translations) on all directories...");
/*
Compute the list of directories under 'dest'
*/
List<File> directories = Files.find(dest.toPath(), 999,
(p, bfa) -> bfa.isDirectory()
).map((p) -> p.toFile()).collect(Collectors.toList());
/*
A filter that selects documents in english (i.e., without _ja, _pt_BR, etc. suffixes).
*/
FileFilter englishTutorialsFilter = (f) -> f.isFile() && Language.getLanguage(f) == Language.DEFAULT;
MustacheFactory factory = new DefaultMustacheFactory();
Mustache indexMustache = factory.compile("org/netbeans/tools/tutorials/index-template.mustache");
Mustache sectionMustache = factory.compile("org/netbeans/tools/tutorials/section-template.mustache");
/*
Iterate over all nexted directories...
*/
for (File directory : directories) {
if ("images".equals(directory.getName())) {
continue;
}
HashMap<Language, List<File>> filesByLanguage = new HashMap<>();
/*
Compute the files in english
*/
File[] tutorialsEnglish = directory.listFiles(englishTutorialsFilter);
for (File english : tutorialsEnglish) {
List<File> englishFiles = filesByLanguage.get(Language.DEFAULT);
if (englishFiles == null) {
englishFiles = new ArrayList<File>();
filesByLanguage.put(Language.DEFAULT, englishFiles);
}
englishFiles.add(english);
/*
And retrieve the list of translations of the english file.
*/
HashMap<Language, File> translations = Language.getTranslations(english);
for (Map.Entry<Language, File> translation : translations.entrySet()) {
List<File> languageFiles = filesByLanguage.get(translation.getKey());
if (languageFiles == null) {
languageFiles = new ArrayList<>();
filesByLanguage.put(translation.getKey(), languageFiles);
}
languageFiles.add(translation.getValue());
}
}
for (Map.Entry<Language, List<File>> entry : filesByLanguage.entrySet()) {
Language language = entry.getKey();
if (language == Language.UNKNOWN) {
continue;
}
ResourceBundle bundle = ResourceBundle.getBundle("org.netbeans.tools.tutorials.TutorialsBundle", language.locale);
String directoryTitle = bundle.getString( directory.getName() + ".title");
if (directoryTitle == null) {
throw new IllegalArgumentException("Please add a title for directory '" + directory.getName() + "' in locale " + language.locale);
}
LocalizedTutorialSection section = new LocalizedTutorialSection(language, directoryTitle);
section.addAll(entry.getValue());
section.sort(titles);
// Generate the index
String name = "index" + language.extension;
File output = new File(directory, name);
try (Writer indexOutput = new OutputStreamWriter(new FileOutputStream(output), StandardCharsets.UTF_8)) {
indexMustache.execute(indexOutput, section);
}
// Also generate section.asciidoc (section_ja.asciidoc, etc.)
// This will be in a sidebar for all tutorials in this section
String sectionSidebarName = "section" + language.extension;
File sectionSidebarFile = new File(directory, sectionSidebarName);
try (Writer indexOutput = new OutputStreamWriter(new FileOutputStream(sectionSidebarFile), StandardCharsets.UTF_8)) {
sectionMustache.execute(indexOutput, section);
}
}
}
}