Java tutorial
// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato <mirko@artofsolving.com> // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.web.samples; import java.awt.Color; import java.awt.GradientPaint; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import net.sf.jooreports.templates.image.RenderedImageSource; import net.sf.jooreports.templates.image.ImageSource; import net.sf.jooreports.web.spring.controller.AbstractDocumentGenerator; import org.apache.commons.io.output.ByteArrayOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.DefaultCategoryDataset; public class SalesReportGenerator extends AbstractDocumentGenerator { public static class ReportLine { private String month; private int value; public ReportLine(String month, int value) { this.month = month; this.value = value; } public String getMonth() { return month; } public int getValue() { return value; } } protected Object getModel(HttpServletRequest request) { List lines = new ArrayList(); DateFormat monthFormat = new SimpleDateFormat("MMM"); Calendar calendar = Calendar.getInstance(); for (int month = 1; month <= 6; month++) { String value = request.getParameter("month_" + month); calendar.set(Calendar.MONTH, month - 1); lines.add(new ReportLine(monthFormat.format(calendar.getTime()), Integer.parseInt(value))); } Map model = new HashMap(); model.put("lines", lines); model.put("chart", getImageProvider(model)); return model; } protected ImageSource getImageProvider(Object model) { RenderedImageSource imageProvider = new RenderedImageSource(createChart(model)); return imageProvider; } private RenderedImage createChart(Object model) { List lines = (List) ((Map) model).get("lines"); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for (Iterator it = lines.iterator(); it.hasNext();) { ReportLine line = (ReportLine) it.next(); dataset.addValue(line.getValue(), "sales", line.getMonth()); } JFreeChart chart = ChartFactory.createBarChart("Monthly Sales", "Month", "Sales", dataset, PlotOrientation.VERTICAL, false, false, false); chart.setTitle((String) null); chart.setBackgroundPaint(Color.white); CategoryPlot plot = chart.getCategoryPlot(); BarRenderer renderer = (BarRenderer) plot.getRenderer(); GradientPaint paint = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64)); renderer.setSeriesPaint(0, paint); BufferedImage image = chart.createBufferedImage(400, 300); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { ImageIO.write(image, "png", outputStream); } catch (IOException ioException) { throw new RuntimeException("should never happen: " + ioException.getMessage()); } return image; } }