001: /***********************************************************************************************
002: * File Info: $Id: AxisDataSeries.java,v 1.2 2004/05/31 16:24:34 nathaniel_auvil Exp $
003: * Copyright (C) 2002
004: * Author: Nathaniel G. Auvil
005: * Contributor(s):
006: *
007: * Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved.
008: *
009: * Redistribution and use of this software and associated documentation ("Software"), with or
010: * without modification, are permitted provided that the following conditions are met:
011: *
012: * 1. Redistributions of source code must retain copyright statements and notices.
013: * Redistributions must also contain a copy of this document.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
016: * conditions and the following disclaimer in the documentation and/or other materials
017: * provided with the distribution.
018: *
019: * 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to endorse or promote
020: * products derived from this Software without prior written permission of Nathaniel G.
021: * Auvil. For written permission, please contact nathaniel_auvil@users.sourceforge.net
022: *
023: * 4. Products derived from this Software may not be called "jCharts" nor may "jCharts" appear
024: * in their names without prior written permission of Nathaniel G. Auvil. jCharts is a
025: * registered trademark of Nathaniel G. Auvil.
026: *
027: * 5. Due credit should be given to the jCharts Project (http://jcharts.sourceforge.net/).
028: *
029: * THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS ``AS IS'' AND ANY
030: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
031: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
032: * jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
033: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
034: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
035: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,STRICT LIABILITY, OR TORT
036: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
037: * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
038: ************************************************************************************************/package org.krysalis.jcharts.chartData;
039:
040: import org.krysalis.jcharts.chartData.interfaces.IAxisDataSeries;
041: import org.krysalis.jcharts.chartData.interfaces.IAxisPlotDataSet;
042: import org.krysalis.jcharts.test.HTMLGenerator;
043: import org.krysalis.jcharts.test.HTMLTestable;
044: import org.krysalis.jcharts.types.ChartType;
045: import org.krysalis.jcharts.properties.PropertyException;
046:
047: import java.util.Iterator;
048: import java.util.HashMap;
049:
050: /*********************************************************************************************
051: * Collection of all IAxisChartDataSets to display in an AxisChart
052: *
053: **********************************************************************************************/
054: public abstract class AxisDataSeries implements IAxisDataSeries,
055: HTMLTestable {
056: private String chartTitle;
057: private String xAxisTitle;
058: private String yAxisTitle;
059: protected HashMap dataSets;
060:
061: protected int totalNumberOfDataSets;
062: private int sizeOfEachDataSet;
063:
064: /******************************************************************************************
065: * Constructor
066: *
067: * @param xAxisTitle if this is NULL, no title will be displayed
068: * @param yAxisTitle if this is NULL, no title will be displayed
069: * @param chartTitle if this is NULL, no title will be displayed
070: *******************************************************************************************/
071: public AxisDataSeries(String xAxisTitle, String yAxisTitle,
072: String chartTitle) {
073: this .xAxisTitle = xAxisTitle;
074: this .yAxisTitle = yAxisTitle;
075: this .chartTitle = chartTitle;
076: dataSets = new HashMap();
077: }
078:
079: /******************************************************************************************
080: * Returns the x-axis title
081: *
082: * @return String
083: *******************************************************************************************/
084: public String getXAxisTitle() {
085: return this .xAxisTitle;
086: }
087:
088: /******************************************************************************************
089: * Returns the y-axis title
090: *
091: * @return String
092: *******************************************************************************************/
093: public String getYAxisTitle() {
094: return this .yAxisTitle;
095: }
096:
097: /******************************************************************************************
098: * Returns the chart title.
099: *
100: * @return String the chart title. If this returns NULL, no title will be displayed.
101: ******************************************************************************************/
102: public String getChartTitle() {
103: return this .chartTitle;
104: }
105:
106: /******************************************************************************************
107: * Returns the IAxisPlotDataSet for the passed chart type constant. Will return NULL if
108: * if no data set exists for the passed type.
109: *
110: * @param chartType
111: * @return IAxisPlotDataSet
112: ******************************************************************************************/
113: public IAxisPlotDataSet getIAxisPlotDataSet(ChartType chartType) {
114: return (IAxisPlotDataSet) this .dataSets.get(chartType);
115: }
116:
117: /******************************************************************************************
118: * Returns an Iterator over a List of IAxisPlotDataSet Objects
119: *
120: * @return Iterator over a List of IAxisPlotDataSet Objects
121: *******************************************************************************************/
122: public Iterator getIAxisPlotDataSetIterator() {
123: return this .dataSets.values().iterator();
124: }
125:
126: /******************************************************************************************
127: * Returns the total number data dimensions in all of the IAxisChartDataSets contained in
128: * this collection. For example, if this contains two IAxisChartDataSets and each one
129: * contains 3 dimensions ( 3 lines and 3 sets of points ), this should return six. This
130: * provides a means to avoid looping the contents of the series each time i need the value.
131: *
132: * @return int
133: ******************************************************************************************/
134: public int getTotalNumberOfDataSets() {
135: return this .totalNumberOfDataSets;
136: }
137:
138: /******************************************************************************************
139: * Adds the passed IAxisPlotDataSet to the series
140: *
141: * @param iAxisPlotDataSet
142: ******************************************************************************************/
143: public void addIAxisPlotDataSet(IAxisPlotDataSet iAxisPlotDataSet) {
144: this .dataSets.put(iAxisPlotDataSet.getChartType(),
145: iAxisPlotDataSet);
146:
147: //---set the number of dimensions
148: totalNumberOfDataSets += iAxisPlotDataSet.getNumberOfDataSets();
149:
150: this .sizeOfEachDataSet = iAxisPlotDataSet
151: .getNumberOfDataItems();
152: }
153:
154: /****************************************************************************************
155: *
156: * @throws ChartDataException
157: * @throws PropertyException
158: ***************************************************************************************/
159: public void validate() throws ChartDataException, PropertyException {
160: IAxisPlotDataSet iAxisPlotDataSet;
161: Iterator iterator = this .getIAxisPlotDataSetIterator();
162:
163: while (iterator.hasNext()) {
164: iAxisPlotDataSet = (IAxisPlotDataSet) iterator.next();
165: iAxisPlotDataSet.validate();
166:
167: if (iAxisPlotDataSet.getNumberOfDataItems() != this .sizeOfEachDataSet) {
168: throw new ChartDataException(
169: "All IAxisPlotDataSet implementations must contain an equal number of elements in a Combo Chart");
170: }
171: }
172: }
173:
174: /******************************************************************************************
175: * Returns number of elements in each data set dimension, so i can validate a that all
176: * IAxisPlotDataSets on a ComboChart have the same number of elements, as well as the
177: * number of Axis Labels equal the number of data elements other charts.
178: *
179: * @return int
180: *****************************************************************************************/
181: public int getSizeOfEachDataSet() {
182: return sizeOfEachDataSet;
183: }
184:
185: /*********************************************************************************************
186: * Enables the testing routines to display the contents of this Object.
187: *
188: * @param htmlGenerator
189: **********************************************************************************************/
190: public void toHTML(HTMLGenerator htmlGenerator) {
191: htmlGenerator.propertiesTableRowStart();
192: {
193: htmlGenerator.propertiesTableStart(this .getClass()
194: .getName());
195: htmlGenerator.addTableRow("chart title", this .chartTitle);
196: htmlGenerator.addTableRow("xAxisTitle", this .xAxisTitle);
197: htmlGenerator.addTableRow("yAxisTitle", this .yAxisTitle);
198: htmlGenerator.propertiesTableEnd();
199: }
200: htmlGenerator.propertiesTableRowEnd();
201: }
202:
203: /******************************************************************************************
204: * Returns the number of IAxisPlotDataSet Objects in this series
205: *
206: * @return int
207: ******************************************************************************************/
208: public int size() {
209: return this.dataSets.size();
210: }
211:
212: }
|