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