package org.openmrs.module.reporting.web.cohorts; import org.openmrs.api.context.Context; import org.openmrs.module.reporting.cohort.definition.CohortDefinition; import org.openmrs.module.reporting.cohort.definition.CompositionCohortDefinition; import org.openmrs.module.reporting.cohort.definition.service.CohortDefinitionService; 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; import org.springframework.web.context.request.WebRequest; @Controller public class CompositionCohortDefinitionController { @RequestMapping("/module/reporting/cohorts/compositionCohortDefinition") public void showForm(ModelMap model, @RequestParam(value="uuid", required=false) String uuid, @RequestParam(value="copyFromUuid", required=false) String copyFromUuid) { if (uuid == null) { model.addAttribute("definition", new CompositionCohortDefinition()); } else { CohortDefinition def = Context.getService(CohortDefinitionService.class).getDefinitionByUuid(uuid); if (def instanceof CompositionCohortDefinition) { CompositionCohortDefinition definition = (CompositionCohortDefinition) def; model.addAttribute("definition", definition); } else { throw new RuntimeException("This definition is not of the right class"); } } } @RequestMapping("/module/reporting/cohorts/compositionCohortDefinitionSetComposition") public String setComposition(@RequestParam("uuid") String uuid, @RequestParam("compositionString") String compositionString) { CohortDefinition def = Context.getService(CohortDefinitionService.class).getDefinitionByUuid(uuid); CompositionCohortDefinition definition = (CompositionCohortDefinition) def; definition.setCompositionString(compositionString); Context.getService(CohortDefinitionService.class).saveDefinition(definition); return "redirect:/module/reporting/definition/manageDefinitions.form?type="+CohortDefinition.class.getName(); } /** * Copies the composition cohort definition with the given uuid into another one with the same * parameters and searches, but blank name/description and composition string * * @param uuid * @return */ @RequestMapping("/module/reporting/cohorts/compositionCohortDefinitionClone") public String cloneDefinition(WebRequest request, @RequestParam("name") String name, @RequestParam(value="description", required=false) String description, @RequestParam("copyFromUuid") String copyFromUuid) { CohortDefinition def = Context.getService(CohortDefinitionService.class).getDefinitionByUuid(copyFromUuid); CompositionCohortDefinition from = (CompositionCohortDefinition) def; CompositionCohortDefinition clone = new CompositionCohortDefinition(); clone.setId(null); clone.setName(name); clone.setDescription(description); clone.setParameters(from.getParameters()); clone.setSearches(from.getSearches()); clone.setCompositionString(from.getCompositionString()); Context.getService(CohortDefinitionService.class).saveDefinition(clone); request.setAttribute(WebConstants.OPENMRS_MSG_ATTR, "Saved as a new copy", WebRequest.SCOPE_SESSION); return "redirect:compositionCohortDefinition.form?uuid=" + clone.getUuid(); } }