/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.reporting; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Cohort; import org.openmrs.Concept; import org.openmrs.Drug; import org.openmrs.api.PatientSetService; import org.openmrs.api.PatientSetService.GroupMethod; import org.openmrs.api.context.Context; import org.openmrs.report.EvaluationContext; import org.openmrs.util.OpenmrsUtil; /** * @deprecated Use org.openmrs.reporting.DrugOrderFilter instead */ @Deprecated public class DrugOrderPatientFilter extends AbstractPatientFilter implements PatientFilter, Comparable<DrugOrderPatientFilter> { protected static final Log log = LogFactory.getLog(DrugOrderPatientFilter.class); private static final long serialVersionUID = 1L; private Integer drugId; // replace this with drug private Concept drugConcept; private GroupMethod groupMethod; private Date onDate; public DrugOrderPatientFilter() { super.setType("Patient Filter"); super.setSubType("Drug Order Patient Filter"); } public boolean isReadyToRun() { return true; } public int compareTo(DrugOrderPatientFilter other) { return compareHelper().compareTo(other.compareHelper()); } private Integer compareHelper() { if (groupMethod == GroupMethod.NONE) return -1; else return (drugId == null ? 0 : drugId) + (onDate == null ? 0 : (int) (System.currentTimeMillis() - onDate.getTime())); } public GroupMethod getGroupMethod() { return groupMethod; } public void setGroupMethod(GroupMethod groupMethod) { this.groupMethod = groupMethod; } public java.util.Date getOnDate() { return onDate; } public void setOnDate(Date onDate) { this.onDate = onDate; } public Integer getDrugId() { return drugId; } public void setDrugId(Integer drugId) { this.drugId = drugId; } public Concept getDrugConcept() { return drugConcept; } public void setDrugConcept(Concept drugConcept) { this.drugConcept = drugConcept; } public Cohort filter(Cohort input, EvaluationContext context) { Set<Integer> drugIds = new HashSet<Integer>(); if (groupMethod != null && groupMethod == GroupMethod.NONE) { drugIds = null; } else { if (drugId != null) drugIds.add(drugId); if (drugConcept != null) { List<Drug> drugs = Context.getConceptService().getDrugs(); for (Drug drug : drugs) if (drug.getConcept().equals(drugConcept)) drugIds.add(drug.getDrugId()); } } PatientSetService service = Context.getPatientSetService(); return service.getPatientsHavingDrugOrder(input == null ? null : input.getMemberIds(), drugIds, onDate); } public String getDescription() { // TODO: internationalize this StringBuilder sb = new StringBuilder(); if (groupMethod != null && groupMethod == GroupMethod.NONE) sb.append("No drug orders"); else if (drugId != null || drugConcept != null) { sb.append("Taking "); SortedSet<String> names = new TreeSet<String>(); if (drugId != null) { Drug drug = Context.getConceptService().getDrug(drugId); if (drug == null) { log.error("Can't find drug with id " + drugId); names.add("MISSING DRUG " + drugId); } else names.add(drug.getName()); } if (drugConcept != null) names.add(drugConcept.getName(Context.getLocale(), false).getName()); sb.append(OpenmrsUtil.join(names, " or ")); } else sb.append("Any Drug Order"); if (getOnDate() != null) sb.append(" on " + getOnDate()); return sb.toString(); } }