private File resolveSiteDescriptor()

in doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java [826:932]


    private File resolveSiteDescriptor(
            MavenProject project,
            RepositorySystemSession repoSession,
            List<RemoteRepository> remoteProjectRepositories,
            Locale locale)
            throws ArtifactResolutionException {
        String variant = locale.getVariant();
        String country = locale.getCountry();
        String language = locale.getLanguage();

        String localeStr = null;
        File siteDescriptor = null;
        boolean found = false;

        if (!variant.isEmpty()) {
            localeStr = language + "_" + country + "_" + variant;
            ArtifactRequest request =
                    createSiteDescriptorArtifactRequest(project, localeStr, remoteProjectRepositories);

            deletePseudoSiteDescriptorMarkerFile(repoSession, request);

            try {
                ArtifactResult result = repositorySystem.resolveArtifact(repoSession, request);

                siteDescriptor = result.getArtifact().getFile();
                found = true;
            } catch (ArtifactResolutionException e) {
                // This is a workaround for MNG-7758/MRESOLVER-335
                if (e.getResult().getExceptions().stream().anyMatch(re -> re instanceof ArtifactNotFoundException)) {
                    LOGGER.debug("No site descriptor found for '" + project.getId() + "' for locale '" + localeStr
                            + "', trying without variant...");
                } else {
                    throw e;
                }
            }
        }

        if (!found && !country.isEmpty()) {
            localeStr = language + "_" + country;
            ArtifactRequest request =
                    createSiteDescriptorArtifactRequest(project, localeStr, remoteProjectRepositories);

            deletePseudoSiteDescriptorMarkerFile(repoSession, request);

            try {
                ArtifactResult result = repositorySystem.resolveArtifact(repoSession, request);

                siteDescriptor = result.getArtifact().getFile();
                found = true;
            } catch (ArtifactResolutionException e) {
                // This is a workaround for MNG-7758/MRESOLVER-335
                if (e.getResult().getExceptions().stream().anyMatch(re -> re instanceof ArtifactNotFoundException)) {
                    LOGGER.debug("No site descriptor found for '" + project.getId() + "' for locale '" + localeStr
                            + "', trying without country...");
                } else {
                    throw e;
                }
            }
        }

        if (!found && !language.isEmpty()) {
            localeStr = language;
            ArtifactRequest request =
                    createSiteDescriptorArtifactRequest(project, localeStr, remoteProjectRepositories);

            deletePseudoSiteDescriptorMarkerFile(repoSession, request);

            try {
                ArtifactResult result = repositorySystem.resolveArtifact(repoSession, request);

                siteDescriptor = result.getArtifact().getFile();
                found = true;
            } catch (ArtifactResolutionException e) {
                // This is a workaround for MNG-7758/MRESOLVER-335
                if (e.getResult().getExceptions().stream().anyMatch(re -> re instanceof ArtifactNotFoundException)) {
                    LOGGER.debug("No site descriptor found for '" + project.getId() + "' for locale '" + localeStr
                            + "', trying without language (default locale)...");
                } else {
                    throw e;
                }
            }
        }

        if (!found) {
            localeStr = SiteTool.DEFAULT_LOCALE.toString();
            ArtifactRequest request =
                    createSiteDescriptorArtifactRequest(project, localeStr, remoteProjectRepositories);

            deletePseudoSiteDescriptorMarkerFile(repoSession, request);

            try {
                ArtifactResult result = repositorySystem.resolveArtifact(repoSession, request);

                siteDescriptor = result.getArtifact().getFile();
            } catch (ArtifactResolutionException e) {
                // This is a workaround for MNG-7758/MRESOLVER-335
                if (e.getResult().getExceptions().stream().anyMatch(re -> re instanceof ArtifactNotFoundException)) {
                    LOGGER.debug("No site descriptor found for '" + project.getId() + "' with default locale");
                    return null;
                }

                throw e;
            }
        }

        return siteDescriptor;
    }