001: /***********************************************************************************************
002: * File Info: $Id: ScatterPlotDataProcessor.java,v 1.1 2003/05/17 16:57:50 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.processors;
039:
040: import org.krysalis.jcharts.axisChart.AxisChart;
041: import org.krysalis.jcharts.chartData.interfaces.IScatterPlotDataSeries;
042: import org.krysalis.jcharts.chartData.interfaces.IScatterPlotDataSet;
043: import org.krysalis.jcharts.types.ChartType;
044:
045: import java.awt.font.FontRenderContext;
046: import java.awt.geom.Point2D;
047:
048: /*******************************************************************************************
049: *
050: ********************************************************************************************/
051: public final class ScatterPlotDataProcessor extends
052: AxisChartDataProcessor {
053: private double yMax;
054: private double yMin;
055:
056: /******************************************************************************************
057: * Constructor
058: *
059: *******************************************************************************************/
060: public ScatterPlotDataProcessor() {
061:
062: }
063:
064: /******************************************************************************************
065: * Method to perform all chart data processing.
066: *
067: * @param axisChart
068: ******************************************************************************************/
069: public void processData(AxisChart axisChart,
070: FontRenderContext fontRenderContext) {
071: //todo would it make sense to do this and do the axis titles?
072: /*
073: if( axisChart.getIDataSeries().getChartTitle() != null )
074: {
075: this.titleTextLayout= new TextLayout( axisChart.getIDataSeries().getChartTitle(),
076: axisChart.getChartProperties().getTitleFont(),
077: fontRenderContext );
078: }
079: */
080:
081: IScatterPlotDataSeries iScatterPlotDataSeries = (IScatterPlotDataSeries) axisChart
082: .getIAxisDataSeries();
083: this .processDataSet(iScatterPlotDataSeries);
084:
085: //todo does it make sense to do the legend label processing here?
086: /*
087: if( axisChart.hasLegend() )
088: {
089: //this.lengendLabelProcessor= new TextProcessor();
090: // this.lengendLabelProcessor
091: }
092: */
093: }
094:
095: /******************************************************************************************
096: * Processes the numeric values in the chart data. If there is a user defined scale
097: * there is no need to call this.
098: *
099: * @param iScatterPlotDataSeries
100: ******************************************************************************************/
101: private void processDataSet(
102: IScatterPlotDataSeries iScatterPlotDataSeries) {
103: IScatterPlotDataSet iScatterPlotDataSet = (IScatterPlotDataSet) iScatterPlotDataSeries
104: .getIAxisPlotDataSet(ChartType.SCATTER_PLOT);
105:
106: Point2D.Double point;
107:
108: for (int dataSet = 0; dataSet < iScatterPlotDataSet
109: .getNumberOfDataSets(); dataSet++) {
110: for (int index = 0; index < iScatterPlotDataSet
111: .getNumberOfDataItems(); index++) {
112: point = iScatterPlotDataSet.getValue(dataSet, index);
113:
114: if (point == null) {
115: continue;
116: }
117:
118: if (point.getX() > super .getMaxValue()) {
119: super .setMaxValue(point.getX());
120: }
121:
122: if (point.getX() < super .getMinValue()) {
123: super .setMinValue(point.getX());
124: }
125:
126: if (point.getY() > this .getyMax()) {
127: this .setyMax(point.getY());
128: }
129:
130: if (point.getY() < this .getyMin()) {
131: this .setyMin(point.getY());
132: }
133: }
134: }
135:
136: //System.out.println( this.toString() );
137: }
138:
139: /******************************************************************************************
140: *
141: ******************************************************************************************/
142: public double getyMax() {
143: return yMax;
144: }
145:
146: /******************************************************************************************
147: *
148: ******************************************************************************************/
149: public void setyMax(double yMax) {
150: this .yMax = yMax;
151: }
152:
153: /******************************************************************************************
154: *
155: ******************************************************************************************/
156: public double getyMin() {
157: return yMin;
158: }
159:
160: /******************************************************************************************
161: *
162: ******************************************************************************************/
163: public void setyMin(double yMin) {
164: this .yMin = yMin;
165: }
166:
167: /******************************************************************************************
168: *
169: ******************************************************************************************/
170: public String toString() {
171: StringBuffer s = new StringBuffer(60);
172: s.append(this .getClass().getName());
173: s.append(": xMin= " + super .getMinValue());
174: s.append(" xMax= " + super .getMaxValue());
175: s.append(" yMin= " + this .yMin);
176: s.append(" yMax= " + this .yMax);
177: return s.toString();
178: }
179:
180: /*********************************************************************************************
181: * Enables the testing routines to display the contents of this Object.
182: *
183: * @param htmlGenerator
184: **********************************************************************************************
185: public void toHTML( HTMLGenerator htmlGenerator )
186: {
187: super.toHTML( htmlGenerator );
188:
189: String name= this.getClass().getSuperclass().getName() + "->";
190:
191: //---calling on instance of YAxis or XAxis
192: Field[] fields= this.getClass().getSuperclass().getDeclaredFields();
193: for( int i=0; i< fields.length; i++ )
194: {
195: htmlGenerator.addField( name + fields[ i ].getName(), fields[ i ].get( this ) );
196: }
197: }
198: */
199: }
|