JfreeChart with seam (ToolTip problem)
itays100 Nov 13, 2011 7:43 AMI am trying to generate chart from seam application and I used the code below from the JFreeChart war file.
public static String generateXYChart(String section, HttpSession session, PrintWriter pw) {
String filename = null;
try {
// Retrieve list of WebHits
WebHitDataSet whDataSet = new WebHitDataSet();
ArrayList list = whDataSet.getDataByHitDate(section);
// Throw a custom NoDataException if there is no data
if (list.size() == 0) {
System.out.println("No data has been found");
throw new NoDataException();
}
// Create and populate an XYSeries Collection
XYSeries dataSeries = new XYSeries("Hits");
Iterator iter = list.listIterator();
while (iter.hasNext()) {
WebHit wh = (WebHit)iter.next();
dataSeries.add(wh.getHitDate().getTime(),wh.getHitCount());
}
XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);
// Create tooltip and URL generators
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.UK);
StandardXYToolTipGenerator ttg = new StandardXYToolTipGenerator(
StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
sdf, NumberFormat.getInstance());
TimeSeriesURLGenerator urlg = new TimeSeriesURLGenerator(
sdf, "pie_chart.jsp", "series", "hitDate");
// Create the chart object
ValueAxis timeAxis = new DateAxis("");
NumberAxis valueAxis = new NumberAxis("");
valueAxis.setAutoRangeIncludesZero(false); // override default
StandardXYItemRenderer renderer = new StandardXYItemRenderer(
StandardXYItemRenderer.LINES + StandardXYItemRenderer.SHAPES,
ttg, urlg);
renderer.setShapesFilled(true);
XYPlot plot = new XYPlot(xyDataset, timeAxis, valueAxis, renderer);
JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
chart.setBackgroundPaint(java.awt.Color.white);
// Write the chart image to the temporary directory
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(pw, filename, info);
pw.flush();
} catch (NoDataException e) {
System.out.println(e.toString());
filename = "public_nodata_500x300.png";
} catch (Exception e) {
System.out.println("Exception - " + e.toString());
e.printStackTrace(System.out);
filename = "public_error_500x300.png";
}
return filename;
}
I have this code in my seam entity:
@Entity
@Table(name = "myobject", catalog = "my_object")
public class MyObject implements java.io.Serializable {
.....
@Transient
public String getChartFileName() {
PrintWriter pw = new PrintWriter(System.out);
ExternalContext extCtxt = FacesContext.getCurrentInstance().getExternalContext();
javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest)extCtxt.getRequest();
String reqUrl = request.getRequestURL().toString();
this.fileName = WebHitChart.generateXYChart("Service", request.getSession(), pw);
System.out.println("filename - " + fileName);
String graphURL = reqUrl + "/servlet/DisplayChart?filename=" + fileName;
return graphURL;
}
And I have this in my .xhtml:
<img id="myChartId" src="#{myobject.chartFileName}" usemap="##{myobject.chartShortName}">
I able to see the chart on the page but the tooltip is not shown on mouseover like the example.
The map tag is not generated as I check the generated html.
I should be able to see something like this:
<MAP NAME="jfreechart-3299886008362407185.png"> <AREA SHAPE="POLY" COORDS="92,242,98,242,98,248,92,248,92,242,92,242" title="Hits: (01-Aug-2002, 235,059)" href="pie_chart.jsp?series=Hits&hitDate=01-Aug-2002"> <AREA SHAPE="POLY" COORDS="106,234,112,234,112,240,106,240,106,234,106,234" title="Hits: (02-Aug-2002, 240,635)" href="pie_chart.jsp?series=Hits&hitDate=02-Aug-2002"> <AREA SHAPE="POLY" COORDS="148,223,154,223,154,229,148,229,148,223,148,223" title="Hits: (05-Aug-2002, 248,903)" href="pie_chart.jsp?series=Hits&hitDate=05-Aug-2002">
I'm not sure if it seam related or not but hopefully someone here had the same situation before.
Thanks.