/**
* 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.List;
import java.util.Vector;
import org.openmrs.BaseOpenmrsMetadata;
import org.openmrs.cohort.CohortDefinition;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
/**
* This class holds the different parts of a report before generation. A ReportSchema will typically
* be evaluated upon a Cohort, in the context of an EvaluationContext. See
* {@link org.openmrs.api.ReportService#evaluate(ReportSchema, org.openmrs.Cohort, EvaluationContext)}
* <p>
* Evaluating a report really means evaluating all the DataSetDefinitions it contains, resulting in
* a {@link org.openmrs.report.ReportData}
* <p>
* The "filter" represents an (optional) extra filter that is applied to the input cohort before the
* DataSetDefinitions ever see it.
*
* @deprecated see reportingcompatibility module
*/
@Root(strict = false)
@Deprecated
public class ReportSchema extends BaseOpenmrsMetadata implements Parameterizable {
private static final long serialVersionUID = 932347906334509564L;
private Integer reportSchemaId;
private CohortDefinition filter;
private List<Parameter> reportParameters;
private List<DataSetDefinition> dataSetDefinitions;
public ReportSchema() {
}
public void addDataSetDefinition(DataSetDefinition definition) {
if (getDataSetDefinitions() == null)
setDataSetDefinitions(new Vector<DataSetDefinition>());
getDataSetDefinitions().add(definition);
}
/**
* @see org.openmrs.OpenmrsObject#getId()
*/
public Integer getId() {
return getReportSchemaId();
}
/**
* @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
*/
public void setId(Integer id) {
setReportSchemaId(id);
}
/**
* Set the Report Schema Id
*
* @param reportSchemaId
*/
@Attribute(required = false)
public void setReportSchemaId(Integer reportSchemaId) {
this.reportSchemaId = reportSchemaId;
}
/**
* Returns the ReportSchema Id
*
* @return the Integer Report Schema Id
*/
@Attribute(required = false)
public Integer getReportSchemaId() {
return this.reportSchemaId;
}
/**
* Set a name for the ReportSchema
*
* @param name <code>String</code> name to set
*/
@Element(data = true, required = true)
public void setName(String name) {
super.setName(name);
}
/**
* Returns the name of the ReportSchema
*
* @return the name of the ReportSchema
*/
@Element(data = true, required = true)
public String getName() {
return super.getName();
}
/**
* Set a description for this ReportSchema
*
* @param description
*/
@Element(data = true, required = true)
public void setDescription(String description) {
super.setDescription(description);
}
/**
* Returns the description of this ReportSchema
*
* @return the <code>String</code> description of the ReportSchema
*/
@Element(data = true, required = true)
public String getDescription() {
return super.getDescription();
}
/**
* Set the filter
*
* @param filter
*/
@Element(required = false)
public void setFilter(CohortDefinition filter) {
this.filter = filter;
}
/**
* Returns the filter
*
* @return the filter as a <code>CohortDefinition</code>
*/
@Element(required = false)
public CohortDefinition getFilter() {
return filter;
}
/**
* Sets List<Parameter> reportParameters
*
* @param reportParameters this schema's defined parameters
*/
@ElementList(required = false, name = "parameters")
public void setReportParameters(List<Parameter> reportParameters) {
this.reportParameters = reportParameters;
}
/**
* Get all ReportParameters defined for this schema. This method does not recurse through the
* sub objects to find _all_ parameters. Use {@link #getParameters()} for that.
*
* @return this schema's defined parameters
*/
@ElementList(required = false, name = "parameters")
public List<Parameter> getReportParameters() {
return reportParameters;
}
/**
* Set List<DataSetDefinition> dataSetDefinitions
*
* @param definitions
*/
@ElementList(required = true, name = "dataSets")
public void setDataSetDefinitions(List<DataSetDefinition> definitions) {
this.dataSetDefinitions = definitions;
}
/**
* Returns List<DataSetDefinition> dataSetDefinitions
*
* @return List<DataSetDefinition> a list with the DataSet Definitions
*/
@ElementList(required = true, name = "dataSets")
public List<DataSetDefinition> getDataSetDefinitions() {
return this.dataSetDefinitions;
}
/**
* Looks through the datasetdefinitions and cohorts to get the rquired parameters TODO
*
* @see org.openmrs.report.Parameterizable#getParameters()
*/
public List<Parameter> getParameters() {
List<Parameter> parameters = new Vector<Parameter>();
// loop over cohorts and get parameters
if (getFilter() != null)
parameters.addAll(getFilter().getParameters());
// loop over datasetdefinitions and get the parameters
if (getDataSetDefinitions() != null) {
for (DataSetDefinition dataSetDef : getDataSetDefinitions()) {
parameters.addAll(dataSetDef.getParameters());
}
}
return parameters;
}
}