package demoGrafici;

import org.jfree.data.xy.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.category.*;
import org.jfree.data.general.*;

import java.io.*;

public class Esempio3
{

  static void creaGrafo3()
  {
    DefaultXYZDataset dataSet = caricaDati3();
    JFreeChart grafo = ChartFactory.createBubbleChart(
           "Vendite", 
           "Italia", 
           "Estero", 
           dataSet, 
           PlotOrientation.VERTICAL, 
           true, 
           false, 
           false);

    XYPlot plot = grafo.getXYPlot();

    // modifico il range di valori sull'asse delle ordinate
    /*
    ValueAxis asseY = plot.getRangeAxis(0);
    asseY.setRange(0, 400);
    */
    
    ChartFrame frame = new ChartFrame("Esempio3", grafo);
    frame.setSize(400,350);
    frame.setVisible(true);
  }

  
  static DefaultXYZDataset caricaDati3()
  {

    DefaultXYZDataset dataSet = new DefaultXYZDataset();

    String s, a[];
    double d[][];
    double tot, max = 0, t;
    
    try
    {
      FileReader in = new FileReader("esempio3.dat");
      BufferedReader reader = new BufferedReader(in);
    
      // scorro tutto il file per determinare il valore massimo 
      // del terzo campo
      // (Serve per la successiva normalizzazone dei valori)
      while (reader.ready())
      {
        s = reader.readLine();
        if (s.length() > 0 && s.charAt(0) != '#')
        {
          a = s.split("\t");
          tot = Double.parseDouble(a[1]) + Double.parseDouble(a[2]);
          if (tot > max) max = tot;
        }
      }

      reader.close(); in.close();
      
      // inizio una nuova scansione del file per caricare i dati
      in = new FileReader("esempio3.dat");
      reader = new BufferedReader(in);
      
      while (reader.ready())
      {
        s = reader.readLine();
        if (s.length() > 0 && s.charAt(0) != '#')
        {
          d = new double[3][1];
          // la funzione split suddivide la stringa s in
          // sottostringhe riconoscibili da un delimitatore
          // (in questo caso una tabulazione)
          a = s.split("\t");
          d[0][0] = Double.parseDouble(a[1]);
          d[1][0] = Double.parseDouble(a[2]);
          // sommo le vendite di italia e estero
          tot = d[0][0] + d[1][0];
          /*
           * Normalizzo la dimensione delle bolle nel range [0-M] 
           * con M che vale 1/5 del valore massimo
           * rilevato tra i dati
           * Questa operazione va compiuta perchè 
           * la dimensione delle bolle di default
           * è proporzionale ai valori sugli assi.
           * A noi interessa la dimensione relativa delle bolle 
           * per l'immediata comparazione
           */

          t = (max/5) * tot / max;
          d[2][0] = t;
          dataSet.addSeries(a[0], d);
        }
      }
      
      reader.close();
      in.close();
    }
    catch (IOException ioe)
    {
      System.out.println(ioe.getMessage());
    }
    return dataSet;
  }
  

  
  public static void main (String[] args)
  {
    creaGrafo3();
  }

} /* end of class declaration */

