/* * 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. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details. * * * Copyright 2006 - 2013 Pentaho Corporation. All rights reserved. */ package org.pentaho.platform.uifoundation.chart; import org.dom4j.Node; import org.jfree.chart.axis.ValueAxis; import org.pentaho.commons.connection.IPentahoResultSet; import org.pentaho.platform.api.engine.IPentahoSession; import java.awt.Font; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; public class BarLineChartDefinition extends CategoryDatasetChartDefinition { private static final String SERIES_NODE_NAME = "series"; //$NON-NLS-1$ private static final String BAR_SERIES_NODE_NAME = "bar-series"; //$NON-NLS-1$ private static final String LINE_SERIES_NODE_NAME = "line-series"; //$NON-NLS-1$ // private static final String CATEGORY_NODE_NAME = "category-column"; //$NON-NLS-1$ private static final String LINES_RANGE_TITLE_NODE_NAME = "lines-range-title"; //$NON-NLS-1$ private static final String LINES_RANGE_TITLE_FONT_NODE_NAME = "lines-range-title-font"; //$NON-NLS-1$ private static final String LINES_RANGE_TICK_FORMAT_NODE_NAME = "lines-range-tick-format"; //$NON-NLS-1$ private static final String LINES_RANGE_TICK_FONT_NODE_NAME = "lines-range-tick-font"; //$NON-NLS-1$ private static final String LINES_RANGE_MINIMUM_NODE_NAME = "lines-range-minimum"; //$NON-NLS-1$ private static final String LINES_RANGE_MAXIMUM_NODE_NAME = "lines-range-maximum"; //$NON-NLS-1$ private String[] barColumns; private String[] lineColumns; // not used // private String categoryColumn; private Node chartAttributes; private String linesRangeTitle = null; private Font linesRangeTitleFont = null; private NumberFormat linesRangeTickFormat = null; private Font linesRangeTickFont = null; private double linesRangeMinimum = ValueAxis.DEFAULT_LOWER_BOUND; private double linesRangeMaximum = ValueAxis.DEFAULT_UPPER_BOUND; private static final long serialVersionUID = 1955883428823312855L; public BarLineChartDefinition( final IPentahoResultSet data, final boolean byRow, final Node chartAttributes, final IPentahoSession session ) { super( data, byRow, chartAttributes, session ); // setting standard category chart definition attriutes setChartAttributes( chartAttributes ); // Setting bar-line-chart attributes // setCategoryColumn(chartAttributes.selectSingleNode(CATEGORY_NODE_NAME)); setBarSeries( chartAttributes.selectSingleNode( BarLineChartDefinition.BAR_SERIES_NODE_NAME ) ); setLineSeries( chartAttributes.selectSingleNode( BarLineChartDefinition.LINE_SERIES_NODE_NAME ) ); setLinesRangeTitle( chartAttributes.selectSingleNode( BarLineChartDefinition.LINES_RANGE_TITLE_NODE_NAME ) ); setLinesRangeTitleFont( chartAttributes.selectSingleNode( BarLineChartDefinition .LINES_RANGE_TITLE_FONT_NODE_NAME ) ); setLinesRangeTickFormat( chartAttributes .selectSingleNode( BarLineChartDefinition.LINES_RANGE_TICK_FORMAT_NODE_NAME ) ); setLinesRangeTickFont( chartAttributes.selectSingleNode( BarLineChartDefinition.LINES_RANGE_TICK_FONT_NODE_NAME ) ); setLinesRangeMinimum( chartAttributes.selectSingleNode( BarLineChartDefinition.LINES_RANGE_MINIMUM_NODE_NAME ) ); setLinesRangeMaximum( chartAttributes.selectSingleNode( BarLineChartDefinition.LINES_RANGE_MAXIMUM_NODE_NAME ) ); } public String[] getBarColumns() { return barColumns; } public void setBarColumns( final String[] barColumns ) { this.barColumns = barColumns; } // public String getCategoryColumn() { // return categoryColumn; // } // // public void setCategoryColumn(Node categoryNode) { // if (categoryNode != null) { // this.categoryColumn = categoryNode.getText(); // } // } public String[] getLineColumns() { return lineColumns; } public void setLineColumns( final String[] lineColumns ) { this.lineColumns = lineColumns; } public void setBarSeries( final Node barSeriesNode ) { if ( barSeriesNode != null ) { List barNodes = barSeriesNode.selectNodes( BarLineChartDefinition.SERIES_NODE_NAME ); String[] bars = new String[barNodes.size()]; for ( int i = 0; i < barNodes.size(); i++ ) { Node barNode = (Node) barNodes.get( i ); bars[i] = barNode.getText(); } setBarColumns( bars ); } } public void setLineSeries( final Node lineSeriesNode ) { if ( lineSeriesNode != null ) { List lineNodes = lineSeriesNode.selectNodes( BarLineChartDefinition.SERIES_NODE_NAME ); String[] lines = new String[lineNodes.size()]; for ( int i = 0; i < lineNodes.size(); i++ ) { Node lineNode = (Node) lineNodes.get( i ); lines[i] = lineNode.getText(); } setLineColumns( lines ); } } public Node getChartAttributes() { return chartAttributes; } public void setChartAttributes( final Node chartAttributes ) { this.chartAttributes = chartAttributes; } public String getLinesRangeTitle() { return linesRangeTitle; } public void setLinesRangeTitle( final Node titleNode ) { if ( titleNode != null ) { setLinesRangeTitle( titleNode.getText() ); } } public void setLinesRangeTitle( final String linesRangeTitle ) { this.linesRangeTitle = linesRangeTitle; } public Font getLinesRangeTitleFont() { return linesRangeTitleFont; } public void setLinesRangeTitleFont( final Node titleFontNode ) { Font font = JFreeChartEngine.getFont( titleFontNode ); if ( font != null ) { setLinesRangeTitleFont( font ); } } public void setLinesRangeTitleFont( final Font linesRangeTitleFont ) { this.linesRangeTitleFont = linesRangeTitleFont; } public NumberFormat getLinesRangeTickFormat() { return linesRangeTickFormat; } public void setLinesRangeTickFormat( final NumberFormat linesRangeTickFormat ) { this.linesRangeTickFormat = linesRangeTickFormat; } public void setLinesRangeTickFormat( final Node tickFormatFontNode ) { if ( tickFormatFontNode != null ) { NumberFormat format = new DecimalFormat( tickFormatFontNode.getText() ); if ( format != null ) { setLinesRangeTickFormat( format ); } } } /** * Return the java.awt.Font to be used to display the range axis tick labels * * @return Font The Font for the range axis tick labels */ public Font getLinesRangeTickFont() { return linesRangeTickFont; } public void setLinesRangeTickFont( final Font linesRangeTickFont ) { this.linesRangeTickFont = linesRangeTickFont; } public void setLinesRangeTickFont( final Node linesRangeTickFontNode ) { Font font = JFreeChartEngine.getFont( linesRangeTickFontNode ); if ( font != null ) { setLinesRangeTickFont( font ); } } /** * Return the range axis' minimum value * * @return double Range axis' minimum value */ public double getLinesRangeMinimum() { return linesRangeMinimum; } public void setLinesRangeMinimum( final Node linesRangeMinimumNode ) { if ( linesRangeMinimumNode != null ) { setLinesRangeMinimum( Double.parseDouble( linesRangeMinimumNode.getText() ) ); } } /** * @param double rangeMinimum Set the minimum value of the range axis. */ public void setLinesRangeMinimum( final double linesRangeMinimum ) { this.linesRangeMinimum = linesRangeMinimum; } /** * Return the range axis' maximum value * * @return double Range axis' maximum value */ public double getLinesRangeMaximum() { return linesRangeMaximum; } public void setLinesRangeMaximum( final Node linesRangeMaximumNode ) { if ( linesRangeMaximumNode != null ) { setLinesRangeMaximum( Double.parseDouble( linesRangeMaximumNode.getText() ) ); } } /** * @param double rangeMinimum Set the minimum value of the range axis. */ public void setLinesRangeMaximum( final double linesRangeMaximum ) { this.linesRangeMaximum = linesRangeMaximum; } public void setNoDataMessage( final String msg ) { noDataMessage = msg; } }