krysalis-jcharts/src/java/org/krysalis/jcharts/demo/simpleservlet DualYAxis.java,1.2,1.3

"Nathaniel G. Auvil" <[email protected]> Sat, 03 Jul 2004 20:39:03 +0000
Newsgroups gmane.comp.krysalis.jcharts.cvs
Message-ID <[email protected]>
Update of /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/demo/simpleservlet
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13510/src/java/org/krysalis/jcharts/demo/simpleservlet

Modified Files:
	DualYAxis.java 
Log Message:
commented code out so will compile

Index: DualYAxis.java
===================================================================
RCS file: /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/demo/simpleservlet/DualYAxis.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** DualYAxis.java	28 Aug 2003 01:18:02 -0000	1.2
--- DualYAxis.java	3 Jul 2004 20:39:01 -0000	1.3
***************
*** 1,277 ****
! 
! /***********************************************************************************************
!  * File Info: $Id$
!  * Copyright (C) 2002
!  * 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 [email protected]
!  *
!  * 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.demo.simpleservlet;
! 
! 
! import org.krysalis.jcharts.axisChart.AxisChart;
! import org.krysalis.jcharts.chartData.AxisChartDataSet;
! import org.krysalis.jcharts.chartData.DataSeries;
! import org.krysalis.jcharts.chartData.interfaces.IAxisDataSeries;
! import org.krysalis.jcharts.encoders.ServletEncoderHelper;
! import org.krysalis.jcharts.properties.AxisProperties;
! import org.krysalis.jcharts.properties.ChartProperties;
! import org.krysalis.jcharts.properties.ClusteredBarChartProperties;
! import org.krysalis.jcharts.properties.DataAxisProperties;
! import org.krysalis.jcharts.properties.LegendProperties;
! import org.krysalis.jcharts.properties.LineChartProperties;
! import org.krysalis.jcharts.properties.PointChartProperties;
! import org.krysalis.jcharts.properties.util.ChartFont;
! import org.krysalis.jcharts.types.ChartType;
! 
! import javax.servlet.ServletException;
! import javax.servlet.http.HttpServletRequest;
! import javax.servlet.http.HttpServletResponse;
! import java.awt.*;
! import java.io.IOException;
! 
! // Dual Y axis changes courtesy of St�phane NGUYEN integrated by CMC 25Aug03
! // French translation courtesy of my good wife Jacki ...
! public class DualYAxis extends ChartServlet {
! 
! 
!     //---all of the charts will have some properties.
!     private LineChartProperties lineChartProperties;
!     private ClusteredBarChartProperties clusteredBarChartProperties;
! 
!     protected LegendProperties legendProperties;
!     protected ChartProperties chartProperties;
!     protected AxisProperties axisProperties;
! 
!     //---all of the charts have the same size
!     protected int width = 750;
!     protected int height = 430;
! 
! 
!   public void init() {
! 
! 
!     //---------------------Font & Police----------------------------------------
! 
!     legendProperties = new LegendProperties();
!     chartProperties = new ChartProperties();
!     axisProperties = new AxisProperties(false);
! 
!     ChartFont axisScaleFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 10), Color.black);
!     axisProperties.getXAxisProperties().setScaleChartFont(axisScaleFont);
!     axisProperties.getYAxisProperties().setScaleChartFont(axisScaleFont);
! 
!     ChartFont axisTitleFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 13), Color.black);
!     axisProperties.getXAxisProperties().setTitleChartFont(axisTitleFont);
!     axisProperties.getYAxisProperties().setTitleChartFont(axisTitleFont);
! 
!     ChartFont titleFont = new ChartFont(new Font("Georgia Negreta cursiva", Font.PLAIN, 15), Color.black);
!     chartProperties.setTitleFont(titleFont);
! 
!     //On fixe la marge avec le cadre
!     // Set the margin within the frame
!     chartProperties.setEdgePadding(2f);
! 
!     //On met le graphe sur un fond gris clair
!     // Set the chart against a plain grey background
!     axisProperties.setBackgroundPaint(new Color (245, 245, 245)); 
! 
!     //Param�trage de la bo�te de l�gende
!     //Parameters for the legend box
!     //legendProperties.setPlacement(LegendAreaProperties.RIGHT);
!     //legendProperties.setNumColumns(1);
!     //legendProperties.setFont( new Font("Arial Narrow", Font.PLAIN, 13) );
!     //legendProperties.setFontPaint(Color.black);
!     ChartFont legendFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 13), Color.black);
!     legendProperties.setChartFont(legendFont);
!     legendProperties.setChartPadding(10);
! 
!     //Arrondi � la puissance 10
!     //Round up to the power of 10
!     DataAxisProperties dataAxisProperties= (DataAxisProperties) axisProperties.getYAxisProperties();
!     dataAxisProperties.setRoundToNearest(1);
! 
!     //Parametrage du nombre de graduation sur l'axe des ordonn�es
!     //Set the number of ticks(?) for the ordinal axis
!     dataAxisProperties.setNumItems(6);
! 
!     //utilisation de la virgule s'il y a lieu (normalement non)
!     // Set the use of the comma if there are any (usually not)
!     dataAxisProperties.setUseCommas(false);
! 
!     //Ne pas afficher les bordures sup�rieur et droite du chart
!     // Don't attach upper borders and the right of the chart
!     axisProperties.getYAxisProperties().setShowEndBorder(false);
!     axisProperties.getXAxisProperties().setShowEndBorder(false);
! 
! 
!     Stroke[] strokes = {LineChartProperties.DEFAULT_LINE_STROKE};
!     //Shape[] shapes = {null};
!     Shape[] shapes= { PointChartProperties.SHAPE_TRIANGLE };
!     lineChartProperties = new LineChartProperties(strokes, shapes);
! 
!     clusteredBarChartProperties = new ClusteredBarChartProperties();
! 
!     //Param�trage de la largeur des barres de l'histogramme et non affichage des contours
!     //Set the width of the bars and don't show the outline
!     clusteredBarChartProperties.setWidthPercentage( 0.70f );
!     clusteredBarChartProperties.setShowOutlinesFlag( false );
!   }
! 
! 	/**********************************************************************************************
! 	 *
! 	 **********************************************************************************************/
!   public void service( HttpServletRequest req, HttpServletResponse httpServletResponse ) throws ServletException, IOException
!   {
!     //---Some charts will need a second scale to render some values and then will
!     //---need to render an axis at the right of the charts with it
!     long secondScale=1;
! 
!     //---specific variable use to render negative value in all case
!     double maxDataClustAbs = 0;
!     double maxDataLineAbs = 0;
!     int numberOfNegativ=0;
!     int numberOfZero=0;
! 
!     try {
! 
!       String[] xAxisLabels = {"MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC", "JAN", "FEB"};
!       
! 
!       double[][] dataClust = new double[][]{
!         {3533, 101265, 76076, 86664, 135567, 87729, 85309, 143423, 18732, 111842, 39534, 11980}
!       , {0, 103400, 65000, 88500, 143000, 80000, 88500, 143500, 99000, 118500, 38500, 18000}
!                                     };
!       double[][] dataLine = new double[][]{
!         {21, 4, 1, 2, 3, 2, 3, 2, 93, 18, 54, 0}
!                                       };          
! 
!       String title = "Chart Title";
!       String legendLabel1 = "Legend Label 1";
!       String legendLabel2 = "Legend Label 2";
!       String legendLabel3 = "Legend Label 3";
! 
!       //IAxisDataSeries dataSeries = new DataSeries( xAxisLabels, null, null, title );
!       IAxisDataSeries dataSeries = new DataSeries( xAxisLabels, "X Axis title", "Left Y Axis title", title );
! 
!       String[] legendLabelsClust = {legendLabel1, legendLabel2};
!       Paint[] clustPaints = new Paint[]{Color.pink, Color.blue};
! 
!       String[] legendLabelsLine = {legendLabel3};
!       Paint[] linePaints = new Paint[]{Color.green};
! 
!       //------------On r�cup�re une 2�me �chelle "secondScale"------------------
!       //------------et on fait un traitement pour les nombres n�gatifs----------
!       //------------We get back the 2nd scale "secondScale"---------------------
!       //-------------and we handle the negative numbers---------------------
!      //On identifie la valeur maximum absolue des data Clustered Bar
!       //et on compte le nombre de z�ro et le nombre de chiffres n�gatifs
!       // We identify the absolute maximum value of the data in the Clustered Bar
!       // and we count the number of zero and negative digits
!       for (int k=0; k<2; k++) {
! 
!         for (int j=0; j<xAxisLabels.length; j++) {
!           if (maxDataClustAbs < (Math.abs(dataClust[k][j])) && (dataClust[k][j]!=0) ) {
!             maxDataClustAbs=(Math.abs(dataClust[k][j]));
!           }
!           if (dataClust[k][j]<0) {
!             numberOfNegativ+=1;
!           }
!           if (dataClust[k][j]==0) {
!             numberOfZero+=1;  
!           }
!         }
!       }
! 
!       //On identifie la valeur maximum absolue des data Line
!       //et on compte le nombre de z�ro et le nombre de chiffres n�gatifs
!       // We identify the absolute maximum value of the data lines
!       // and we count the number of zero and negative digits
!       for (int j=0; j<xAxisLabels.length; j++) {
!         if (maxDataLineAbs < (Math.abs(dataLine[0][j])) && (dataLine[0][j]!=0) ) {
!           maxDataLineAbs=(Math.abs(dataLine[0][j]));
!         }
!         if (dataLine[0][j]<0) {
!             numberOfNegativ+=1;
!         }
!         if (dataLine[0][j]==0) {
!             numberOfZero+=1;  
!         }
!       }
! 
!       //On d�finit la valeur de la seconde �chelle si les ordres de grandeurs
!       //sont tr�s diff�rent (de l'ordre de 10).
!       //We define the value of the second scale if the increment is an order of
!       //magnitude greater
!       if (maxDataClustAbs>10*maxDataLineAbs) {    
!         axisProperties.getYAxisProperties().setShowRightAxis(true);
!         secondScale=Math.round(maxDataClustAbs/(maxDataLineAbs));
!         axisProperties.getYAxisProperties().setSecondScaleRight((float) (secondScale) );
!         ChartFont axisScaleFontRight = new ChartFont( new Font("Arial Narrow", Font.PLAIN, 10), Color.green.darker() );
!         axisProperties.getYAxisProperties().setScaleChartFontRight( axisScaleFontRight );
!       }
! 
!       //On v�rifie s'il y a des valeurs n�gatives
!       // Check if there are negative numbers
!       if (numberOfNegativ>0) {
!         if ((maxDataLineAbs*secondScale)>maxDataClustAbs) {
!           axisProperties.getYAxisProperties().setMinRightAxis((double) (-maxDataLineAbs*secondScale));
!           //Si les valeurs ne sont pas toutes n�gatives on affiche l'axe des ordonn�es
!           //de mani�re a ce que le z�ro soit centr�
!           // If the numbers are not all negative we center the ordinal axis around zero
!           if (numberOfNegativ!=(3*xAxisLabels.length-numberOfZero)) {
!             axisProperties.getYAxisProperties().setMaxRightAxis((double) (maxDataLineAbs*secondScale));
!           }
!         } else {
!           axisProperties.getYAxisProperties().setMinRightAxis((double) (-maxDataClustAbs));
!             if (numberOfNegativ!=(3*xAxisLabels.length-numberOfZero)) {
!               axisProperties.getYAxisProperties().setMaxRightAxis((double) (maxDataClustAbs));
!             }
!         }
!       }
! 
!       dataSeries.addIAxisPlotDataSet( new AxisChartDataSet( dataClust, legendLabelsClust, clustPaints, ChartType.BAR_CLUSTERED, clusteredBarChartProperties ) );
!       dataSeries.addIAxisPlotDataSet( new AxisChartDataSet( dataLine, legendLabelsLine, linePaints, ChartType.LINE, lineChartProperties ) );
!       AxisChart axisChart = new AxisChart( dataSeries, chartProperties, axisProperties, legendProperties, width, height );
!  
!       ServletEncoderHelper.encodeJPEG13( axisChart, 1.0f, httpServletResponse );
!     }
!     catch( Throwable throwable ) {
!       //HACK do your error handling here...
!       throwable.printStackTrace();
!     }
!   }
! 
  }
