package net.sourceforge.solexatools.webapp.controller;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sourceforge.seqware.common.business.SampleService;
import net.sourceforge.seqware.common.business.WorkflowRunService;
import net.sourceforge.seqware.common.model.IUS;
import net.sourceforge.seqware.common.model.Registration;
import net.sourceforge.seqware.common.model.Sample;
import net.sourceforge.seqware.common.model.Workflow;
import net.sourceforge.seqware.common.model.WorkflowRun;
import net.sourceforge.solexatools.Security;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.BaseCommandController;
/**
* <p>
* SampleWorkflowRunsController class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class SampleWorkflowRunsController extends BaseCommandController {
// Services
private SampleService sampleService;
private WorkflowRunService workflowRunService;
// URL Params
/** Constant <code>SAMPLE_SWID="sw"</code> */
public static final String SAMPLE_SWID = "sw";
/**
* {@inheritDoc}
*
* @return
* @throws java.lang.Exception
*/
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
Registration registration = Security.getRegistration(request);
if (registration == null) {
return new ModelAndView("redirect:/login.htm");
}
String idStr = request.getParameter(SAMPLE_SWID);
int sampleId = 0;
try {
sampleId = Integer.parseInt(idStr);
} catch (NumberFormatException e) {
e.printStackTrace();
}
Map<Workflow, Set<WorkflowRun>> tableModel = new HashMap<>();
Set<Workflow> usedWorkflows = new HashSet<>();
Sample currentSample = sampleService.findBySWAccession(sampleId);
if (currentSample != null) {
Set<WorkflowRun> runs = new HashSet<>();
for (IUS ius : currentSample.getIUS()) {
// Get All required runs belongs to Sample IUSs
runs.addAll(workflowRunService.findRunsForIUS(ius));
}
// Now map each workflowRun to its workflow
for (WorkflowRun run : runs) {
Workflow wf = run.getWorkflow();
Set<WorkflowRun> wfWorkflowRuns = tableModel.get(wf);
// If no mapping for current Workflow
if (wfWorkflowRuns == null) {
wfWorkflowRuns = new HashSet<>();
}
wfWorkflowRuns.add(run);
tableModel.put(wf, wfWorkflowRuns);
usedWorkflows.add(wf);
}
ModelAndView modelAndView = new ModelAndView("StudySampleWorkflowRuns");
modelAndView.addObject("usedWorkflows", usedWorkflows);
modelAndView.addObject("tableModel", tableModel);
modelAndView.addObject("sample", currentSample);
return modelAndView;
} else {
throw new Exception("Wrong value for Study SWID " + idStr);
}
}
/**
* <p>
* Setter for the field <code>sampleService</code>.
* </p>
*
* @param sampleService
* a {@link net.sourceforge.seqware.common.business.SampleService} object.
*/
public void setSampleService(SampleService sampleService) {
this.sampleService = sampleService;
}
/**
* <p>
* Setter for the field <code>workflowRunService</code>.
* </p>
*
* @param workflowRunService
* a {@link net.sourceforge.seqware.common.business.WorkflowRunService} object.
*/
public void setWorkflowRunService(WorkflowRunService workflowRunService) {
this.workflowRunService = workflowRunService;
}
}