001: /***********************************************************************************************
002: * File Info: $Id: ChartTestDriver.java,v 1.3 2004/05/26 01:58:07 nathaniel_auvil Exp $
003: * Copyright (C) 2000
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.test;
039:
040: import org.krysalis.jcharts.Chart;
041: import org.krysalis.jcharts.properties.PropertyException;
042: import org.krysalis.jcharts.chartData.ChartDataException;
043: import org.krysalis.jcharts.encoders.*;
044:
045: import java.io.*;
046:
047: /******************************************************************************************
048: * This file provides examples of how to create all the different chart types provided by
049: * this package.
050: *
051: *******************************************************************************************/
052: public final class ChartTestDriver {
053: private final static String SVG = ".svg";
054: private final static String PNG = ".png";
055: private final static String JPEG = ".jpg";
056: private final static String JPEG_LEGACY = ".jpeg";
057: final static String OUTPUT_PATH = "";
058:
059: final static String EXTENSION = PNG;
060:
061: /*****************************************************************************************
062: * Main method so can run as command line.
063: *
064: * @param args command line arguements.
065: *****************************************************************************************/
066: public static void main(String[] args) throws ChartDataException,
067: PropertyException {
068: StopWatch stopWatch = new StopWatch();
069: stopWatch.start();
070:
071: AxisChartTestBase
072: .axisChartTest("barChart", new BarTestDriver());
073:
074: /*
075: AxisChartTestBase.axisChartTest( "stockChart", new StockTestDriver() );
076:
077: AxisChartTestBase.axisChartTest( "areaChart", new AreaTestDriver() );
078:
079: AxisChartTestBase.axisChartTest( "barChart", new BarTestDriver() );
080: AxisChartTestBase.axisChartTest( "stackedBarChart", new StackedBarTestDriver() );
081: AxisChartTestBase.axisChartTest( "clusteredBarChart", new ClusteredBarTestDriver() );
082: */
083:
084: // AxisChartTestBase.axisChartTest( "comboChart", new ComboTestDriver() );
085:
086: /*
087: PieTestDriver.test();
088:
089:
090: AxisChartTestBase.axisChartTest( "pointChart", new PointTestDriver() );
091:
092: AxisChartTestBase.axisChartTest( "lineChart", new LineTestDriver() );
093:
094: */
095: // AxisChartTestBase.axisChartTest( "scatterChart", new ScatterPlotTestDriver() );
096:
097: //ChartTestDriver.testAxisScale();
098:
099: stopWatch.stop();
100: System.out.println(stopWatch);
101: }
102:
103: private static void testAxisScale() {
104:
105: double yMax = -15;
106: double yMin = -130;
107:
108: // In the following line, note that Math.log is actually Natural Logarithm.
109: // log base a of b = ln b / ln a => log base 10 of x = ln 10 / ln x
110: double yDelta = Math.pow(10.0, Math.round(Math.log(yMax - yMin)
111: / Math.log(10)));
112: double yStart = yMin - (yMin % yDelta);
113: double yEnd = yMax - (yMax % yDelta) + yDelta;
114:
115: System.out.println("yDelta= " + yDelta + " yStart= " + yStart
116: + " yEnd= " + yEnd);
117:
118: // Count the number of segments this gives us. Shoot for 20 segments or so.
119: int segments = (int) ((yEnd - yStart) / yDelta);
120:
121: if (segments <= 2) {
122: // we need 10 times this many
123: yDelta = yDelta / 10.0;
124: } else if (segments <= 5) {
125: // we need 4 times this many
126: yDelta = yDelta / 4.0;
127: } else if (segments <= 10) {
128: yDelta = yDelta / 2.0;
129: }
130:
131: // Recalc start and end to match with new delta.
132: yStart = yMin - (yMin % yDelta);
133: yEnd = yMax - (yMax % yDelta) + yDelta;
134: segments = (int) ((yEnd - yStart) / yDelta);
135:
136: /*
137:
138: axisProperties = new AxisProperties(yStart, yDelta);
139: axisProperties.setYAxisNumItems(segments);
140: */
141:
142: }
143:
144: /******************************************************************************************
145: * Utility method to write the image to file so I do not have to deal with file i/o
146: * every time I write a test.
147: *
148: * @param chart verything that is renderable extends this class.
149: * @param fileName what to name the file
150: * @throws ChartDataException
151: * @throws PropertyException
152: ******************************************************************************************/
153: static void exportImage(Chart chart, String fileName)
154: throws ChartDataException, PropertyException {
155: try {
156: FileOutputStream fileOutputStream = new FileOutputStream(
157: fileName);
158:
159: if (EXTENSION.equals(SVG)) {
160: SVGEncoder.encode(chart, fileOutputStream);
161: } else if (EXTENSION.equals(PNG)) {
162: PNGEncoder.encode(chart, fileOutputStream);
163: } else if (EXTENSION.equals(JPEG)) {
164: JPEGEncoder.encode(chart, 1.0f, fileOutputStream);
165: } else if (EXTENSION.equals(JPEG_LEGACY)) {
166: JPEGEncoder13.encode(chart, 1.0f, fileOutputStream);
167: } else {
168: System.out.println("unknown file type to encode: "
169: + EXTENSION);
170: }
171:
172: fileOutputStream.flush();
173: fileOutputStream.close();
174: } catch (FileNotFoundException fileNotFoundException) {
175: fileNotFoundException.printStackTrace();
176: } catch (IOException ioException) {
177: ioException.printStackTrace();
178: }
179: }
180:
181: }
|