package net.sourceforge.solexatools.webapp.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sourceforge.seqware.common.business.WorkflowParamValueService;
import net.sourceforge.seqware.common.model.Registration;
import net.sourceforge.seqware.common.model.Workflow;
import net.sourceforge.seqware.common.model.WorkflowParam;
import net.sourceforge.seqware.common.model.WorkflowParamValue;
import net.sourceforge.solexatools.Security;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
/**
* <p>
* WorkflowParamValueController class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class WorkflowParamValueController extends MultiActionController {
// private WorkflowParamService workflowParamService;
private WorkflowParamValueService workflowParamValueService;
private Validator validator;
/**
* <p>
* Constructor for WorkflowParamValueController.
* </p>
*/
public WorkflowParamValueController() {
super();
}
/**
* <p>
* Constructor for WorkflowParamValueController.
* </p>
*
* @param delegate
* a {@link java.lang.Object} object.
*/
public WorkflowParamValueController(Object delegate) {
super(delegate);
}
/**
* <p>
* Getter for the field <code>validator</code>.
* </p>
*
* @return a {@link org.springframework.validation.Validator} object.
*/
public Validator getValidator() {
return validator;
}
/**
* <p>
* Setter for the field <code>validator</code>.
* </p>
*
* @param validator
* a {@link org.springframework.validation.Validator} object.
*/
public void setValidator(Validator validator) {
this.validator = validator;
}
/*
* public WorkflowParamService getWorkflowParamService() { return workflowParamService; }
*
* public void setWorkflowParamService(WorkflowParamService workflowParamService) { this.workflowParamService = workflowParamService; }
*/
/**
* <p>
* Getter for the field <code>workflowParamValueService</code>.
* </p>
*
* @return a {@link net.sourceforge.seqware.common.business.WorkflowParamValueService} object.
*/
public WorkflowParamValueService getWorkflowParamValueService() {
return workflowParamValueService;
}
/**
* <p>
* Setter for the field <code>workflowParamValueService</code>.
* </p>
*
* @param workflowParamValueService
* a {@link net.sourceforge.seqware.common.business.WorkflowParamValueService} object.
*/
public void setWorkflowParamValueService(WorkflowParamValueService workflowParamValueService) {
this.workflowParamValueService = workflowParamValueService;
}
/**
* Handles the user's request to submit a new study.
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @param command
* Study command object
* @return ModelAndView
* @throws java.lang.Exception
* if any.
*/
public ModelAndView handleSubmit(HttpServletRequest request, HttpServletResponse response, WorkflowParamValue command) throws Exception {
Registration registration = Security.getRegistration(request);
if (registration == null) return new ModelAndView("redirect:/login.htm");
ModelAndView modelAndView = null;
BindingResult errors = this.validateWorkflowParamValue(request, command);
if (errors.hasErrors()) {
Map model = errors.getModel();
model.put("strategy", "submit");
modelAndView = new ModelAndView("WorkflowParam", model);
} else {
WorkflowParam workflowParam = getCurrentWorkflowParam(request);
command.setWorkflowParam(workflowParam);
getWorkflowParamValueService().insert(command);
String isAddValue = request.getParameter("isAddValue");
if ("true".equals(isAddValue)) {
modelAndView = new ModelAndView("redirect:/workflowParamValueSetup.htm");
modelAndView.addObject("workflowParamId", workflowParam.getWorkflowParamId());
} else {
modelAndView = new ModelAndView("redirect:/workflowSetup.htm");
modelAndView.addObject("workflowId", getCurrentWorkflow(request).getWorkflowId());
}
}
return modelAndView;
}
/**
* Handles the user's request to reset the study page during a new or update study.
*
* @param command
* Study command object
* @param request
* a {@link javax.servlet.http.HttpServletRequest} object.
* @param response
* a {@link javax.servlet.http.HttpServletResponse} object.
* @return a {@link org.springframework.web.servlet.ModelAndView} object.
* @throws java.lang.Exception
* if any.
*/
public ModelAndView handleReset(HttpServletRequest request, HttpServletResponse response, Workflow command) throws Exception {
ModelAndView modelAndView = null;
return modelAndView;
}
/**
* Handles the user's request to cancel the study or the study update page.
*
* @param command
* Study command object
* @param request
* a {@link javax.servlet.http.HttpServletRequest} object.
* @param response
* a {@link javax.servlet.http.HttpServletResponse} object.
* @return a {@link org.springframework.web.servlet.ModelAndView} object.
* @throws java.lang.Exception
* if any.
*/
public ModelAndView handleCancel(HttpServletRequest request, HttpServletResponse response, Workflow command) throws Exception {
ModelAndView modelAndView = new ModelAndView("redirect:/workflowSetup.htm");
modelAndView.addObject("workflowId", getCurrentWorkflow(request).getWorkflowId());
return modelAndView;
}
/**
* Handles the user's request to update their study.
*
* @param command
* Study command object
* @param request
* a {@link javax.servlet.http.HttpServletRequest} object.
* @param response
* a {@link javax.servlet.http.HttpServletResponse} object.
* @return a {@link org.springframework.web.servlet.ModelAndView} object.
* @throws java.lang.Exception
* if any.
*/
public ModelAndView handleUpdate(HttpServletRequest request, HttpServletResponse response, WorkflowParamValue command) throws Exception {
Registration registration = Security.getRegistration(request);
if (registration == null) return new ModelAndView("redirect:/login.htm");
ModelAndView modelAndView = null;
BindingResult errors = this.validateWorkflowParamValue(request, command);
if (errors.hasErrors()) {
Map model = errors.getModel();
model.put("strategy", "update");
modelAndView = new ModelAndView("WorkflowParamValue", model);
} else {
WorkflowParamValue newWorkflowParamValue = command;
WorkflowParamValue oldWorkflowParamValue = getCurrentWorkflowParamValue(request);
if (newWorkflowParamValue != null && oldWorkflowParamValue != null) {
new ServletRequestDataBinder(oldWorkflowParamValue).bind(request);
getWorkflowParamValueService().update(oldWorkflowParamValue);
modelAndView = new ModelAndView("redirect:/workflowSetup.htm");
modelAndView.addObject("workflowId", getCurrentWorkflow(request).getWorkflowId());
} else {
modelAndView = new ModelAndView("redirect:/Error.htm");
}
}
request.getSession(false).removeAttribute("Workflow");
return modelAndView;
}
/**
* Handles the user's request to delete their study.
*
* @param command
* Study command object
* @param request
* a {@link javax.servlet.http.HttpServletRequest} object.
* @param response
* a {@link javax.servlet.http.HttpServletResponse} object.
* @return a {@link org.springframework.web.servlet.ModelAndView} object.
* @throws java.lang.Exception
* if any.
*/
public ModelAndView handleDelete(HttpServletRequest request, HttpServletResponse response, WorkflowParamValue command) throws Exception {
Registration registration = Security.getRegistration(request);
if (registration == null) return new ModelAndView("redirect:/login.htm");
ModelAndView modelAndView = null;
// HashMap<String,Object> model = new HashMap<String,Object>();
// WorkflowParam workflowParam = getRequestedWorkflowParam(request);
WorkflowParamValue workflowParamValue = getRequestedWorkflowParamValue(request);
if (workflowParamValue != null) {
if (registration.isLIMSAdmin()) {
getWorkflowParamValueService().delete(workflowParamValue);
}
}
modelAndView = new ModelAndView("redirect:/workflowSetup.htm");
modelAndView.addObject("workflowId", getCurrentWorkflow(request).getWorkflowId());
return modelAndView;
}
/**
* Validates a study.
*
* @param command
* the Command instance as an Object
*
* @return BindingResult validation errors
*/
private BindingResult validateWorkflowParamValue(HttpServletRequest request, Object command) {
BindingResult errors = new BindException(command, getCommandName(command));
// ValidationUtils.invokeValidator(getValidator(), command, errors);
return errors;
}
/**
* Gets the study from the session.
*
* @param request
* HttpServletRequest
*
* @return instance of Study from the session, or a new instance if the study is not in the session (e.g. the user is not logged in)
*/
private WorkflowParam getCurrentWorkflowParam(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
Object workflowParam = session.getAttribute("workflowParam");
if (workflowParam != null) {
return (WorkflowParam) workflowParam;
}
}
return new WorkflowParam();
}
private WorkflowParamValue getRequestedWorkflowParamValue(HttpServletRequest request) {
WorkflowParamValue workflowParamValue = null;
String id = (String) request.getParameter("objectId");
if (id != null) {
Integer workflowParamValueId = Integer.parseInt(id);
workflowParamValue = getWorkflowParamValueService().findByID(workflowParamValueId);
}
return workflowParamValue;
}
private Workflow getCurrentWorkflow(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
Object workflow = session.getAttribute("workflow");
if (workflow != null) {
return (Workflow) workflow;
}
}
return new Workflow();
}
private WorkflowParamValue getCurrentWorkflowParamValue(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
Object workflowParamValue = session.getAttribute("workflowParamValue");
if (workflowParamValue != null) {
return (WorkflowParamValue) workflowParamValue;
}
}
return new WorkflowParamValue();
}
}