\ No newline at end of file
--- 1,279 ----
! 
! /***********************************************************************************************
!  * File Info: $Id$
!  * Copyright (C) 2002
!  * 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 [email protected]
!  *
!  * 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.demo.simpleservlet;
! 
! 
! import org.krysalis.jcharts.axisChart.AxisChart;
! import org.krysalis.jcharts.chartData.AxisChartDataSet;
! import org.krysalis.jcharts.chartData.DataSeries;
! import org.krysalis.jcharts.chartData.interfaces.IAxisDataSeries;
! import org.krysalis.jcharts.encoders.ServletEncoderHelper;
! import org.krysalis.jcharts.properties.AxisProperties;
! import org.krysalis.jcharts.properties.ChartProperties;
! import org.krysalis.jcharts.properties.ClusteredBarChartProperties;
! import org.krysalis.jcharts.properties.DataAxisProperties;
! import org.krysalis.jcharts.properties.LegendProperties;
! import org.krysalis.jcharts.properties.LineChartProperties;
! import org.krysalis.jcharts.properties.PointChartProperties;
! import org.krysalis.jcharts.properties.util.ChartFont;
! import org.krysalis.jcharts.types.ChartType;
! 
! import javax.servlet.ServletException;
! import javax.servlet.http.HttpServletRequest;
! import javax.servlet.http.HttpServletResponse;
! import java.awt.*;
! import java.io.IOException;
! 
! // Dual Y axis changes courtesy of St�phane NGUYEN integrated by CMC 25Aug03
! // French translation courtesy of my good wife Jacki ...
! public class DualYAxis extends ChartServlet {
! 
! 
!     //---all of the charts will have some properties.
!     private LineChartProperties lineChartProperties;
!     private ClusteredBarChartProperties clusteredBarChartProperties;
! 
!     protected LegendProperties legendProperties;
!     protected ChartProperties chartProperties;
!     protected AxisProperties axisProperties;
! 
!     //---all of the charts have the same size
!     protected int width = 750;
!     protected int height = 430;
! 
! 
!   public void init() {
! 
! 
!     //---------------------Font & Police----------------------------------------
! 
!     legendProperties = new LegendProperties();
!     chartProperties = new ChartProperties();
!     axisProperties = new AxisProperties(false);
! 
!     ChartFont axisScaleFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 10), Color.black);
!     axisProperties.getXAxisProperties().setScaleChartFont(axisScaleFont);
!     axisProperties.getYAxisProperties().setScaleChartFont(axisScaleFont);
! 
!     ChartFont axisTitleFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 13), Color.black);
!     axisProperties.getXAxisProperties().setTitleChartFont(axisTitleFont);
!     axisProperties.getYAxisProperties().setTitleChartFont(axisTitleFont);
! 
!     ChartFont titleFont = new ChartFont(new Font("Georgia Negreta cursiva", Font.PLAIN, 15), Color.black);
!     chartProperties.setTitleFont(titleFont);
! 
!     //On fixe la marge avec le cadre
!     // Set the margin within the frame
!     chartProperties.setEdgePadding(2f);
! 
!     //On met le graphe sur un fond gris clair
!     // Set the chart against a plain grey background
!     axisProperties.setBackgroundPaint(new Color (245, 245, 245)); 
! 
!     //Param�trage de la bo�te de l�gende
!     //Parameters for the legend box
!     //legendProperties.setPlacement(LegendAreaProperties.RIGHT);
!     //legendProperties.setNumColumns(1);
!     //legendProperties.setFont( new Font("Arial Narrow", Font.PLAIN, 13) );
!     //legendProperties.setFontPaint(Color.black);
!     ChartFont legendFont = new ChartFont(new Font("Arial Narrow", Font.PLAIN, 13), Color.black);
!     legendProperties.setChartFont(legendFont);
!     legendProperties.setChartPadding(10);
! 
!     //Arrondi � la puissance 10
!     //Round up to the power of 10
!     DataAxisProperties dataAxisProperties= (DataAxisProperties) axisProperties.getYAxisProperties();
!     dataAxisProperties.setRoundToNearest(1);
! 
!     //Parametrage du nombre de graduation sur l'axe des ordonn�es
!     //Set the number of ticks(?) for the ordinal axis
!     dataAxisProperties.setNumItems(6);
! 
!     //utilisation de la virgule s'il y a lieu (normalement non)
!     // Set the use of the comma if there are any (usually not)
!     dataAxisProperties.setUseCommas(false);
! 
!     //Ne pas afficher les bordures sup�rieur et droite du chart
!     // Don't attach upper borders and the right of the chart
!     axisProperties.getYAxisProperties().setShowEndBorder(false);
!     axisProperties.getXAxisProperties().setShowEndBorder(false);
! 
! 
!     Stroke[] strokes = {LineChartProperties.DEFAULT_LINE_STROKE};
!     //Shape[] shapes = {null};
!     Shape[] shapes= { PointChartProperties.SHAPE_TRIANGLE };
!     lineChartProperties = new LineChartProperties(strokes, shapes);
! 
!     clusteredBarChartProperties = new ClusteredBarChartProperties();
! 
!     //Param�trage de la largeur des barres de l'histogramme et non affichage des contours
!     //Set the width of the bars and don't show the outline
!     clusteredBarChartProperties.setWidthPercentage( 0.70f );
!     clusteredBarChartProperties.setShowOutlinesFlag( false );
!   }
! 
! 	/**********************************************************************************************
! 	 *
! 	 **********************************************************************************************/
!   public void service( HttpServletRequest req, HttpServletResponse httpServletResponse ) throws ServletException, IOException
!   {
!     //---Some charts will need a second scale to render some values and then will
!     //---need to render an axis at the right of the charts with it
!     long secondScale=1;
! 
!     //---specific variable use to render negative value in all case
!     double maxDataClustAbs = 0;
!     double maxDataLineAbs = 0;
!     int numberOfNegativ=0;
!     int numberOfZero=0;
! 
!     try {
! 
!       String[] xAxisLabels = {"MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC", "JAN", "FEB"};
!       
! 
!       double[][] dataClust = new double[][]{
!         {3533, 101265, 76076, 86664, 135567, 87729, 85309, 143423, 18732, 111842, 39534, 11980}
!       , {0, 103400, 65000, 88500, 143000, 80000, 88500, 143500, 99000, 118500, 38500, 18000}
!                                     };
!       double[][] dataLine = new double[][]{
!         {21, 4, 1, 2, 3, 2, 3, 2, 93, 18, 54, 0}
!                                       };          
! 
!       String title = "Chart Title";
!       String legendLabel1 = "Legend Label 1";
!       String legendLabel2 = "Legend Label 2";
!       String legendLabel3 = "Legend Label 3";
! 
!       //IAxisDataSeries dataSeries = new DataSeries( xAxisLabels, null, null, title );
!       IAxisDataSeries dataSeries = new DataSeries( xAxisLabels, "X Axis title", "Left Y Axis title", title );
! 
!       String[] legendLabelsClust = {legendLabel1, legendLabel2};
!       Paint[] clustPaints = new Paint[]{Color.pink, Color.blue};
! 
!       String[] legendLabelsLine = {legendLabel3};
!       Paint[] linePaints = new Paint[]{Color.green};
! 
!       //------------On r�cup�re une 2�me �chelle "secondScale"------------------
!       //------------et on fait un traitement pour les nombres n�gatifs----------
!       //------------We get back the 2nd scale "secondScale"---------------------
!       //-------------and we handle the negative numbers---------------------
!      //On identifie la valeur maximum absolue des data Clustered Bar
!       //et on compte le nombre de z�ro et le nombre de chiffres n�gatifs
!       // We identify the absolute maximum value of the data in the Clustered Bar
!       // and we count the number of zero and negative digits
!       for (int k=0; k<2; k++) {
! 
!         for (int j=0; j<xAxisLabels.length; j++) {
!           if (maxDataClustAbs < (Math.abs(dataClust[k][j])) && (dataClust[k][j]!=0) ) {
!             maxDataClustAbs=(Math.abs(dataClust[k][j]));
!           }
!           if (dataClust[k][j]<0) {
!             numberOfNegativ+=1;
!           }
!           if (dataClust[k][j]==0) {
!             numberOfZero+=1;  
!           }
!         }
!       }
! 
!       //On identifie la valeur maximum absolue des data Line
!       //et on compte le nombre de z�ro et le nombre de chiffres n�gatifs
!       // We identify the absolute maximum value of the data lines
!       // and we count the number of zero and negative digits
!       for (int j=0; j<xAxisLabels.length; j++) {
!         if (maxDataLineAbs < (Math.abs(dataLine[0][j])) && (dataLine[0][j]!=0) ) {
!           maxDataLineAbs=(Math.abs(dataLine[0][j]));
!         }
!         if (dataLine[0][j]<0) {
!             numberOfNegativ+=1;
!         }
!         if (dataLine[0][j]==0) {
!             numberOfZero+=1;  
!         }
!       }
! 
!       /*
!       //On d�finit la valeur de la seconde �chelle si les ordres de grandeurs
!       //sont tr�s diff�rent (de l'ordre de 10).
!       //We define the value of the second scale if the increment is an order of
!       //magnitude greater
!       if (maxDataClustAbs>10*maxDataLineAbs) {    
!         axisProperties.getYAxisProperties().setShowRightAxis(true);
!         secondScale=Math.round(maxDataClustAbs/(maxDataLineAbs));
!         axisProperties.getYAxisProperties().setSecondScaleRight((float) (secondScale) );
!         ChartFont axisScaleFontRight = new ChartFont( new Font("Arial Narrow", Font.PLAIN, 10), Color.green.darker() );
!         axisProperties.getYAxisProperties().setScaleChartFontRight( axisScaleFontRight );
!       }
! 
!       //On v�rifie s'il y a des valeurs n�gatives
!       // Check if there are negative numbers
!       if (numberOfNegativ>0) {
!         if ((maxDataLineAbs*secondScale)>maxDataClustAbs) {
!           axisProperties.getYAxisProperties().setMinRightAxis((double) (-maxDataLineAbs*secondScale));
!           //Si les valeurs ne sont pas toutes n�gatives on affiche l'axe des ordonn�es
!           //de mani�re a ce que le z�ro soit centr�
!           // If the numbers are not all negative we center the ordinal axis around zero
!           if (numberOfNegativ!=(3*xAxisLabels.length-numberOfZero)) {
!             axisProperties.getYAxisProperties().setMaxRightAxis((double) (maxDataLineAbs*secondScale));
!           }
!         } else {
!           axisProperties.getYAxisProperties().setMinRightAxis((double) (-maxDataClustAbs));
!             if (numberOfNegativ!=(3*xAxisLabels.length-numberOfZero)) {
!               axisProperties.getYAxisProperties().setMaxRightAxis((double) (maxDataClustAbs));
!             }
!         }
!       }
! */
!       
!       dataSeries.addIAxisPlotDataSet( new AxisChartDataSet( dataClust, legendLabelsClust, clustPaints, ChartType.BAR_CLUSTERED, clusteredBarChartProperties ) );
!       dataSeries.addIAxisPlotDataSet( new AxisChartDataSet( dataLine, legendLabelsLine, linePaints, ChartType.LINE, lineChartProperties ) );
!       AxisChart axisChart = new AxisChart( dataSeries, chartProperties, axisProperties, legendProperties, width, height );
!  
!       ServletEncoderHelper.encodeJPEG13( axisChart, 1.0f, httpServletResponse );
!     }
!     catch( Throwable throwable ) {
!       //HACK do your error handling here...
!       throwable.printStackTrace();
!     }
!   }
! 
  }
\ No newline at end of file



-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com