use of com.google.gerrit.httpd.resources.Resource in project gerrit by GerritCodeReview.
the class HttpPluginServlet method onDefault.
private void onDefault(PluginHolder holder, HttpServletRequest req, HttpServletResponse res) throws IOException {
if (!"GET".equals(req.getMethod()) && !"HEAD".equals(req.getMethod())) {
CacheHeaders.setNotCacheable(res);
res.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
String pathInfo = RequestUtil.getEncodedPathInfo(req);
if (pathInfo.length() < 1) {
Resource.NOT_FOUND.send(req, res);
return;
}
checkCors(req, res);
String file = pathInfo.substring(1);
PluginResourceKey key = PluginResourceKey.create(holder.plugin, file);
Resource rsc = resourceCache.getIfPresent(key);
if (rsc != null && req.getHeader(HttpHeaders.IF_MODIFIED_SINCE) == null) {
rsc.send(req, res);
return;
}
String uri = req.getRequestURI();
if ("".equals(file)) {
res.sendRedirect(uri + holder.docPrefix + "index.html");
return;
}
if (file.startsWith(holder.staticPrefix)) {
if (holder.plugin.getApiType() == ApiType.JS) {
sendJsPlugin(holder.plugin, key, req, res);
} else {
PluginContentScanner scanner = holder.plugin.getContentScanner();
Optional<PluginEntry> entry = scanner.getEntry(file);
if (entry.isPresent()) {
if (hasUpToDateCachedResource(rsc, entry.get().getTime())) {
rsc.send(req, res);
} else {
sendResource(scanner, entry.get(), key, res);
}
} else {
resourceCache.put(key, Resource.NOT_FOUND);
Resource.NOT_FOUND.send(req, res);
}
}
} else if (file.equals(holder.docPrefix.substring(0, holder.docPrefix.length() - 1))) {
res.sendRedirect(uri + "/index.html");
} else if (file.startsWith(holder.docPrefix) && file.endsWith("/")) {
res.sendRedirect(uri + "index.html");
} else if (file.startsWith(holder.docPrefix)) {
PluginContentScanner scanner = holder.plugin.getContentScanner();
Optional<PluginEntry> entry = scanner.getEntry(file);
if (!entry.isPresent()) {
entry = findSource(scanner, file);
}
if (!entry.isPresent() && file.endsWith("/index.html")) {
String pfx = file.substring(0, file.length() - "index.html".length());
long pluginLastModified = lastModified(holder.plugin.getSrcFile());
if (hasUpToDateCachedResource(rsc, pluginLastModified)) {
rsc.send(req, res);
} else {
sendAutoIndex(scanner, pfx, holder.plugin.getName(), key, res, pluginLastModified);
}
} else if (entry.isPresent() && entry.get().getName().endsWith(".md")) {
if (hasUpToDateCachedResource(rsc, entry.get().getTime())) {
rsc.send(req, res);
} else {
sendMarkdownAsHtml(scanner, entry.get(), holder.plugin.getName(), key, res);
}
} else if (entry.isPresent()) {
if (hasUpToDateCachedResource(rsc, entry.get().getTime())) {
rsc.send(req, res);
} else {
sendResource(scanner, entry.get(), key, res);
}
} else {
resourceCache.put(key, Resource.NOT_FOUND);
Resource.NOT_FOUND.send(req, res);
}
} else {
resourceCache.put(key, Resource.NOT_FOUND);
Resource.NOT_FOUND.send(req, res);
}
}
Aggregations