Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 13th, 2012  |  syntax: None  |  size: 10.79 KB  |  hits: 34  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**
  2.  * The contents of this file are subject to the OpenMRS Public License
  3.  * Version 1.0 (the "License"); you may not use this file except in
  4.  * compliance with the License. You may obtain a copy of the License at
  5.  * http://license.openmrs.org
  6.  *
  7.  * Software distributed under the License is distributed on an "AS IS"
  8.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  9.  * License for the specific language governing rights and limitations
  10.  * under the License.
  11.  *
  12.  * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
  13.  */
  14.  
  15. package org.openmrs.module.reporting.summary;
  16.  
  17. import java.util.Arrays;
  18. import java.util.Date;
  19. import java.util.List;
  20.  
  21. import org.apache.commons.lang.StringUtils;
  22. import org.apache.commons.logging.Log;
  23. import org.apache.commons.logging.LogFactory;
  24. import org.junit.Before;
  25. import org.junit.Test;
  26. import org.openmrs.PatientIdentifier;
  27. import org.openmrs.PersonName;
  28. import org.openmrs.api.EncounterService;
  29. import org.openmrs.api.PatientService;
  30. import org.openmrs.api.PatientSetService;
  31. import org.openmrs.api.context.Context;
  32. import org.openmrs.module.reporting.common.Age;
  33. import org.openmrs.module.reporting.common.TimeQualifier;
  34. import org.openmrs.module.reporting.data.converter.AgeConverter;
  35. import org.openmrs.module.reporting.data.converter.BirthdateConverter;
  36. import org.openmrs.module.reporting.data.converter.DataConverter;
  37. import org.openmrs.module.reporting.data.converter.DateConverter;
  38. import org.openmrs.module.reporting.data.converter.ListConverter;
  39. import org.openmrs.module.reporting.data.converter.ObjectFormatter;
  40. import org.openmrs.module.reporting.data.converter.PropertyConverter;
  41. import org.openmrs.module.reporting.data.encounter.definition.EncounterDatetimeDataDefinition;
  42. import org.openmrs.module.reporting.data.encounter.definition.EncounterIdDataDefinition;
  43. import org.openmrs.module.reporting.data.encounter.definition.EncounterLocationDataDefinition;
  44. import org.openmrs.module.reporting.data.encounter.definition.EncounterProviderDataDefinition;
  45. import org.openmrs.module.reporting.data.encounter.definition.EncounterTypeDataDefinition;
  46. import org.openmrs.module.reporting.data.obs.definition.ObsCodedDataDefinition;
  47. import org.openmrs.module.reporting.data.obs.definition.ObsConceptDataDefinition;
  48. import org.openmrs.module.reporting.data.obs.definition.ObsDateDataDefinition;
  49. import org.openmrs.module.reporting.data.obs.definition.ObsDatetimeDataDefinition;
  50. import org.openmrs.module.reporting.data.obs.definition.ObsIdDataDefinition;
  51. import org.openmrs.module.reporting.data.obs.definition.ObsNumericDataDefinition;
  52. import org.openmrs.module.reporting.data.patient.definition.PatientIdDataDefinition;
  53. import org.openmrs.module.reporting.data.patient.definition.PatientIdentifierDataDefinition;
  54. import org.openmrs.module.reporting.data.person.definition.AgeDataDefinition;
  55. import org.openmrs.module.reporting.data.person.definition.BirthdateDataDefinition;
  56. import org.openmrs.module.reporting.data.person.definition.GenderDataDefinition;
  57. import org.openmrs.module.reporting.data.person.definition.PreferredNameDataDefinition;
  58. import org.openmrs.module.reporting.dataset.DataSetUtil;
  59. import org.openmrs.module.reporting.dataset.SimpleDataSet;
  60. import org.openmrs.module.reporting.dataset.definition.EncounterDataSetDefinition;
  61. import org.openmrs.module.reporting.dataset.definition.ObsDataSetDefinition;
  62. import org.openmrs.module.reporting.dataset.definition.PatientDataSetDefinition;
  63. import org.openmrs.module.reporting.dataset.definition.service.DataSetDefinitionService;
  64. import org.openmrs.module.reporting.evaluation.EvaluationContext;
  65. import org.openmrs.module.reporting.evaluation.parameter.Parameter;
  66. import org.openmrs.module.reporting.query.encounter.definition.BasePatientEncounterQuery;
  67. import org.openmrs.module.reporting.query.obs.definition.CodedObsQuery;
  68. import org.openmrs.module.reporting.query.obs.definition.DateObsQuery;
  69. import org.openmrs.module.reporting.query.obs.definition.NumericObsQuery;
  70. import org.openmrs.module.reporting.report.ReportData;
  71. import org.openmrs.module.reporting.report.definition.ReportDefinition;
  72. import org.openmrs.module.reporting.report.definition.service.ReportDefinitionService;
  73. import org.openmrs.module.reporting.report.renderer.CsvReportRenderer;
  74. import org.openmrs.module.reporting.report.renderer.SummaryXmlReportRenderer;
  75. import org.openmrs.test.BaseModuleContextSensitiveTest;
  76. import org.openmrs.test.TestUtil;
  77.  
  78. public class PatientDataSetDefinitionTest extends BaseModuleContextSensitiveTest {
  79.  
  80.     private static final Log log = LogFactory.getLog(PatientDataSetDefinition.class);
  81.  
  82.     @Before
  83.     public void setup() throws Exception {
  84.         executeDataSet("org/openmrs/module/reporting/include/ReportTestDataset.xml");
  85.     }
  86.  
  87.     private EvaluationContext prepareEvaluationContext() {
  88.         PatientService patientService = Context.getPatientService();
  89.         EncounterService encounterService = Context.getEncounterService();
  90.  
  91.         EvaluationContext context = new EvaluationContext();
  92.         context.addParameterValue("currentDate", new Date());
  93.         context.addParameterValue("identifierTypes",
  94.                 Arrays.asList(patientService.getPatientIdentifierType(1), patientService.getPatientIdentifierType(2)));
  95.         context.addParameterValue("encounterTypes",
  96.                 Arrays.asList(encounterService.getEncounterType(1), encounterService.getEncounterType(2), encounterService.getEncounterType(6)));
  97.  
  98.         return context;
  99.     }
  100.  
  101.     @Test
  102.     public void generateSummary() throws Exception {
  103.  
  104.         PatientDataSetDefinition definition = new PatientDataSetDefinition();
  105.  
  106.         definition.addColumn("id", new PatientIdDataDefinition(), StringUtils.EMPTY, new ObjectFormatter());
  107.  
  108.         ListConverter listConverter = new ListConverter();
  109.         listConverter.setMaxNumberOfItems(1);
  110.  
  111.         PatientIdentifierDataDefinition preferredIdentifier = new PatientIdentifierDataDefinition();
  112.         preferredIdentifier.addParameter(new Parameter("types", "identifier types", PatientIdentifier.class));
  113.         definition.addColumn("identifier", preferredIdentifier, "types=${identifierTypes}", listConverter);
  114.  
  115.         definition.addColumn("name", new PreferredNameDataDefinition(), StringUtils.EMPTY, new ObjectFormatter("{familyName}, {givenName}"));
  116.  
  117.         AgeDataDefinition ageOnDate = new AgeDataDefinition();
  118.         ageOnDate.addParameter(new Parameter("effectiveDate", "effective date", Date.class));
  119.         definition.addColumn("age", ageOnDate, "effectiveDate=${currentDate}", new AgeConverter());
  120.  
  121.         definition.addColumn("birthdate", new BirthdateDataDefinition(), StringUtils.EMPTY, new BirthdateConverter("dd-MMM-yyyy"));
  122.         definition.addColumn("gender", new GenderDataDefinition(), StringUtils.EMPTY, new ObjectFormatter());
  123.  
  124.         DateObsQuery returnVisitQuery = new DateObsQuery();
  125.         returnVisitQuery.setTimeModifier(PatientSetService.TimeModifier.LAST);
  126.         returnVisitQuery.addConcept(Context.getConceptService().getConcept(20));
  127.  
  128.         ObsDataSetDefinition returnVisit = new ObsDataSetDefinition();
  129.         returnVisit.addRowFilter(returnVisitQuery, null);
  130.         returnVisit.addColumn("return-visit-date", new ObsDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  131.         definition.addColumns("return-visit", returnVisit, null);
  132.  
  133.         BasePatientEncounterQuery recentEncounterQuery = new BasePatientEncounterQuery();
  134.         recentEncounterQuery.setTimeModifier(PatientSetService.TimeModifier.LAST);
  135.         recentEncounterQuery.addParameter(new Parameter("encounterTypes", "encounter types", List.class));
  136.  
  137.         EncounterDataSetDefinition recentEncounterDataSet = new EncounterDataSetDefinition();
  138.         recentEncounterDataSet.addRowFilter(recentEncounterQuery, "encounterTypes=${encounterTypes}");
  139.         recentEncounterDataSet.addColumn("last-encounter-id", new EncounterIdDataDefinition(), null, new ObjectFormatter());
  140.         recentEncounterDataSet.addColumn("last-encounter-type", new EncounterTypeDataDefinition(), null, new ObjectFormatter());
  141.         recentEncounterDataSet.addColumn("last-encounter-location", new EncounterLocationDataDefinition(), null, new ObjectFormatter());
  142.         recentEncounterDataSet.addColumn("last-encounter-provider", new EncounterProviderDataDefinition(), null, new PropertyConverter(PersonName.class, "personName"), new ObjectFormatter("{familyName}, {givenName}"));
  143.         recentEncounterDataSet.addColumn("last-encounter-provider-age", new EncounterProviderDataDefinition(), null, new PropertyConverter(Age.class, "age"), new ObjectFormatter());
  144.         recentEncounterDataSet.addColumn("last-encounter-date", new EncounterDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  145.  
  146.         definition.addColumns("last-visit", recentEncounterDataSet, null);
  147.  
  148.         BasePatientEncounterQuery firstEncounterQuery = new BasePatientEncounterQuery();
  149.         firstEncounterQuery.setTimeModifier(PatientSetService.TimeModifier.FIRST);
  150.         firstEncounterQuery.addParameter(new Parameter("encounterTypes", "encounter types", List.class));
  151.  
  152.         EncounterDataSetDefinition firstEncounterDataSet = new EncounterDataSetDefinition();
  153.         firstEncounterDataSet.addRowFilter(firstEncounterQuery, "encounterTypes=${encounterTypes}");
  154.         firstEncounterDataSet.addColumn("first-encounter-id", new EncounterIdDataDefinition(), null, new ObjectFormatter());
  155.         firstEncounterDataSet.addColumn("first-encounter-type", new EncounterTypeDataDefinition(), null, new ObjectFormatter());
  156.         firstEncounterDataSet.addColumn("first-encounter-date", new EncounterDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  157.  
  158.         definition.addColumns("first-visit", firstEncounterDataSet, null);
  159.  
  160.         CodedObsQuery cxrQuery = new CodedObsQuery();
  161.         cxrQuery.addConcept(Context.getConceptService().getConcept(21));
  162.  
  163.         ObsDataSetDefinition cxr = new ObsDataSetDefinition();
  164.         cxr.addRowFilter(cxrQuery, null);
  165.         cxr.addColumn("obs-datetime", new ObsDateDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  166.         cxr.addColumn("value-coded", new ObsCodedDataDefinition(), null, new ObjectFormatter());
  167.         definition.addColumns("cxr", cxr, null);
  168.  
  169.         ReportDefinition reportDefinition = new ReportDefinition();
  170.         reportDefinition.setName("Test Report");
  171.         reportDefinition.addDataSetDefinition("Patient Dataset Definition", definition, null);
  172.         ReportDefinitionService reportDefinitionService = Context.getService(ReportDefinitionService.class);
  173.         ReportData data = reportDefinitionService.evaluate(reportDefinition, prepareEvaluationContext());
  174.  
  175.         SummaryXmlReportRenderer summaryRenderer = new SummaryXmlReportRenderer();
  176.         summaryRenderer.render(data, "thedata", System.out);
  177.     }
  178. }