Viva
Estou a usar o cewolf para geração de graficos. A geração destes gráficos depende de dados retornados de uma base de dados, até aqui nada de novo tudo funciona bem para graficos do tipo line.
Depois de conseguir colocar os graficos do tipo line a funcionar avancei para os graficos de barras verticais e horizontais, para me espanto vejo que o datasetproducer é igual para linhas e barras então bastou fazer um novo jsp onde configuro o cewolf:chart para grafico horizontalbar e verticalbar mas algo estranho está acontecer quando chamo um destes jsp recebo do data producer o seguinte erro : java.lang.NoSuchFieldError: java.awt.Color.BLACK
o jsp contem o seguinte (ainda é um jsp de teste):
<%@page contentType="text/html"%>
<%@taglib uri='/WEB-INF/cewolf.tld' prefix='cewolf' %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ page import="com.enabler.ocs.util.WebConstants"%>
<HTML>
<BODY>
<H1>Page View Statistics Horizontal</H1>
<HR>
<bean:define id="fldDivision" name="SalesDataPerformChartForm" property="fldDivision" type="java.lang.String"/>
<bean:define id="fldTemplate" name="SalesDataPerformChartForm" property="fldTemplate" type="java.lang.String"/>
<bean:define id="fldTemplateTitle" name="SalesDataPerformChartForm" property="fldTemplateTitle" type="java.lang.String"/>
<bean:define id="fldChartType" name="SalesDataPerformChartForm" property="fldChartType" type="java.lang.String"/>
<bean:define id="fldType1" name="SalesDataPerformChartForm" property="fldType1" type="java.lang.String"/>
<bean:define id="fldType2" name="SalesDataPerformChartForm" property="fldType2" type="java.lang.String"/>
<bean:define id="fldYear1" name="SalesDataPerformChartForm" property="fldYear1" type="java.lang.String"/>
<bean:define id="fldYear2" name="SalesDataPerformChartForm" property="fldYear2" type="java.lang.String"/>
<bean:define id="fldValue1" name="SalesDataPerformChartForm" property="fldValue1" type="java.lang.String"/>
<bean:define id="fldValue2" name="SalesDataPerformChartForm" property="fldValue2" type="java.lang.String"/>
<bean:define id="fldStoreId" name="SalesDataPerformChartForm" property="fldStoreId" type="java.lang.String"/>
<jsp:useBean id="pageViews" class="com.enabler.ocs.web.chart.cewolf.SalesDataHorizontalBarsChart"/>
<cewolf:chart
id="horizontalbar"
title="<%=fldTemplateTitle%>"
type="horizontalbar3d"
xaxislabel="Page"
yaxislabel="Views">
<cewolf:data>
<cewolf:producer id="pageViews">
<cewolf:param name="fldDivisionParam" value="<%=fldDivision%>"/>
<cewolf:param name="fldTemplateParam" value="<%=fldTemplate%>"/>
<cewolf:param name="fldType1Param" value="<%=fldType1%>"/>
<cewolf:param name="fldType2Param" value="<%=fldType2%>"/>
<cewolf:param name="fldYear1Param" value="<%=fldYear1%>"/>
<cewolf:param name="fldYear2Param" value="<%=fldYear2%>"/>
<cewolf:param name="fldValue1Param" value="<%=fldValue1%>"/>
<cewolf:param name="fldValue2Param" value="<%=fldValue2%>"/>
<cewolf:param name="fldStoreIdParam" value="<%=fldStoreId%>"/>
</cewolf:producer>
</cewolf:data>
</cewolf:chart>
<p>
<cewolf:img chartid="horizontalbar" renderer="/cewolf" width="400" height="300"/>
<P>
</BODY>
</HTML>
e a minha classe producer contem :
package com.enabler.ocs.web.chart.cewolf;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
import de.laures.cewolf.links.CategoryItemLinkGenerator;
import de.laures.cewolf.tooltips.CategoryToolTipGenerator;
import org.apache.log4j.Logger;
import com.enabler.ocs.util.EJBHomeFactory;
import com.enabler.ocs.util.Exceptions.OCSException;
import com.enabler.ocs.util.Exceptions.ExceptionLogUtil;
import com.enabler.ocs.util.BaseAction;
import javax.naming.NamingException;
import javax.ejb.CreateException;
import com.enabler.ocs.biz.chart.*;
import com.enabler.ocs.web.users.User;
import com.enabler.ocs.web.users.Store;
import java.util.Vector;
import com.enabler.ocs.web.chart.ChartDefenition;
import com.enabler.ocs.web.chart.ChartSet;
import com.enabler.ocs.web.chart.ChartSubSet;
/**
* An example data producer.
* @author Guido Laures
*/
public class SalesDataHorizontalBarsChart implements DatasetProducer, CategoryToolTipGenerator, CategoryItemLinkGenerator, Serializable {
private static Logger logger = Logger.getLogger(PageViewCountData.class);
// These values would normally not be hard coded but produced by
// some kind of data source like a database or a file
private Vector vChartSet = new Vector();
private Vector vChartSubSet = new Vector();
/**
* Produces some random data.
*/
public Object produceDataset(Map params) throws DatasetProduceException
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset()
{
/**
* @see java.lang.Object#finalize()
*/
protected void finalize() throws Throwable
{
super.finalize();
}
};
Vector result = null;
ChartDefenition chartDefenition = null;
String errorMessage = null;
String fldTemplate = (String)params.get("fldTemplateParam");
String fldDivision = (String)params.get("fldDivisionParam");
String fldType1 = (String)params.get("fldType1Param");
String fldYear1 = (String)params.get("fldYear1Param");
String fldValue1 = (String)params.get("fldValue1Param");
String fldStoreId = (String)params.get("fldStoreIdParam");
try
{
ChartsLocalHome chartHome = this.getCharts();
ChartsLocal charts = chartHome.create();
result = charts.getChartData(fldTemplate,fldStoreId,fldType1,fldYear1,fldValue1,fldDivision);
ChartSubSet chartSubSet = new ChartSubSet();
int iLastSet = -1;
for(int i = 0 ; i < result.size() ; i++)
{
ChartSet chartSet = new ChartSet();
chartDefenition = (ChartDefenition)result.elementAt(i);
if( (iLastSet == -1) || (iLastSet!= chartDefenition.getSubSet() ))
{
if((vChartSet.size() > 0) && (vChartSet!=null))
{
chartSubSet.setSet(vChartSet);
vChartSubSet.add(chartSubSet);
vChartSet = new Vector();
chartSubSet = new ChartSubSet();
}
chartSubSet.setSubSet(chartDefenition.getSubSet());
String strAux = chartDefenition.getSubSet() + " " + chartDefenition.getSubSetName();
chartSubSet.setSubSetName(strAux);
}
logger.debug("[RFF] RECORD");
logger.debug("[RFF] Set : " + chartDefenition.getSet());
logger.debug("[RFF] SubSet : " + chartDefenition.getSubSet());
logger.debug("[RFF] SubSet Name : " + chartDefenition.getSubSetName());
logger.debug("[RFF] Value : " + chartDefenition.getValue());
chartSet.setSet(chartDefenition.getSet());
chartSet.setValue(chartDefenition.getValue());
vChartSet.add(chartSet);
iLastSet = chartDefenition.getSubSet();
}
//Last record
if((vChartSet.size() > 0) && (vChartSet!=null))
{
chartSubSet.setSet(vChartSet);
vChartSubSet.add(chartSubSet);
}
}
catch(CreateException ce)
{
}
catch(OCSException ne)
{
errorMessage = "REMOTE_EXCEPTION";
logger.error(errorMessage, ne);
}
for (int series = 0; series < vChartSubSet.size() ; series ++)
{
ChartSubSet chartSubSet = (ChartSubSet)vChartSubSet.elementAt(series);
Vector vChartSetAux = chartSubSet.getSet();
for (int i = 0; i < vChartSetAux.size(); i++)
{
ChartSet chartSet = (ChartSet)vChartSetAux.elementAt(i);
dataset.addValue(chartSet.getValue(), chartSubSet.getSubSetName(), Integer.toString(chartSet.getSet()));
}
}
return dataset;
}
/**
* This producer's data is invalidated after 5 seconds. By this method the
* producer can influence Cewolf's caching behaviour the way it wants to.
*/
public boolean hasExpired(Map params, Date since) {
return (System.currentTimeMillis() - since.getTime()) > 5000;
}
/**
* Returns a unique ID for this DatasetProducer
*/
public String getProducerId() {
return "PageViewCountData DatasetProducer";
}
/**
* Returns a link target for a special data item.
*/
public String generateLink(Object data, int series, Object category) {
return null;
}
/**
* @see java.lang.Object#finalize()
*/
protected void finalize() throws Throwable {
super.finalize();
}
/**
* @see org.jfree.chart.tooltips.CategoryToolTipGenerator#generateToolTip(CategoryDataset, int, int)
*/
public String generateToolTip(CategoryDataset arg0, int series, int arg2) {
return null;
}
/**
* <p>Method : getChartBean</p>
* <pre> Description Gets the reference to the Claims Session bean</pre>
* @return ClaimsLocalHome reference
* <pre>
* </pre>
*/
private ChartsLocalHome getCharts() throws OCSException
{
try
{
EJBHomeFactory factory = EJBHomeFactory.getFactory();
return (ChartsLocalHome)factory.lookUpLocal("java:comp/env/ejb/ChartsLocal",ChartsLocalHome.class);
}
catch(NamingException ne)
{
throw ExceptionLogUtil.createLoggableException(ne);
}
}
}
Alguem sabe porque estou a receber esse erro quando para um grafico de linhas funciona na perfeição