/**
* 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.text.DateFormat;
import java.util.Date;
import org.openmrs.Cohort;
import org.openmrs.api.PatientSetService;
import org.openmrs.api.context.Context;
import org.openmrs.report.EvaluationContext;
/**
* @deprecated see reportingcompatibility module
*/
@Deprecated
public class PatientCharacteristicFilter extends CachingPatientFilter implements Comparable<PatientCharacteristicFilter> {
private String gender;
private Date minBirthdate;
private Date maxBirthdate;
private Integer minAge;
private Integer maxAge;
private Boolean aliveOnly;
private Boolean deadOnly;
private Date effectiveDate;
public PatientCharacteristicFilter() {
super.setType("Patient Filter");
super.setSubType("Patient Characteristic Filter");
}
public PatientCharacteristicFilter(String gender, Date minBirthdate, Date maxBirthdate) {
super.setType("Patient Filter");
super.setSubType("Patient Characteristic Filter");
this.gender = gender == null ? null : gender.toUpperCase();
this.minBirthdate = minBirthdate;
this.maxBirthdate = maxBirthdate;
}
@Override
public String getCacheKey() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getName()).append(".");
sb.append(getGender()).append(".");
sb.append(getMinBirthdate()).append(".");
sb.append(getMaxBirthdate()).append(".");
sb.append(getMinAge()).append(".");
sb.append(getMaxAge()).append(".");
sb.append(getAliveOnly()).append(".");
sb.append(getDeadOnly()).append(".");
sb.append(getEffectiveDate());
return sb.toString();
}
public boolean isReadyToRun() {
return true;
}
public int compareTo(PatientCharacteristicFilter o) {
return -compareHelper().compareTo(o.compareHelper());
}
private Integer compareHelper() {
int ret = 0;
if (deadOnly != null)
ret += deadOnly ? 2 : 1;
if (aliveOnly != null)
ret += aliveOnly ? 20 : 10;
if (minAge != null)
ret += minAge * 100;
if (maxAge != null)
ret += maxAge * 1000;
if (gender != null)
ret += gender.equals("M") ? 1000000 : 2000000;
return ret;
}
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (o instanceof PatientCharacteristicFilter) {
PatientCharacteristicFilter other = (PatientCharacteristicFilter) o;
return equals(gender, other.gender) && equals(minBirthdate, other.minBirthdate)
&& equals(maxBirthdate, other.maxBirthdate) && equals(minAge, other.minAge)
&& equals(maxAge, other.maxAge) && equals(aliveOnly, other.aliveOnly)
&& equals(deadOnly, other.deadOnly);
} else {
return false;
}
}
public String getDescription() {
if (gender == null && minBirthdate == null && maxBirthdate == null && minAge == null && maxAge == null
&& aliveOnly == null && deadOnly == null)
return "All Patients";
StringBuffer ret = new StringBuffer();
if (gender != null) {
if ("M".equals(gender)) {
ret.append("Male");
} else {
ret.append("Female");
}
}
ret.append(gender == null ? "Patients " : " patients ");
DateFormat df = null;
if (minBirthdate != null || maxBirthdate != null) {
df = DateFormat.getDateInstance(DateFormat.SHORT, Context.getLocale());
}
if (minBirthdate != null) {
if (maxBirthdate != null) {
ret.append(" born between " + df.format(minBirthdate) + " and " + df.format(maxBirthdate));
} else {
ret.append(" born after " + df.format(minBirthdate));
}
} else {
if (maxBirthdate != null) {
ret.append(" born before " + df.format(maxBirthdate));
}
}
if (minAge != null) {
if (maxAge != null) {
ret.append(" between the ages of " + minAge + " and " + maxAge);
} else {
ret.append(" at least " + minAge + " years old");
}
} else {
if (maxAge != null) {
ret.append(" up to " + maxAge + " years old");
}
}
if (aliveOnly != null && aliveOnly) {
ret.append(" who are alive");
}
if (deadOnly != null && deadOnly) {
ret.append(" who are dead");
}
return ret.toString();
}
/**
* @return Returns the gender.
*/
public String getGender() {
return gender;
}
/**
* @param gender The gender to set.
*/
public void setGender(String gender) {
this.gender = null;
if (gender != null) {
gender = gender.toUpperCase();
if ("M".equals(gender) || "F".equals(gender)) {
this.gender = gender;
}
}
}
/**
* @return Returns the maxBirthdate.
*/
public Date getMaxBirthdate() {
return maxBirthdate;
}
/**
* @param maxBirthdate The maxBirthdate to set.
*/
public void setMaxBirthdate(Date maxBirthdate) {
this.maxBirthdate = maxBirthdate;
}
/**
* @return Returns the minBirthdate.
*/
public Date getMinBirthdate() {
return minBirthdate;
}
/**
* @param minBirthdate The minBirthdate to set.
*/
public void setMinBirthdate(Date minBirthdate) {
this.minBirthdate = minBirthdate;
}
public Boolean getAliveOnly() {
return aliveOnly;
}
public void setAliveOnly(Boolean aliveOnly) {
this.aliveOnly = aliveOnly;
}
public Boolean getDeadOnly() {
return deadOnly;
}
public void setDeadOnly(Boolean deadOnly) {
this.deadOnly = deadOnly;
}
public Integer getMaxAge() {
return maxAge;
}
public void setMaxAge(Integer maxAge) {
this.maxAge = maxAge;
}
public Integer getMinAge() {
return minAge;
}
public void setMinAge(Integer minAge) {
this.minAge = minAge;
}
public Date getEffectiveDate() {
return effectiveDate;
}
public void setEffectiveDate(Date effectiveDate) {
this.effectiveDate = effectiveDate;
}
@Override
public Cohort filterImpl(EvaluationContext context) {
PatientSetService service = Context.getPatientSetService();
return service.getPatientsByCharacteristics(gender, minBirthdate, maxBirthdate, minAge, maxAge, aliveOnly, deadOnly,
effectiveDate);
}
}