Java tutorial
/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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 Lesser General Public License for more details. * * Copyright (c) 2002-2017 Hitachi Vantara.. All rights reserved. */ package org.pentaho.reporting.engine.classic.extensions.legacy.charts; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.AxisLocation; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.DatasetRenderingOrder; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.SpiderWebPlot; import org.jfree.chart.plot.ThermometerPlot; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.renderer.xy.XYAreaRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.DefaultValueDataset; import org.jfree.data.general.PieDataset; import org.jfree.data.xy.DefaultIntervalXYDataset; import org.jfree.data.xy.DefaultXYZDataset; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYZDataset; import org.jfree.util.TableOrder; import org.pentaho.plugin.jfreereport.reportcharts.AbstractChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.AreaChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.BarChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.BarLineChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.BubbleChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.ExtendedXYLineChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.LineChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.MultiPieChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.PieChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.RadarChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.RingChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.ScatterPlotChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.ThermometerChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.WaterfallChartExpressions; import org.pentaho.plugin.jfreereport.reportcharts.XYAreaChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.XYAreaLineChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.XYBarChartExpression; import org.pentaho.plugin.jfreereport.reportcharts.XYLineChartExpression; import org.pentaho.reporting.engine.classic.core.AttributeNames; import org.pentaho.reporting.engine.classic.core.ReportElement; import org.pentaho.reporting.engine.classic.core.filter.types.ContentFieldType; import org.pentaho.reporting.engine.classic.core.filter.types.ElementTypeUtils; import org.pentaho.reporting.engine.classic.core.function.Expression; import org.pentaho.reporting.engine.classic.core.function.ExpressionRuntime; import org.pentaho.reporting.engine.classic.core.metadata.ElementMetaData; import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys; import java.util.Locale; public class LegacyChartType extends ContentFieldType { public static final LegacyChartType INSTANCE = new LegacyChartType(); private transient ElementMetaData elementType; public LegacyChartType() { super("legacy-chart"); } public Object getDesignValue(final ExpressionRuntime runtime, final ReportElement element) { final Expression theExpression = element.getAttributeExpression(AttributeNames.Core.NAMESPACE, AttributeNames.Core.VALUE); return createChart(theExpression); } private XYZDataset createXYZDataset() { final DefaultXYZDataset xyzDataset = new DefaultXYZDataset(); final double bs = 3; xyzDataset.addSeries("First", new double[][] { { 1, 2, 3 }, { 2, 1, 3 }, { 0.1 * bs, 0.2 * bs, 0.1 * bs } });// NON-NLS xyzDataset.addSeries("Second", new double[][] { { 1, 2, 3 }, { 3, 0, 1 }, { 0.2 * bs, 0.1 * bs, 0.15 * bs } });// NON-NLS return xyzDataset; } private PieDataset createPieDataset() { final DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Part 1", 23);// NON-NLS dataset.setValue("Part 2", 35);// NON-NLS dataset.setValue("Part 3", 42);// NON-NLS return dataset; } private XYDataset createIntervalXYDataset() { final DefaultIntervalXYDataset dataset = new DefaultIntervalXYDataset(); dataset.addSeries("First", new double[][] { { 1, 2, 3 }, { 3, 1, 2 }, { 1, 2, 1 }, { 4, 4, 4 }, { 3, 3, 3 }, { 4, 4, 4 }, });// NON-NLS // dataset.addSeries("Second", new double[][]{{1, 2, 3}, {3, 0, 1}, {1, 2, // 3}, {3, 0, 1}, {1, 2, 3}, {3, 0, 1}, });//NON-NLS return dataset; } private CategoryDataset createDataset() { final String series1 = "First";// NON-NLS final String series2 = "Second";// NON-NLS final String series3 = "Third";// NON-NLS final String category1 = "Category 1";// NON-NLS final String category2 = "Category 2";// NON-NLS final String category3 = "Category 3";// NON-NLS final String category4 = "Category 4";// NON-NLS final String category5 = "Category 5";// NON-NLS final DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1D, series1, category1); dataset.addValue(5D, series1, category2); dataset.addValue(4D, series1, category3); dataset.addValue(8D, series1, category4); dataset.addValue(7D, series1, category5); dataset.addValue(3D, series2, category1); dataset.addValue(4D, series2, category2); dataset.addValue(3D, series2, category3); dataset.addValue(5D, series2, category4); dataset.addValue(4D, series2, category5); dataset.addValue(1D, series3, category1); dataset.addValue(3D, series3, category2); dataset.addValue(2D, series3, category3); dataset.addValue(3D, series3, category4); dataset.addValue(2D, series3, category5); return dataset; } public Object getValue(final ExpressionRuntime runtime, final ReportElement element) { if (runtime == null) { throw new NullPointerException("Runtime must never be null."); } if (element == null) { throw new NullPointerException("Element must never be null."); } final Object value = ElementTypeUtils.queryStaticValue(element); if (value != null) { final Object filteredValue = filter(runtime, element, value); if (filteredValue != null) { return filteredValue; } } final Object nullValue = element.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE); return filter(runtime, element, nullValue); } public void configureDesignTimeDefaults(final ReportElement element, final Locale locale) { final AbstractChartExpression theExpression = new BarChartExpression(); element.setAttributeExpression(AttributeNames.Core.NAMESPACE, AttributeNames.Core.VALUE, theExpression); element.getStyle().setStyleProperty(ElementStyleKeys.MIN_WIDTH, new Float(280)); element.getStyle().setStyleProperty(ElementStyleKeys.MIN_HEIGHT, new Float(190)); } private JFreeChart createChart(final Expression aExpression) { if (aExpression instanceof BarLineChartExpression) { final CategoryAxis catAxis = new CategoryAxis("Category");// NON-NLS final NumberAxis barsAxis = new NumberAxis("Value");// NON-NLS final NumberAxis linesAxis = new NumberAxis("Value2");// NON-NLS final CategoryPlot plot = new CategoryPlot(createDataset(), catAxis, barsAxis, new BarRenderer()); plot.setRenderer(1, new LineAndShapeRenderer()); // add lines dataset and axis to plot plot.setDataset(1, createDataset()); plot.setRangeAxis(1, linesAxis); // map lines to second axis plot.mapDatasetToRangeAxis(1, 1); // set rendering order plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); // set location of second axis plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT); return new JFreeChart("Bar Line Chart", plot); } if (aExpression instanceof RingChartExpression) { return ChartFactory.createRingChart("Ring Chart", createPieDataset(), true, false, false);// NON-NLS } if (aExpression instanceof AreaChartExpression) { return ChartFactory.createAreaChart("Area Chart", "Category", "Value", createDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof BarChartExpression) { return ChartFactory.createBarChart("Bar Chart", "Category", "Value", createDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof LineChartExpression) { return ChartFactory.createLineChart("Line Chart", "Category", "Value", createDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof MultiPieChartExpression) { return ChartFactory.createMultiplePieChart("Multi Pie Chart", createDataset(), TableOrder.BY_COLUMN, true, false, false);// NON-NLS } if (aExpression instanceof PieChartExpression) { return ChartFactory.createPieChart("Pie Chart", createPieDataset(), true, false, false);// NON-NLS } if (aExpression instanceof WaterfallChartExpressions) { return ChartFactory.createWaterfallChart("Bar Chart", "Category", "Value", createDataset(), PlotOrientation.HORIZONTAL, true, false, false);// NON-NLS } if (aExpression instanceof BubbleChartExpression) { return ChartFactory.createBubbleChart("Bubble Chart", "X", "Y", createXYZDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof ExtendedXYLineChartExpression) { return ChartFactory.createXYLineChart("XY Line Chart", "X", "Y", createXYZDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof ScatterPlotChartExpression) { return ChartFactory.createScatterPlot("Scatter Chart", "X", "Y", createXYZDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof XYAreaLineChartExpression) { final NumberAxis catAxis = new NumberAxis("Range");// NON-NLS final NumberAxis barsAxis = new NumberAxis("Value");// NON-NLS final NumberAxis linesAxis = new NumberAxis("Value2");// NON-NLS final XYPlot plot = new XYPlot(createXYZDataset(), catAxis, barsAxis, new XYAreaRenderer()); plot.setRenderer(1, new XYLineAndShapeRenderer()); // add lines dataset and axis to plot plot.setDataset(1, createXYZDataset()); plot.setRangeAxis(1, linesAxis); // map lines to second axis plot.mapDatasetToRangeAxis(1, 1); // set rendering order plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); // set location of second axis plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT); return new JFreeChart("XY Area Line Chart", plot);// NON-NLS } if (aExpression instanceof XYAreaChartExpression) { return ChartFactory.createXYAreaChart("XY Area Chart", "X", "Y", createXYZDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof XYBarChartExpression) { return XYBarChartExpression.createXYBarChart("XY Bar Chart", "X", false, "Y", createIntervalXYDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof XYLineChartExpression) { return ChartFactory.createXYLineChart("XY Line Chart", "X", "Y", createXYZDataset(), PlotOrientation.VERTICAL, true, false, false);// NON-NLS } if (aExpression instanceof RadarChartExpression) { final SpiderWebPlot plot = new SpiderWebPlot(createDataset()); return new JFreeChart("Radar Chart", JFreeChart.DEFAULT_TITLE_FONT, plot, true); } if (aExpression instanceof ThermometerChartExpression) { final DefaultValueDataset dataset = new DefaultValueDataset(new Double(65.0)); final ThermometerPlot plot = new ThermometerPlot(dataset); return new JFreeChart("Thermometer Chart", JFreeChart.DEFAULT_TITLE_FONT, plot, true); } return null; } }