/*
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.reporting.dataset.definition.persister;
import org.openmrs.annotation.Handler;
import org.openmrs.api.context.Context;
import org.openmrs.module.ModuleFactory;
import org.openmrs.module.reporting.ReportingConstants;
import org.openmrs.module.reporting.dataset.definition.DataExportDataSetDefinition;
import org.openmrs.module.reporting.dataset.definition.DataSetDefinition;
import org.openmrs.reporting.AbstractReportObject;
import org.openmrs.reporting.ReportObjectService;
import org.openmrs.reporting.export.DataExportReportObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
/**
* Class which manages persistence of a DataExportDataSetDefinition using legacy tables
*/
@Handler(supports={DataExportDataSetDefinition.class}, order=50)
@SuppressWarnings("deprecation")
public class DataExportDataSetDefinitionPersister implements DataSetDefinitionPersister {
/**
* Public constructor
*/
public DataExportDataSetDefinitionPersister() { }
/**
* @see DataSetDefinitionPersister#getDefinition(Integer)
*/
public DataSetDefinition getDefinition(Integer id) {
ReportObjectService ros = Context.getService(ReportObjectService.class);
DataExportReportObject dataExport = (DataExportReportObject) ros.getReportObject(id);
return (dataExport != null) ? new DataExportDataSetDefinition(dataExport) : null;
}
/**
* @see DataSetDefinitionPersister#getDefinitionByUuid(String)
*/
public DataSetDefinition getDefinitionByUuid(String uuid) {
for(DataSetDefinition dsd : getAllDefinitions(false)) { // NOTE: This is very slow. We could speed it up significantly with a custom dao
if (dsd.getUuid() != null && dsd.getUuid().equals(uuid)) {
return dsd;
}
}
return null;
}
/**
* @see DataSetDefinitionPersister#getAllDefinitions(boolean)
*/
public List<DataSetDefinition> getAllDefinitions(boolean includeRetired) {
List <DataSetDefinition> dataSetDefinitions = new Vector<DataSetDefinition>();
if (ModuleFactory.getStartedModulesMap().containsKey("reportingcompatibility") &&
ReportingConstants.GLOBAL_PROPERTY_INCLUDE_DATA_EXPORTS()) {
ReportObjectService ros = Context.getService(ReportObjectService.class);
List<AbstractReportObject> dataExports = ros.getReportObjectsByType("Data Export");
for (AbstractReportObject obj : dataExports) {
DataExportReportObject dataExport = (DataExportReportObject) obj;
dataExport.setUuid(obj.getUuid()); // hack to get uuids into data exports
dataSetDefinitions.add(new DataExportDataSetDefinition(dataExport));
}
}
return dataSetDefinitions;
}
/**
* @see DataSetDefinitionPersister#getNumberOfDefinitions(boolean)
*/
public int getNumberOfDefinitions(boolean includeRetired) {
if (ModuleFactory.getStartedModulesMap().containsKey("reportingcompatibility")) {
ReportObjectService ros = Context.getService(ReportObjectService.class);
List<AbstractReportObject> dataExports = ros.getReportObjectsByType("Data Export");
return dataExports.size();
}
return 0;
}
/**
* @see DataSetDefinitionPersister#getDefinitions(String, boolean)
*/
public List<DataSetDefinition> getDefinitions(String name, boolean exactMatchOnly) {
List<DataSetDefinition> ret = new ArrayList<DataSetDefinition>();
for(DataSetDefinition dsd : getAllDefinitions(false)) {
if (dsd.getName() != null) {
if (exactMatchOnly) {
if (dsd.getName().equalsIgnoreCase(name)) {
ret.add(dsd);
}
}
else {
if (dsd.getName().toUpperCase().contains(name.toUpperCase())) {
ret.add(dsd);
}
}
}
}
return ret;
}
/**
* @see DataSetDefinitionPersister#saveDefinition(DataSetDefinition)
*/
public DataSetDefinition saveDefinition(DataSetDefinition dataSetDefinition) {
DataExportDataSetDefinition dsd = (DataExportDataSetDefinition) dataSetDefinition;
ReportObjectService ros = Context.getService(ReportObjectService.class);
DataExportReportObject dataExport = (DataExportReportObject) ros.saveReportObject(dsd.getDataExport());
dsd.setDataExport(dataExport);
return dsd;
}
/**
* @see DataSetDefinitionPersister#purgeDefinition(DataSetDefinition)
*/
public void purgeDefinition(DataSetDefinition dataSetDefinition) {
DataExportDataSetDefinition dsd = (DataExportDataSetDefinition) dataSetDefinition;
Context.getService(ReportObjectService.class).purgeReportObject(dsd.getDataExport());
}
}