package org.openmrs.module.reporting.web.controller.portlet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
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.reporting.report.ReportProcessorConfiguration;
import org.openmrs.module.reporting.report.processor.ReportProcessor;
import org.openmrs.module.reporting.report.service.ReportService;
import org.openmrs.util.OpenmrsClassLoader;
/**
* This Controller loads a ReportDesign for editing
*/
public class ReportProcessorPortletController extends ReportingPortletController {
protected final Log log = LogFactory.getLog(getClass());
protected void populateModel(HttpServletRequest request, Map<String, Object> model) {
// TODO: Figure out why this is necessary.
Thread.currentThread().setContextClassLoader(OpenmrsClassLoader.getInstance());
model.put("portletUUID", UUID.randomUUID().toString().replace("-", ""));
// Get the uuid of the reportDesign, if supplied
ReportService rs = Context.getService(ReportService.class);
String processorUuid = (String)model.get("processorUuid");
ReportProcessorConfiguration reportProcessorConfiguration = new ReportProcessorConfiguration();
if (StringUtils.isNotEmpty(processorUuid)) {
reportProcessorConfiguration = rs.getReportProcessorConfigurationByUuid(processorUuid);
}
model.put("reportProcessorConfiguration", reportProcessorConfiguration);
List<Class<? extends ReportProcessor>> processorTypes = new ArrayList<Class<? extends ReportProcessor>>();
for (ReportProcessor p : Context.getRegisteredComponents(ReportProcessor.class)) {
processorTypes.add(p.getClass());
}
model.put("reportProcessorTypes", processorTypes);
model.put("reportDesigns", rs.getAllReportDesigns(false));
}
}