static void generateIndexes()

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


        }
    }