package org.jenkins.tools.test.servlets;
import org.jenkins.tools.test.dao.PluginCompatResultDAO;
import org.jenkins.tools.test.model.MavenCoordinates;
import org.jenkins.tools.test.model.PluginCompatReport;
import org.jenkins.tools.test.servlets.util.JsonUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author fcamblor
*/
public class RetrieveResultsServlet extends HttpServlet {
private static class PluginMatcherFactory {
public static PluginCompatResultDAO.PluginMatcher create(HttpServletRequest req){
boolean everyPlugins = Boolean.valueOf(req.getParameter("everyPlugins")).booleanValue();
PluginCompatResultDAO.PluginMatcher pluginMatcher = null;
if(everyPlugins){
pluginMatcher = PluginCompatResultDAO.PluginMatcher.All.INSTANCE;
} else {
// Fixing JQuery parameters encoding (it suffixes arrayed parameter with [])
String[] paramValues = req.getParameterValues("plugins")!=null?req.getParameterValues("plugins")
:req.getParameterValues("plugins[]")!=null?req.getParameterValues("plugins[]"):new String[0];
List<String> plugins = Arrays.asList(paramValues);
pluginMatcher = new PluginCompatResultDAO.PluginMatcher.Parameterized(plugins);
}
return pluginMatcher;
}
}
private static class CoreMatcherFactory {
public static PluginCompatResultDAO.CoreMatcher create(HttpServletRequest req){
boolean everyCores = Boolean.valueOf(req.getParameter("everyCores")).booleanValue();
PluginCompatResultDAO.CoreMatcher coreMatcher = null;
if(everyCores){
coreMatcher = PluginCompatResultDAO.CoreMatcher.All.INSTANCE;
} else {
// Fixing JQuery parameters encoding (it suffixes arrayed parameter with [])
String[] paramValues = req.getParameterValues("cores")!=null?req.getParameterValues("cores")
:req.getParameterValues("cores[]")!=null?req.getParameterValues("cores[]"):new String[0];
List<String> coreGAV = Arrays.asList(paramValues);
// Converting GAVs into MavenCoordinates
List<MavenCoordinates> coreCoords = new ArrayList<MavenCoordinates>(coreGAV.size());
for(String gav : coreGAV){
coreCoords.add(MavenCoordinates.fromGAV(gav));
}
coreMatcher = new PluginCompatResultDAO.CoreMatcher.Parameterized(coreCoords);
}
return coreMatcher;
}
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PluginCompatReport report = PluginCompatResultDAO.INSTANCE.search(
PluginMatcherFactory.create(request), CoreMatcherFactory.create(request));
response.setContentType("application/json");
Writer out = response.getWriter();
JsonUtil.toJson(out, report);
out.flush();
}
}