package org.openmrs.module.reporting.web.controller.portlet;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openmrs.api.context.Context;
import org.openmrs.module.htmlwidgets.web.handler.WidgetHandler;
import org.openmrs.module.reporting.report.ReportProcessorConfiguration;
import org.openmrs.module.reporting.report.ReportProcessorConfiguration.ProcessorMode;
import org.openmrs.module.reporting.report.service.ReportService;
import org.openmrs.util.HandlerUtil;
import org.openmrs.web.WebConstants;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ReportProcessorFormController {
protected static Log log = LogFactory.getLog(ReportProcessorFormController.class);
/**
* Default Constructor
*/
public ReportProcessorFormController() { }
/**
* Saves report design
*/
@RequestMapping("/module/reporting/reports/saveReportProcessor")
public String saveReportProcessor(ModelMap model, HttpServletRequest request,
@RequestParam(required=false, value="uuid") String uuid,
@RequestParam(required=true, value="name") String name,
@RequestParam(required=false, value="description") String description,
@RequestParam(required=true, value="processorType") String processorType,
@RequestParam(required=true, value="processorMode") ProcessorMode processorMode,
@RequestParam(required=false, value="configuration") String configuration,
@RequestParam(required=false, value="runOnSuccess") String runOnSuccess,
@RequestParam(required=false, value="runOnError") String runOnError,
@RequestParam(required=false, value="reportDesignUuid") String reportDesignUuid
) {
ReportService rs = Context.getService(ReportService.class);
ReportProcessorConfiguration c = rs.getReportProcessorConfigurationByUuid(uuid);
if (c == null) {
c = new ReportProcessorConfiguration();
}
c.setName(name);
c.setDescription(description);
c.setProcessorType(processorType);
c.setProcessorMode(processorMode);
c.setRunOnSuccess("t".equals(runOnSuccess));
c.setRunOnError("t".equals(runOnError));
c.setReportDesign(rs.getReportDesignByUuid(reportDesignUuid));
WidgetHandler propHandler = HandlerUtil.getPreferredHandler(WidgetHandler.class, Properties.class);
Properties props = (Properties)propHandler.parse(configuration, Properties.class);
c.setConfiguration(props);
c = rs.saveReportProcessorConfiguration(c);
return "redirect:/module/reporting/closeWindow.htm";
}
/**
* Delete report design
*/
@RequestMapping("/module/reporting/reports/deleteReportProcessor")
public String deleteReportDesign(ModelMap model, HttpServletRequest request,
@RequestParam(required=true, value="uuid") String uuid,
@RequestParam(required=false, value="returnUrl") String returnUrl) {
ReportService rs = Context.getService(ReportService.class);
ReportProcessorConfiguration c = rs.getReportProcessorConfigurationByUuid(uuid);
rs.purgeReportProcessorConfiguration(c);
String pathToRemove = "/" + WebConstants.WEBAPP_NAME;
if (StringUtils.isEmpty(returnUrl)) {
returnUrl = "/module/reporting/reports/manageReportProcessors.form";
}
else if (returnUrl.startsWith(pathToRemove)) {
returnUrl = returnUrl.substring(pathToRemove.length());
}
return "redirect:"+returnUrl;
}
}