com.polivoto.vistas.acciones.Datos.java Source code

Java tutorial

Introduction

Here is the source code for com.polivoto.vistas.acciones.Datos.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.polivoto.vistas.acciones;

import java.awt.Color;
import java.awt.GradientPaint;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
import org.inspira.polivoto.AccionesConsultor;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;
import org.json.JSONException;

/**
 *
 * @author azaraf
 */
public class Datos {

    private AccionesConsultor ac;
    private DefaultPieDataset pieDataset;
    private int pox;
    private boolean rotating;
    private LinkedList<Color> colores = new LinkedList<>();

    public Datos(AccionesConsultor ac) {
        this.ac = ac;
        ac.consultaConteoOpciones();
        setcolors();
    }

    public Datos(AccionesConsultor ac, int pox) {
        this.ac = ac;
        this.pox = pox;
        //        ac.consultaConteoOpciones();
        this.rotating = false;
        setcolors();
    }

    public Datos(AccionesConsultor ac, int pox, boolean rotating) {
        this.ac = ac;
        this.pox = pox;
        ac.consultaConteoOpciones();
        this.rotating = rotating;
        setcolors();
    }

    public Datos(AccionesConsultor ac, int pox, String caso) {
        this.ac = ac;
        this.pox = pox;
        this.rotating = false;
        setcolors();
    }

    private PieDataset crearDatasetPie() {
        DefaultPieDataset datos = new DefaultPieDataset();
        try {
            if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getInt("participantes") == 0) {
                datos.setValue("No hay ningn voto", 0);
            } else {
                for (int i = 0; i < ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                        .length(); i++) {
                    int p = ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                            .getJSONObject(i).getInt("cantidad");
                    if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo").getJSONObject(i)
                            .getString("reactivo").equals("Anular mi voto")) {
                        datos.setValue("Nulo", p);
                    } else {
                        datos.setValue(ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                                .getJSONObject(i).getString("reactivo"), p);
                    }
                }
            }
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        return datos;
    }

    private JFreeChart crearChartPie(PieDataset dataset, String titulo) {
        JFreeChart chart = ChartFactory.createPieChart(titulo, dataset, false, true, false);
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setStartAngle(290);
        plot.setDirection(Rotation.ANTICLOCKWISE);

        plot.setNoDataMessage("No hay votos");
        try {
            if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getInt("participantes") != 0) {
                int j = 0;
                for (int i = 0; i < ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                        .length(); i++) {
                    try {
                        if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                                .getJSONObject(i).getString("reactivo").equals("Anular mi voto")) {
                            plot.setSectionPaint("Nulo", Color.lightGray);
                        } else {
                            plot.setSectionPaint(ac.getConteoOpcionesPregunta().getJSONObject(pox)
                                    .getJSONArray("conteo").getJSONObject(i).getString("reactivo"), colores.get(j));
                            j++;
                        }
                    } catch (JSONException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        plot.setSimpleLabels(true);
        plot.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.white));
        PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator("{0}: {2} de votos",
                new DecimalFormat("0"), new DecimalFormat("0.000%"));
        plot.setLabelGenerator(gen);
        if (rotating) {
            final Rotator rotate = new Rotator(plot);
            rotate.start();
        }
        return chart;
    }

    public void setPieChartIn(JPanel panel) {
        PieDataset dataset = crearDatasetPie();
        JFreeChart chart = null;
        try {
            chart = crearChartPie(dataset, ac.getPreguntas().getJSONObject(pox).getString("pregunta"));
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        ChartPanel pie = new ChartPanel(chart);
        pie.setBounds(panel.getVisibleRect());
        panel.removeAll();
        panel.add(pie);
        panel.repaint();
    }

    public void setBarChartIn(JPanel panel) {
        CategoryDataset dataset = crearDatasetBar();
        JFreeChart chart = createChartBar(dataset);
        ChartPanel barChart = new ChartPanel(chart);
        barChart.setBounds(panel.getVisibleRect());
        panel.removeAll();
        panel.add(barChart);
        panel.repaint();
    }

    private CategoryDataset crearDatasetBar() {
        DefaultCategoryDataset datos = new DefaultCategoryDataset();
        try {
            String sector = ac.getPreguntas().getJSONObject(pox).getString("pregunta");

            if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getInt("participantes") == 0) {
                datos.addValue(0, sector, "No hay ningn voto");
            } else {
                for (int i = 0; i < ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                        .length(); i++) {
                    int p = ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo")
                            .getJSONObject(i).getInt("cantidad");
                    if (ac.getConteoOpcionesPregunta().getJSONObject(pox).getJSONArray("conteo").getJSONObject(i)
                            .getString("reactivo").equals("Anular mi voto")) {
                        datos.addValue(p, sector, "Nulo");
                    } else {
                        datos.addValue(p, sector, ac.getConteoOpcionesPregunta().getJSONObject(pox)
                                .getJSONArray("conteo").getJSONObject(i).getString("reactivo"));
                    }
                }
            }
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        return datos;
    }

    private JFreeChart createChartBar(CategoryDataset dataset) {
        JFreeChart chart = ChartFactory.createBarChart("Votacion", "Opciones", "Total de votos", dataset,
                PlotOrientation.VERTICAL, true, true, true);
        try {

            chart.addSubtitle(new TextTitle(ac.getPreguntas().getJSONObject(pox).getString("pregunta")));
            chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.white));
            CategoryPlot plot = chart.getCategoryPlot();
            org.jfree.chart.axis.CategoryAxis axis = plot.getDomainAxis();
            axis.setCategoryLabelPositions(
                    CategoryLabelPositions.createUpRotationLabelPositions(0.39269908169872414D));
            //            final CategoryItemRenderer itemRenderer = new CustomRenderer(
            //                    new Paint[] {Color.green, Color.red, Color.blue, Color.yellow, Color.magenta, Color.cyan, Color.pink, Color.lightGray}
            //            );
            ////        itemRenderer.setBaseItemLabelsVisible(true);
            ////        BarRenderer barRenderer = (BarRenderer)itemRenderer;
            ////        barRenderer.setItemMargin(0.2D);
            ////        plot.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, new java.awt.Color(147, 60, 45)));
            ////        //        StandardCategoryToolTipGenerator toolTipGenerator = new StandardCategoryToolTipGenerator("{0}: {2} %", new DecimalFormat("0"));
            //            //
            //            plot.setNoDataMessage("SIN DATOS!");
            //            
            //            
            ////        renderer.setLabelGenerator(new StandardCategoryLabelGenerator());
            //            itemRenderer.setItemLabelsVisible(true);
            //            final ItemLabelPosition p = new ItemLabelPosition(
            //                    ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER, 45.0
            //            );
            //            itemRenderer.setPositiveItemLabelPosition(p);
            //            plot.setRenderer(itemRenderer);

            // change the margin at the top of the range axis...
            final ValueAxis rangeAxis = plot.getRangeAxis();
            rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
            rangeAxis.setLowerMargin(0.15);
            rangeAxis.setUpperMargin(0.15);

        } catch (JSONException ex) {
            Logger.getLogger(Datos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return chart;
    }

    private void setcolors() {
        colores.add(Color.red);
        colores.add(Color.green);
        colores.add(Color.blue);
        colores.add(Color.yellow);
        colores.add(Color.magenta);
        colores.add(Color.cyan);
        colores.add(Color.pink);
        colores.add(Color.orange);
        colores.add(Color.darkGray);
        colores.add(Color.white);
    }
}