/*
* Copyright (C) 2007 Erik Swenson - erik@oreports.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have reserved a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.efs.openreports.actions.admin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.efs.openreports.objects.Report;
import org.efs.openreports.objects.ReportChart;
import org.efs.openreports.objects.ReportDataSource;
import org.efs.openreports.objects.ReportParameter;
import org.efs.openreports.objects.ReportParameterMap;
import org.efs.openreports.providers.ChartProvider;
import org.efs.openreports.providers.DataSourceProvider;
import org.efs.openreports.providers.ParameterProvider;
import org.efs.openreports.providers.ReportProvider;
import com.opensymphony.xwork2.ActionSupport;
import com.thoughtworks.xstream.XStream;
public class DataImportAction extends ActionSupport
{
protected static Logger log = Logger.getLogger(DataImportAction.class);
private ReportProvider reportProvider;
private DataSourceProvider dataSourceProvider;
private ChartProvider chartProvider;
private ParameterProvider parameterProvider;
private File importFile;
@Override
public String execute()
{
try
{
if (importFile != null)
{
List<Report> reports = parseReports(importFile);
for (Report report : reports)
{
try
{
if (reportProvider.getReport(report.getName()) != null)
{
addActionError("Skipping Existing Report: " + report.getName());
continue;
}
log.info("Importing: " + report.getName());
if (report.getDataSource() != null)
{
ReportDataSource dataSource = dataSourceProvider.getDataSource(report.getDataSource().getName());
if (dataSource == null)
{
dataSource = dataSourceProvider.insertDataSource(report.getDataSource());
log.info("Adding DataSource: " + dataSource.getName());
}
report.setDataSource(dataSource);
}
if (report.getReportChart() != null)
{
ReportChart chart = chartProvider.getReportChart(report.getReportChart().getName());
if (chart == null)
{
if (report.getReportChart().getDataSource() != null)
{
ReportDataSource dataSource = dataSourceProvider.getDataSource(report.getReportChart().getDataSource().getName());
if (dataSource == null)
{
dataSource = dataSourceProvider.insertDataSource(report.getReportChart().getDataSource());
log.info("Adding DataSource: " + dataSource.getName());
}
report.getReportChart().setDataSource(dataSource);
}
if (report.getReportChart().getDrillDownReport() != null)
{
Report drillDownReport = reportProvider.getReport(report.getReportChart().getDrillDownReport().getName());
if (drillDownReport == null)
{
drillDownReport = reportProvider.insertReport(report.getReportChart().getDrillDownReport());
log.info("Adding Report: " + drillDownReport.getName());
}
report.getReportChart().setDrillDownReport(drillDownReport);
}
if (report.getReportChart().getOverlayChart() != null)
{
ReportChart overlayChart = chartProvider.getReportChart(report.getReportChart().getOverlayChart().getName());
if (overlayChart == null)
{
overlayChart = chartProvider.insertReportChart(report.getReportChart().getOverlayChart());
log.info("Adding Chart: " + overlayChart.getName());
}
report.getReportChart().setOverlayChart(overlayChart);
}
chart = chartProvider.insertReportChart(report.getReportChart());
log.info("Adding Chart: " + chart.getName());
}
report.setReportChart(chart);
}
if (report.getParameters() != null)
{
List<ReportParameterMap> parameters = report.getParameters();
List<ReportParameterMap> duplicateParameters = new ArrayList<ReportParameterMap>();
for (ReportParameterMap map: parameters)
{
ReportParameter parameter = parameterProvider.getReportParameter(map.getReportParameter().getName());
if (parameter == null)
{
if (map.getReportParameter().getDataSource() != null)
{
ReportDataSource dataSource = dataSourceProvider.getDataSource(map.getReportParameter().getDataSource().getName());
if (dataSource == null)
{
dataSource = dataSourceProvider.insertDataSource(map.getReportParameter().getDataSource());
log.info("Adding DataSource: " + dataSource.getName());
}
map.getReportParameter().setDataSource(dataSource);
}
parameter = parameterProvider.insertReportParameter(map.getReportParameter());
log.info("Adding Parameter: " + parameter.getName());
}
map.setReportParameter(parameter);
duplicateParameters.add(map);
}
report.setParameters(duplicateParameters);
}
reportProvider.insertReport(report);
log.info("Finished Importing: " + report.getName());
addActionError("Imported Report: " + report.getName());
}
catch(Exception e)
{
addActionError("Import Error: " + report.getName());
log.error(report.getName(), e);
}
}
}
}
catch (Exception pe)
{
addActionError(pe.toString());
}
return SUCCESS;
}
@SuppressWarnings("unchecked")
private List<Report> parseReports(File importFile) throws FileNotFoundException
{
FileInputStream input = new FileInputStream(importFile);
XStream xStream = new XStream();
return (List<Report>) xStream.fromXML(input);
}
public File getImportFile()
{
return importFile;
}
public void setImportFile(File importFile)
{
this.importFile = importFile;
}
public void setReportProvider(ReportProvider reportProvider)
{
this.reportProvider = reportProvider;
}
public void setDataSourceProvider(DataSourceProvider dataSourceProvider)
{
this.dataSourceProvider = dataSourceProvider;
}
public void setChartProvider(ChartProvider chartProvider)
{
this.chartProvider = chartProvider;
}
public void setParameterProvider(ParameterProvider parameterProvider)
{
this.parameterProvider = parameterProvider;
}
}