/**
* 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();
}
}