//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.web.servlets;
import java.io.IOException;
import java.util.Optional;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpMethod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.net.MediaType;
import uk.gov.dstl.baleen.core.pipelines.BaleenPipeline;
import uk.gov.dstl.baleen.core.pipelines.BaleenPipelineManager;
import uk.gov.dstl.baleen.core.web.security.WebPermission;
/**
* Provides configuration YAML for pipelines (where available).
*
* Requires 'config.pipelines' role if security is enabled.
*/
public class PipelineConfigServlet extends AbstractApiServlet {
private static final long serialVersionUID = 1L;
private static final String TYPE = "pipelines";
private static final Logger LOGGER = LoggerFactory.getLogger(PipelineConfigServlet.class);
private final transient BaleenPipelineManager manager;
/**
* Instantiates a new pipeline config servlet.
*
* @param manager
* the manager
*/
public PipelineConfigServlet(BaleenPipelineManager manager) {
super(LOGGER, PipelineConfigServlet.class);
this.manager = manager;
}
@Override
public WebPermission[] getPermissions() {
return new WebPermission[] {
new WebPermission("Configuration of " + TYPE, HttpMethod.GET, "config." + TYPE) };
}
@Override
protected void get(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
if (name == null) {
respondWithBadArguments(resp);
return;
}
Optional<BaleenPipeline> pipeline = manager.get(name);
if (!pipeline.isPresent()) {
respondWithNotFound(resp);
} else {
String servletPath = req.getRequestURI();
if(servletPath == null)
servletPath = "";
while(servletPath.endsWith("/"))
servletPath = servletPath.substring(0, servletPath.length() - 1);
String[] parts = servletPath.split("/");
String action = "";
if(parts.length > 0)
action = parts[parts.length - 1];
if("ordered".equals(action)){
respond(resp, MediaType.PLAIN_TEXT_UTF_8, pipeline.get().orderedYaml());
}else{
respond(resp, MediaType.PLAIN_TEXT_UTF_8, pipeline.get().originalYaml());
}
}
}
}