/**
* 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.report;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.openmrs.Cohort;
import org.openmrs.cohort.CohortDefinition;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementMap;
import org.simpleframework.xml.Root;
/**
* Metadata that defines a CohortDataSet. (I.e. a list of cohorts, each of which has a name)
* <p>
* For example a CohortDatasetDefinition might represent:<br/>
* "1. Total # of Patients" -> (CohortDefinition) everyone <br/>
* "1.a. Male Adults" -> (CohortDefinition) Male AND Adult<br/>
* "1.b. Female Adults" -> (CohortDefinition) Female AND Adult<br/>
* "1.c. Male Children" -> (CohortDefinition) Male AND NOT Adult<br/>
* "1.d. Female Children" -> (CohortDefinition) Female AND NOT Adult ...
*
* @see CohortDataSet
* @see CohortDataSetProvider
* @deprecated see reportingcompatibility module
*/
@Root
@Deprecated
public class CohortDataSetDefinition implements DataSetDefinition {
private static final long serialVersionUID = -658417752199413012L;
@Attribute(required = true)
private String name;
private Map<String, String> descriptions;
private Map<String, CohortDefinition> strategies;
/**
* Default constructor
*/
public CohortDataSetDefinition() {
strategies = new LinkedHashMap<String, CohortDefinition>();
descriptions = new LinkedHashMap<String, String>();
}
/**
* Add the given cohort as a "column" to this definition with the given key. The name is also
* added as the description.
*
* @param name key to refer by which to refer to this cohort
* @param cohortDefinition The patients for this column
*/
public void addStrategy(String name, CohortDefinition cohortDefinition) {
addStrategy(name, name, cohortDefinition);
}
/**
* Add the given cohort as a "column" to this definition with the given key and the given
* description.
*
* @param name
* @param description
* @param cohortDefinition
*/
public void addStrategy(String name, String description, CohortDefinition cohortDefinition) {
strategies.put(name, cohortDefinition);
descriptions.put(name, description);
}
/**
* @see org.openmrs.report.DataSetDefinition#getColumnKeys()
*/
public List<String> getColumnKeys() {
return new Vector<String>(strategies.keySet());
}
/**
* @see org.openmrs.report.DataSetDefinition#getColumnDatatypes()
*/
@SuppressWarnings("unchecked")
public List<Class> getColumnDatatypes() {
//return (List<Class>) Collections.nCopies(strategies.size(), Cohort.class);
List<Class> ret = new ArrayList<Class>();
for (int i = strategies.size(); i > 0; --i)
ret.add(Cohort.class);
return ret;
}
/**
* @see org.openmrs.report.DataSetDefinition#getName()
*/
public String getName() {
return name;
}
/**
* @see org.openmrs.report.DataSetDefinition#setName(java.lang.String)
*/
public void setName(String name) {
this.name = name;
}
/**
* @see org.openmrs.report.Parameterizable#getParameters()
*/
public List<Parameter> getParameters() {
List<Parameter> ret = new Vector<Parameter>();
if (strategies != null)
for (CohortDefinition c : strategies.values())
ret.addAll(c.getParameters());
return ret;
}
/**
* Sets a description for the cohort name if it exists. Returns true if a cohort exists with the
* specified name else returns false.
*
* @param name
* @param description
* @return true if a cohort exists with the specified name, false otherwise
*/
public boolean setDescription(String name, String description) {
if (strategies.containsKey(name)) {
descriptions.put(name, description);
return true;
}
return false;
}
/**
* Returns a description for the given cohort strategy name.
*
* @param name
* @return a <code>String</code> description
*/
public String getDescription(String name) {
return descriptions.get(name);
}
/**
* Returns the map of cohort strategy names, descriptions.
*
* @return a <code>Map<String, String></code> of the strategy names and descriptions
*/
@ElementMap(required = false, keyType = String.class, valueType = String.class)
public Map<String, String> getDescriptions() {
return this.descriptions;
}
/**
* Get the key-value pairs of names to defined cohorts
*/
@ElementMap(required = true, keyType = String.class, valueType = CohortDefinition.class)
public Map<String, CohortDefinition> getStrategies() {
return strategies;
}
/**
* Set the key-value pairs of names to cohorts
*
* @param strategies
*/
@ElementMap(required = true, keyType = String.class, valueType = CohortDefinition.class)
public void setStrategies(Map<String, CohortDefinition> strategies) {
this.strategies = strategies;
}
/**
* Set the key-value pairs of names to cohort descriptions
*
* @param descriptions
*/
@ElementMap(required = false, keyType = String.class, valueType = String.class)
public void setDescriptions(Map<String, String> descriptions) {
this.descriptions = descriptions;
}
}