private WebAppContext createWebApplication()

in src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java [104:173]


    private WebAppContext createWebApplication() throws MojoExecutionException {
        File webXml = new File(tempWebappDirectory, "WEB-INF/web.xml");
        webXml.getParentFile().mkdirs();

        try (InputStream inStream = getClass().getResourceAsStream("/run/web.xml"); //
                FileOutputStream outStream = new FileOutputStream(webXml)) {
            IOUtil.copy(inStream, outStream);
        } catch (IOException e) {
            throw new MojoExecutionException("Unable to construct temporary webapp for running site", e);
        }

        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setResourceBase(tempWebappDirectory.getAbsolutePath());
        webapp.setAttribute(DoxiaFilter.OUTPUT_DIRECTORY_KEY, tempWebappDirectory);
        webapp.setAttribute(DoxiaFilter.SITE_RENDERER_KEY, siteRenderer);
        webapp.getInitParams().put("org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");

        // For external reports
        project.getReporting().setOutputDirectory(tempWebappDirectory.getAbsolutePath());
        for (MavenReportExecution mavenReportExecution : getReports()) {
            mavenReportExecution.getMavenReport().setReportOutputDirectory(tempWebappDirectory);
        }

        List<MavenReportExecution> reports =
                getReports(); // TODO: is it sane to call getReports() method a second time?

        List<Locale> localesList = getLocales();
        webapp.setAttribute(DoxiaFilter.LOCALES_LIST_KEY, localesList);

        try {
            Map<String, DoxiaBean> i18nDoxiaContexts = new HashMap<>();

            for (Locale locale : localesList) {
                SiteRenderingContext i18nContext = createSiteRenderingContext(locale);
                i18nContext.setInputEncoding(getInputEncoding());
                i18nContext.setOutputEncoding(getOutputEncoding());

                SiteRenderingContext i18nGeneratedSiteContext = createSiteRenderingContext(locale);
                i18nGeneratedSiteContext.setInputEncoding(getInputEncoding());
                i18nGeneratedSiteContext.setOutputEncoding(getOutputEncoding());
                i18nGeneratedSiteContext.getSiteDirectories().clear();

                Map<String, DocumentRenderer> i18nDocuments = locateDocuments(i18nContext, reports, locale);
                if (!locale.equals(SiteTool.DEFAULT_LOCALE)) {
                    i18nGeneratedSiteContext.addSiteDirectory(new File(generatedSiteDirectory, locale.toString()));
                } else {
                    i18nGeneratedSiteContext.addSiteDirectory(generatedSiteDirectory);
                }
                DoxiaBean doxiaBean = new DoxiaBean(i18nContext, i18nDocuments, i18nGeneratedSiteContext);

                if (!locale.equals(SiteTool.DEFAULT_LOCALE)) {
                    i18nDoxiaContexts.put(locale.toString(), doxiaBean);
                } else {
                    i18nDoxiaContexts.put("default", doxiaBean);
                }

                if (!locale.equals(SiteTool.DEFAULT_LOCALE)) {
                    siteRenderer.copyResources(i18nContext, new File(tempWebappDirectory, locale.toString()));
                } else {
                    siteRenderer.copyResources(i18nContext, tempWebappDirectory);
                }
            }

            webapp.setAttribute(DoxiaFilter.I18N_DOXIA_CONTEXTS_KEY, i18nDoxiaContexts);
        } catch (Exception e) {
            throw new MojoExecutionException("Unable to set up webapp", e);
        }
        return webapp;
    }