/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package Graficos;
import java.awt.*;
import javax.swing.table.DefaultTableModel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;

public class StackedBarChartx
{
    public JFreeChart chart;
    
    public StackedBarChartx(String title, DefaultTableModel modelo ) {
        chart = createChart(title, modelo );
    }
    
    private static CategoryDataset crearDataset( DefaultTableModel modelo ) {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        String Serie = null;
        
        Number Valor = null;
        int p =  modelo.getRowCount();
        for (int i = 0; i < p ; i++) {
            Serie = "Puesto " + modelo.getValueAt(i,0) ;
            Valor = (Number)modelo.getValueAt(i,1);
            dataset.setValue( new Double(Valor.doubleValue()),"Impresas",Serie);           
            Valor = (Number)modelo.getValueAt(i,2);
            dataset.setValue( new Double(Valor.doubleValue()),"Intranet",Serie);            
            Valor = (Number)modelo.getValueAt(i,3);
            dataset.setValue( new Double(Valor.doubleValue()),"Borradores_Confirmados",Serie);            
            Valor = (Number)modelo.getValueAt(i,4);
            dataset.setValue( new Double(Valor.doubleValue()),"Borradores_Rectificados",Serie);
        }
        return dataset;
    }
    
    private JFreeChart createChart(String title, DefaultTableModel modelo ) {
        CategoryDataset categorydataset = crearDataset(modelo);
        JFreeChart jfreechart = ChartFactory.createStackedBarChart(title, "Operadores", "Acciones", categorydataset, PlotOrientation.HORIZONTAL, true, true, true);
        jfreechart.setBackgroundPaint(Color.white);
        jfreechart.getTitle().setMargin(2D, 0.0D, 0.0D, 0.0D);

        TextTitle texttitle = new TextTitle(" ", new Font("Dialog", 0, 11));
        texttitle.setPosition(RectangleEdge.BOTTOM);
        texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
        texttitle.setMargin(0.0D, 0.0D, 4D, 4D);
        jfreechart.addSubtitle(texttitle);

        CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
        categoryplot.setBackgroundPaint(Color.WHITE);
        categoryplot.setDomainGridlinePaint(Color.white);
        categoryplot.setDomainGridlinesVisible(true);
        categoryplot.setRangeGridlinePaint(Color.white);
        categoryplot.setNoDataMessageFont(new java.awt.Font("MS Sans Serif", 0, 20)) ;
        categoryplot.setNoDataMessage("Sin datos");
        
        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        
        BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer();
        barrenderer.setDrawBarOutline(false);
        
        GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(0, 64, 0));
        GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.blue, 0.0F, 0.0F, new Color(64, 0, 0));
        GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 0, 64));
        GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F, Color.yellow, 0.0F, 0.0F, new Color(0, 0, 0));        
        barrenderer.setSeriesPaint(0, gradientpaint);
        barrenderer.setSeriesPaint(1, gradientpaint1);
        barrenderer.setSeriesPaint(2, gradientpaint2);
        barrenderer.setSeriesPaint(3, gradientpaint3);
        
        jfreechart.addSubtitle(subtituloAdmon());
        
        return jfreechart;
    }
    
    private TextTitle subtituloAdmon(){
        String Admo = Datos.Variables.getVariables().getNombreAdmon();
        TextTitle subtitulo = new TextTitle(Admo);
        subtitulo.setFont(new java.awt.Font("Serif", 0, 13));
        subtitulo.setPosition(RectangleEdge.TOP);
        subtitulo.setVerticalAlignment(VerticalAlignment.CENTER);
        return subtitulo;
    }    
}

