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

Untitled

By: a guest on May 2nd, 2012  |  syntax: Java  |  size: 8.60 KB  |  hits: 12  |  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.data.converter.AgeConverter;
  34. import org.openmrs.module.reporting.data.converter.BirthdateConverter;
  35. import org.openmrs.module.reporting.data.converter.DateConverter;
  36. import org.openmrs.module.reporting.data.converter.ListConverter;
  37. import org.openmrs.module.reporting.data.converter.ObjectFormatter;
  38. import org.openmrs.module.reporting.data.converter.PropertyConverter;
  39. import org.openmrs.module.reporting.data.encounter.definition.EncounterDatetimeDataDefinition;
  40. import org.openmrs.module.reporting.data.encounter.definition.EncounterIdDataDefinition;
  41. import org.openmrs.module.reporting.data.encounter.definition.EncounterLocationDataDefinition;
  42. import org.openmrs.module.reporting.data.encounter.definition.EncounterProviderDataDefinition;
  43. import org.openmrs.module.reporting.data.encounter.definition.EncounterTypeDataDefinition;
  44. import org.openmrs.module.reporting.data.obs.definition.ObsDatetimeDataDefinition;
  45. import org.openmrs.module.reporting.data.patient.definition.PatientIdDataDefinition;
  46. import org.openmrs.module.reporting.data.patient.definition.PatientIdentifierDataDefinition;
  47. import org.openmrs.module.reporting.data.person.definition.AgeDataDefinition;
  48. import org.openmrs.module.reporting.data.person.definition.BirthdateDataDefinition;
  49. import org.openmrs.module.reporting.data.person.definition.GenderDataDefinition;
  50. import org.openmrs.module.reporting.data.person.definition.PreferredNameDataDefinition;
  51. import org.openmrs.module.reporting.dataset.DataSetUtil;
  52. import org.openmrs.module.reporting.dataset.SimpleDataSet;
  53. import org.openmrs.module.reporting.dataset.definition.EncounterDataSetDefinition;
  54. import org.openmrs.module.reporting.dataset.definition.ObsDataSetDefinition;
  55. import org.openmrs.module.reporting.dataset.definition.PatientDataSetDefinition;
  56. import org.openmrs.module.reporting.dataset.definition.service.DataSetDefinitionService;
  57. import org.openmrs.module.reporting.evaluation.EvaluationContext;
  58. import org.openmrs.module.reporting.evaluation.parameter.Parameter;
  59. import org.openmrs.module.reporting.query.encounter.definition.BasePatientEncounterQuery;
  60. import org.openmrs.module.reporting.query.obs.definition.DateObsQuery;
  61. import org.openmrs.test.BaseModuleContextSensitiveTest;
  62.  
  63. public class PatientDataSetDefinitionTest extends BaseModuleContextSensitiveTest {
  64.  
  65.         private static final Log log = LogFactory.getLog(PatientDataSetDefinition.class);
  66.  
  67.         @Before
  68.         public void setup() throws Exception {
  69.                 executeDataSet("org/openmrs/module/reporting/include/ReportTestDataset.xml");
  70.         }
  71.  
  72.         private EvaluationContext prepareEvaluationContext() {
  73.                 PatientService patientService = Context.getPatientService();
  74.                 EncounterService encounterService = Context.getEncounterService();
  75.  
  76.                 EvaluationContext context = new EvaluationContext();
  77.                 context.addParameterValue("currentDate", new Date());
  78.                 context.addParameterValue("identifierTypes",
  79.                                 Arrays.asList(patientService.getPatientIdentifierType(1), patientService.getPatientIdentifierType(2)));
  80.                 context.addParameterValue("encounterTypes",
  81.                                 Arrays.asList(encounterService.getEncounterType(1), encounterService.getEncounterType(2), encounterService.getEncounterType(6)));
  82.  
  83.                 return context;
  84.         }
  85.  
  86.         @Test
  87.         public void generateSummary() throws Exception {
  88.  
  89.                 PatientDataSetDefinition definition = new PatientDataSetDefinition();
  90.  
  91.                 definition.addColumn("id", new PatientIdDataDefinition(), StringUtils.EMPTY, new ObjectFormatter());
  92.  
  93.                 ListConverter listConverter = new ListConverter();
  94.                 listConverter.setMaxNumberOfItems(1);
  95.  
  96.                 PatientIdentifierDataDefinition preferredIdentifier = new PatientIdentifierDataDefinition();
  97.                 preferredIdentifier.addParameter(new Parameter("types", "identifier types", PatientIdentifier.class));
  98.                 definition.addColumn("identifier", preferredIdentifier, "types=${identifierTypes}", listConverter);
  99.  
  100.                 definition.addColumn("name", new PreferredNameDataDefinition(), StringUtils.EMPTY, new ObjectFormatter("{familyName}, {givenName}"));
  101.  
  102.                 AgeDataDefinition ageOnDate = new AgeDataDefinition();
  103.                 ageOnDate.addParameter(new Parameter("effectiveDate", "effective date", Date.class));
  104.                 definition.addColumn("age", ageOnDate, "effectiveDate=${currentDate}", new AgeConverter());
  105.  
  106.                 definition.addColumn("birthdate", new BirthdateDataDefinition(), StringUtils.EMPTY, new BirthdateConverter("dd-MMM-yyyy"));
  107.                 definition.addColumn("gender", new GenderDataDefinition(), StringUtils.EMPTY, new ObjectFormatter());
  108.  
  109.                 DateObsQuery returnVisitQuery = new DateObsQuery();
  110.                 returnVisitQuery.setTimeModifier(PatientSetService.TimeModifier.LAST);
  111.                 returnVisitQuery.addConcept(Context.getConceptService().getConcept(20));
  112.  
  113.                 ObsDataSetDefinition returnVisit = new ObsDataSetDefinition();
  114.                 returnVisit.addRowFilter(returnVisitQuery, null);
  115.                 returnVisit.addColumn("return visit date", new ObsDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  116.                 definition.addColumns("return visit", returnVisit, null, new ObjectFormatter());
  117.  
  118.                 BasePatientEncounterQuery recentEncounterQuery = new BasePatientEncounterQuery();
  119.                 recentEncounterQuery.setTimeModifier(PatientSetService.TimeModifier.LAST);
  120.                 recentEncounterQuery.addParameter(new Parameter("encounterTypes", "encounter types", List.class));
  121.  
  122.                 EncounterDataSetDefinition recentEncounterDataSet = new EncounterDataSetDefinition();
  123.                 recentEncounterDataSet.addRowFilter(recentEncounterQuery, "encounterTypes=${encounterTypes}");
  124.                 recentEncounterDataSet.addColumn("last encounter id", new EncounterIdDataDefinition(), null, new ObjectFormatter());
  125.                 recentEncounterDataSet.addColumn("last encounter type", new EncounterTypeDataDefinition(), null, new ObjectFormatter());
  126.                 recentEncounterDataSet.addColumn("last encounter location", new EncounterLocationDataDefinition(), null, new ObjectFormatter());
  127.                 recentEncounterDataSet.addColumn("last encounter provider", new EncounterProviderDataDefinition(), null, new PropertyConverter(PersonName.class, "personName"), new ObjectFormatter("{familyName}, {givenName}"));
  128.                 recentEncounterDataSet.addColumn("last encounter provider age", new EncounterProviderDataDefinition(), null, new PropertyConverter(Age.class, "age"), new ObjectFormatter());
  129.                 recentEncounterDataSet.addColumn("last encounter date", new EncounterDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  130.  
  131.                 definition.addColumns("last visit", recentEncounterDataSet, null, new ObjectFormatter());
  132.  
  133.                 BasePatientEncounterQuery firstEncounterQuery = new BasePatientEncounterQuery();
  134.                 firstEncounterQuery.setTimeModifier(PatientSetService.TimeModifier.FIRST);
  135.                 firstEncounterQuery.addParameter(new Parameter("encounterTypes", "encounter types", List.class));
  136.  
  137.                 EncounterDataSetDefinition firstEncounterDataSet = new EncounterDataSetDefinition();
  138.                 firstEncounterDataSet.addRowFilter(firstEncounterQuery, "encounterTypes=${encounterTypes}");
  139.                 firstEncounterDataSet.addColumn("first encounter id", new EncounterIdDataDefinition(), null, new ObjectFormatter());
  140.                 firstEncounterDataSet.addColumn("first encounter type", new EncounterTypeDataDefinition(), null, new ObjectFormatter());
  141.                 firstEncounterDataSet.addColumn("first encounter date", new EncounterDatetimeDataDefinition(), null, new DateConverter("dd-MMM-yyyy"));
  142.  
  143.                 definition.addColumns("first visit", firstEncounterDataSet, null, new ObjectFormatter());
  144.  
  145.                 SimpleDataSet dataset = (SimpleDataSet) Context.getService(DataSetDefinitionService.class).evaluate(definition, prepareEvaluationContext());
  146.  
  147.                 DataSetUtil.printDataSet(dataset, System.out);
  148.         }
  149. }