/* 
* 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.JPanel;
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 StackedBar2 {

    public StackedBar2(String title, JPanel panel, DefaultTableModel modelo, String titulo2) {
        JFreeChart chart = createChart(title, panel, modelo, titulo2);
        panel.add(new ChartPanel(chart));
        panel.invalidate();
        panel.validate();
    }

    private static CategoryDataset crearDataset(DefaultTableModel modelo) {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        int p = modelo.getRowCount();
        for (int i = 0; i < p; i++) {
            String Serie = modelo.getValueAt(i, 1).toString() + " - " + modelo.getValueAt(i, 0);
            Number Valor = (Number) modelo.getValueAt(i, 3);
            String Categoria = modelo.getValueAt(i, 2).toString();
            dataset.setValue(new Double(Valor.doubleValue()), Categoria, Serie);
        }
        return dataset;
    }

    private JFreeChart createChart(String title, JPanel panel, DefaultTableModel modelo, String titulo2) {
        CategoryDataset categorydataset = crearDataset(modelo);
        JFreeChart jfreechart = ChartFactory.createStackedBarChart(title, "Operadores", titulo2, categorydataset, PlotOrientation.HORIZONTAL, true, true, false);
        jfreechart.setBackgroundPaint(Color.white);
        jfreechart.getTitle().setMargin(2D, 0.0D, 0.0D, 0.0D);
        TextTitle texttitle = new TextTitle("Distribucion de servicios por operador", 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 plot = (CategoryPlot) jfreechart.getPlot();
        plot.setDomainGridlinePaint(Color.red);
        plot.setDomainGridlinesVisible(false);
        plot.setRangeGridlinePaint(Color.YELLOW);
        NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        BarRenderer render = (BarRenderer) plot.getRenderer();
        render.setDrawBarOutline(false);
        Datos.Variables vars = Datos.Variables.getVariables();
        for(int i=0; i< categorydataset.getRowCount(); i++) {
            render.setSeriesPaint(i, vars.colores.get(categorydataset.getRowKey(i)));
        }
        
        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;
    }

}


