/*********************************************************************************************** * File Info: $Id: ImageMapArea.java,v 1.1 2003/05/17 16:59:18 nathaniel_auvil Exp $ * Copyright (C) 2001 * Author: Nathaniel G. Auvil * Contributor(s): * * Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved. * * Redistribution and use of this software and associated documentation * ("Software"), with or without modification, are permitted provided * that the following conditions are met: * * 1. Redistributions of source code must retain copyright * statements and notices. Redistributions must also contain a * copy of this document. * * 2. Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to * endorse or promote products derived from this Software without * prior written permission of Nathaniel G. Auvil. For written * permission, please contact nathaniel_auvil@users.sourceforge.net * * 4. Products derived from this Software may not be called "jCharts" * nor may "jCharts" appear in their names without prior written * permission of Nathaniel G. Auvil. jCharts is a registered * trademark of Nathaniel G. Auvil. * * 5. Due credit should be given to the jCharts Project * (http://jcharts.sourceforge.net/). * * THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. ************************************************************************************************/ package org.krysalis.jcharts.imageMap; import java.io.Serializable; import com.google.code.appengine.awt.geom.Point2D; /***************************************************************************************** * * ******************************************************************************************/ public abstract class ImageMapArea implements Serializable { //---less overhead than creating Point Objects int[] x; int[] y; private double value; private String xAxisLabel; private String legendLabel; /*************************************************************************************** * * @param numberOfPoints * @param value * @param xAxisLabel * @param legendLabel ****************************************************************************************/ ImageMapArea( int numberOfPoints, double value, String xAxisLabel, String legendLabel ) { this.x=new int[ numberOfPoints ]; this.y=new int[ numberOfPoints ]; this.value=value; this.xAxisLabel=xAxisLabel; this.legendLabel=legendLabel; } /*************************************************************************************** * * @param numberOfPoints * @param point * @param legendLabel ****************************************************************************************/ ImageMapArea( int numberOfPoints, Point2D.Double point, String legendLabel ) { this.x=new int[ numberOfPoints ]; this.y=new int[ numberOfPoints ]; this.value= point.getY(); this.xAxisLabel= Double.toString( point.getX() ); this.legendLabel=legendLabel; } /************************************************************************************ * * @return AreaShape ***********************************************************************************/ abstract AreaShape getAreaShape(); /*************************************************************************************** * Returns the number of x,y coordinate pairs stored for the area * * @return int ****************************************************************************************/ public final int getNumberOfCoordinates() { return this.x.length; } /*************************************************************************************** * Returns the x coordinate at the specified index. Not returned as a Point Object so we * can avoid uneeded Object creation/destruction overhead. * * @return int ****************************************************************************************/ public final int getXCoordinate( int index ) { return this.x[ index ]; } /*************************************************************************************** * Returns the y coordinate at the specified index. Not returned as a Point Object so we * can avoid uneeded Object creation/destruction overhead. * * @return int ****************************************************************************************/ public final int getYCoordinate( int index ) { return this.y[ index ]; } /*************************************************************************************** * Returns the data set value represented by this map. * * @return double ****************************************************************************************/ public final double getValue() { return this.value; } /*************************************************************************************** * Rather than create an AxisChart specifc map area class just for this field, i put it * here. This is not applicable for PieCharts. * * @return String will return NULL for PieCharts ****************************************************************************************/ public final String getXAxisLabel() { return this.xAxisLabel; } /*************************************************************************************** * Returns the legend label represented by this map area. Will be NULL if you did not * pass a name to the data set constructor. * * @return String ****************************************************************************************/ public final String getLengendLabel() { return this.legendLabel; } /*************************************************************************************** * Appends the coordinates to the passed html buffer. This is needed to facilitate the * 'circle' map areas 'radius' value. * * @param html pass a reference to the StringBuffer so I can minimize Object creation ****************************************************************************************/ protected void getCoordinates( StringBuffer html ) { for( int i=0; i < this.x.length; i++ ) { html.append( this.x[ i ] + "," + this.y[ i ] ); if( i + 1 != this.x.length ) { html.append( "," ); } } } /************************************************************************************************** * Returns a <pre><area shape="..." coords="....." + mapElementAttributes ></pre> HTML element. * The mapElementAttributes frees this method from having to declare all attributes of the HTML map * element. * * @param mapElementAttributes allows you to place any map attributes you want: * href, alt, onClick, onMouseOver, etc... * @return String the HTML ***************************************************************************************************/ public final String toHTML( String mapElementAttributes ) { StringBuffer html=new StringBuffer( 250 ); html.append( "<area" ); html.append( " shape=\"" + this.getAreaShape().getValue() + "\"" ); html.append( " coords=\"" ); this.getCoordinates( html ); html.append( "\" " ); html.append( mapElementAttributes ); html.append( ">\n" ); return html.toString(); } }