package org.kantega.revoc.web;
import org.kantega.revoc.registry.Registry;
import org.kantega.revoc.source.CompondSourceSource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*
*/
public class SourcesServlet extends HttpServlet {
private final CompondSourceSource sourceSource;
private final String[] packages;
public SourcesServlet(CompondSourceSource sourceSource, String[] packages) {
this.sourceSource = sourceSource;
this.packages = packages;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String className = request.getRequestURI().substring("/sources/".length());
if(!isPackageMatch(className)) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
ClassLoader loader = Registry.getClassLoader(Integer.parseInt(request.getParameter("classLoader")));
String[] source = sourceSource.getSource(className, loader);
if(source == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} else {
response.setContentType("text/plain");
for(String line : source) {
response.getWriter().println(line);
}
}
}
private boolean isPackageMatch(String className) {
for (String p : packages) {
if(className.startsWith(p)) {
return true;
}
}
return false;
}
}