/* * 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 2005 - 2008 Pentaho Corporation. All rights reserved. * */ package org.pentaho.platform.uifoundation.chart; import java.awt.Font; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; import org.dom4j.Node; import org.jfree.chart.axis.ValueAxis; import org.pentaho.commons.connection.IPentahoResultSet; import org.pentaho.platform.api.engine.IPentahoSession; 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; } }