public void doFilter()

in src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java [92:190]


    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;

        // ----------------------------------------------------------------------
        // Handle the servlet path
        // ----------------------------------------------------------------------
        String path = req.getServletPath();
        // welcome file
        if (path.endsWith("/")) {
            path += "index.html";
        }

        // Remove the /
        path = path.substring(1);

        // Handle locale request
        SiteRenderingContext context;
        Map<String, DocumentRenderer> documents;
        SiteRenderingContext generatedSiteContext;

        String localeWanted = "";
        for (Locale locale : localesList) {
            if (path.startsWith(locale + "/")) {
                localeWanted = locale.toString();
                path = path.substring(localeWanted.length() + 1);
            }
        }

        DoxiaBean doxiaBean;
        if (!localeWanted.equals(SiteTool.DEFAULT_LOCALE.toString())) {
            doxiaBean = i18nDoxiaContexts.get(localeWanted);
            if (doxiaBean == null) {
                throw new ServletException("No Doxia bean found for locale '" + localeWanted + "'");
            }
        } else {
            doxiaBean = i18nDoxiaContexts.get("default");
            if (doxiaBean == null) {
                throw new ServletException("No Doxia bean found for the default locale");
            }
        }
        context = doxiaBean.getContext();
        documents = doxiaBean.getDocuments();
        generatedSiteContext = doxiaBean.getGeneratedSiteContext();

        // ----------------------------------------------------------------------
        // Handle report and documents
        // ----------------------------------------------------------------------
        if (documents.containsKey(path)) {
            try {
                DocumentRenderer docRenderer = documents.get(path);
                logDocumentRenderer(path, localeWanted, docRenderer);
                String outputName = docRenderer.getOutputName();
                String contentType = MimeTypes.getDefaultMimeByExtension(outputName);
                if (contentType != null) {
                    servletResponse.setContentType(contentType);
                }
                docRenderer.renderDocument(servletResponse.getWriter(), siteRenderer, context);

                if (docRenderer instanceof ReportDocumentRenderer) {
                    ReportDocumentRenderer reportDocumentRenderer = (ReportDocumentRenderer) docRenderer;
                    if (reportDocumentRenderer.isExternalReport()) {
                        Path externalReportFile = outputDirectory.toPath().resolve(outputName);
                        servletResponse.reset();
                        if (contentType != null) {
                            servletResponse.setContentType(contentType);
                        }
                        Files.copy(externalReportFile, servletResponse.getOutputStream());
                    }
                }

                return;
            } catch (RendererException e) {
                throw new ServletException(e);
            }
        } else if (generatedSiteContext != null) {
            try {
                Map<String, DocumentRenderer> locateDocuments =
                        siteRenderer.locateDocumentFiles(generatedSiteContext, false);

                if (locateDocuments.containsKey(path)) {
                    DocumentRenderer docRenderer = locateDocuments.get(path);
                    logDocumentRenderer(path, localeWanted, docRenderer);
                    String outputName = docRenderer.getOutputName();
                    String contentType = MimeTypes.getDefaultMimeByExtension(outputName);
                    if (contentType != null) {
                        servletResponse.setContentType(contentType);
                    }
                    docRenderer.renderDocument(servletResponse.getWriter(), siteRenderer, generatedSiteContext);

                    return;
                }
            } catch (RendererException e) {
                throw new ServletException(e);
            }
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }