package org.openmrs.module.reporting.web.controller; import java.util.Iterator; import java.util.List; import org.openmrs.api.context.Context; import org.openmrs.module.reporting.definition.DefinitionContext; import org.openmrs.module.reporting.report.definition.ReportDefinition; import org.openmrs.module.reporting.report.renderer.InteractiveReportRenderer; import org.openmrs.module.reporting.report.renderer.RenderingMode; import org.openmrs.module.reporting.report.service.ReportService; import org.openmrs.module.reporting.web.util.AjaxUtil; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class AjaxController { @RequestMapping("/module/reporting/ajax/getRenderingModes") public String getRenderingModes(Model model, @RequestParam("reportDefinitionUuid") String reportUuid, @RequestParam(value="includeInteractiveRenderers", required=false) Boolean includeInteractive, @RequestParam(value="includeFileRenderers", required=false) Boolean includeFile) throws Exception { if (includeInteractive == null) includeInteractive = false; if (includeFile == null) includeFile = true; ReportDefinition rd = DefinitionContext.getDefinitionByUuid(ReportDefinition.class, reportUuid); List<RenderingMode> modes = Context.getService(ReportService.class).getRenderingModes(rd); if (!includeInteractive || !includeFile) { for (Iterator<RenderingMode> i = modes.iterator(); i.hasNext(); ) { RenderingMode mode = i.next(); boolean isInteractive = mode.getRenderer() instanceof InteractiveReportRenderer; if ( (!includeInteractive && isInteractive) || (!includeFile && !isInteractive) ) { i.remove(); } } } model.addAttribute("json", AjaxUtil.toJson(modes)); return "/module/reporting/json"; } }