/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received 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.infoglue.deliver.util.charts;
import java.io.File;
import org.apache.log4j.Logger;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.deliver.controllers.kernel.impl.simple.TemplateController;
import org.jfree.chart.ChartUtilities;
/**
* @author Mattias Bogeblad
*
* This is the helper class for charts. It gives the user a possibility to
* invoke different charts and supply data.
*/
public class ChartHelper
{
private final static Logger logger = Logger.getLogger(ChartHelper.class.getName());
private TemplateController templateController = null;
/**
* The default constructor.
*/
public ChartHelper(TemplateController templateController)
{
this.templateController = templateController;
}
/**
* This method invokes a named chart with the data supplied in xml-format.
*/
public String renderGraph(String chartName, String dataAsXML, int width, int height)
{
String assetUrl = "";
try
{
XMLDataDiagram demo = null;
if(chartName.equals("TimeSeriesDiagram"))
{
demo = new TimeSeriesDiagram();
demo.setDiagramData(dataAsXML);
demo.renderChart();
}
else
{
//Todo - for now...
demo = new TimeSeriesDiagram();
demo.setDiagramData(dataAsXML);
demo.renderChart();
}
String uniqueId = chartName + width + height + dataAsXML.length();
String fileName = uniqueId + ".png";
int i = 0;
String filePath = CmsPropertyHandler.getDigitalAssetPath0();
File file = null;
while(filePath != null)
{
file = new File(filePath + java.io.File.separator + fileName);
ChartUtilities.saveChartAsPNG(file, demo.getChart(), width, height);
i++;
filePath = CmsPropertyHandler.getProperty("digitalAssetPath." + i);
}
/*
String filePath = CmsPropertyHandler.getDigitalAssetPath();
File file = new File(filePath + java.io.File.separator + fileName);
ChartUtilities.saveChartAsPNG(file, demo.getChart(), width, height);
*/
assetUrl = this.templateController.getDigitalAssetBaseUrl() + "/" + file.getName();
}
catch(Exception e)
{
logger.warn("An error occurred when we tried to generate a graph:" + e.getMessage(), e);
}
return assetUrl;
}
}