package net.sourceforge.solexatools.webapp.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sourceforge.seqware.common.business.ExperimentService;
import net.sourceforge.seqware.common.business.FileService;
import net.sourceforge.seqware.common.business.IUSService;
import net.sourceforge.seqware.common.business.LaneService;
import net.sourceforge.seqware.common.business.ProcessingService;
import net.sourceforge.seqware.common.business.SampleService;
import net.sourceforge.seqware.common.business.SequencerRunService;
import net.sourceforge.seqware.common.business.StudyService;
import net.sourceforge.seqware.common.business.WorkflowRunService;
import net.sourceforge.seqware.common.business.WorkflowService;
import net.sourceforge.seqware.common.model.Experiment;
import net.sourceforge.seqware.common.model.File;
import net.sourceforge.seqware.common.model.IUS;
import net.sourceforge.seqware.common.model.Lane;
import net.sourceforge.seqware.common.model.Processing;
import net.sourceforge.seqware.common.model.Sample;
import net.sourceforge.seqware.common.model.SequencerRun;
import net.sourceforge.seqware.common.model.Study;
import net.sourceforge.seqware.common.model.Workflow;
import net.sourceforge.seqware.common.model.WorkflowRun;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.BaseCommandController;
/**
* The controller. Dispatch to proper Entity determined by SWID.
*
* @author Oleg Lopatin
* @version $Id: $Id
*/
public class EntityController extends BaseCommandController {
// Services Used for Search
private StudyService studyService;
private ExperimentService experimentService;
private SampleService sampleService;
private IUSService IUSService;
private SequencerRunService sequencerRunService;
private LaneService laneService;
private ProcessingService processingService;
private FileService fileService;
private WorkflowService workflowService;
private WorkflowRunService workflowRunService;
/**
* <p>
* Constructor for EntityController.
* </p>
*/
public EntityController() {
}
/**
* <p>
* Setter for the field <code>studyService</code>.
* </p>
*
* @param studyService
* a {@link net.sourceforge.seqware.common.business.StudyService} object.
*/
public void setStudyService(StudyService studyService) {
this.studyService = studyService;
}
/**
* <p>
* Setter for the field <code>experimentService</code>.
* </p>
*
* @param experimentService
* a {@link net.sourceforge.seqware.common.business.ExperimentService} object.
*/
public void setExperimentService(ExperimentService experimentService) {
this.experimentService = experimentService;
}
/**
* <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>
* setIUSService.
* </p>
*
* @param iusService
* a {@link net.sourceforge.seqware.common.business.IUSService} object.
*/
public void setIUSService(IUSService iusService) {
this.IUSService = iusService;
}
/**
* <p>
* Setter for the field <code>sequencerRunService</code>.
* </p>
*
* @param sequencerRunService
* a {@link net.sourceforge.seqware.common.business.SequencerRunService} object.
*/
public void setSequencerRunService(SequencerRunService sequencerRunService) {
this.sequencerRunService = sequencerRunService;
}
/**
* <p>
* Setter for the field <code>laneService</code>.
* </p>
*
* @param laneService
* a {@link net.sourceforge.seqware.common.business.LaneService} object.
*/
public void setLaneService(LaneService laneService) {
this.laneService = laneService;
}
/**
* <p>
* Setter for the field <code>processingService</code>.
* </p>
*
* @param processingService
* a {@link net.sourceforge.seqware.common.business.ProcessingService} object.
*/
public void setProcessingService(ProcessingService processingService) {
this.processingService = processingService;
}
/**
* <p>
* Setter for the field <code>fileService</code>.
* </p>
*
* @param fileService
* a {@link net.sourceforge.seqware.common.business.FileService} object.
*/
public void setFileService(FileService fileService) {
this.fileService = fileService;
}
/**
* <p>
* Setter for the field <code>workflowService</code>.
* </p>
*
* @param workflowService
* a {@link net.sourceforge.seqware.common.business.WorkflowService} object.
*/
public void setWorkflowService(WorkflowService workflowService) {
this.workflowService = workflowService;
}
/**
* <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;
}
/**
* {@inheritDoc}
*
* @return
* @throws java.lang.Exception
*/
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
Object foundEntity = findEntity(request);
if (foundEntity == null) {
ModelAndView modelAndView = new ModelAndView("noswfound");
modelAndView.addObject("sw", request.getParameter("sw"));
return modelAndView;
}
ModelAndView modelAndView = getModel(foundEntity);
return modelAndView;
}
private ModelAndView getModel(Object foundEntity) {
ModelAndView modelAndView = null;
if (foundEntity instanceof Study) {
modelAndView = new ModelAndView("forward:/studyUpdateSetup.htm?studyID=" + ((Study) foundEntity).getStudyId() + "&report=yes");
} else if (foundEntity instanceof Experiment) {
modelAndView = new ModelAndView("forward:/experimentSetup.htm?experimentId=" + ((Experiment) foundEntity).getExperimentId()
+ "&report=yes");
} else if (foundEntity instanceof Sample) {
modelAndView = new ModelAndView("forward:/sampleSetup.htm?sampleId=" + ((Sample) foundEntity).getSampleId() + "&report=yes");
} else if (foundEntity instanceof IUS) {
modelAndView = new ModelAndView("forward:/iusSetup.htm?iusID=" + ((IUS) foundEntity).getIusId());
} else if (foundEntity instanceof SequencerRun) {
modelAndView = new ModelAndView("forward:/sequencerRunWizardEdit.htm?sequencerRunId="
+ ((SequencerRun) foundEntity).getSequencerRunId() + "&report=yes");
} else if (foundEntity instanceof Lane) {
modelAndView = new ModelAndView("forward:/laneSetup.htm?laneId=" + ((Lane) foundEntity).getLaneId() + "&report=yes");
} else if (foundEntity instanceof Processing) {
modelAndView = new ModelAndView("forward:/processingSetup.htm?procID=" + ((Processing) foundEntity).getProcessingId()
+ "&report=yes");
} else if (foundEntity instanceof File) {
modelAndView = new ModelAndView("forward:/fileSetup.htm?fileID=" + ((File) foundEntity).getFileId());
} else if (foundEntity instanceof Workflow) {
modelAndView = new ModelAndView("forward:/workflowSetup.htm?workflowId=" + ((Workflow) foundEntity).getWorkflowId()
+ "&report=yes");
} else if (foundEntity instanceof WorkflowRun) {
modelAndView = new ModelAndView("forward:/workflowRunSetup.htm?workflowRunId=" + ((WorkflowRun) foundEntity).getWorkflowRunId());
}
return modelAndView;
}
private Object findEntity(HttpServletRequest request) {
Integer sw = null;
try {
sw = Integer.valueOf(request.getParameter("sw"));
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
return null;
}
if (sw == null) return null;
Object res = studyService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = experimentService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = sampleService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = IUSService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = sequencerRunService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = laneService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = processingService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = fileService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = workflowService.findBySWAccession(sw);
if (res != null) {
return res;
}
res = workflowRunService.findBySWAccession(sw);
if (res != null) {
return res;
}
return null;
}
}