br.com.OCTur.view.GraficoController.java Source code

Java tutorial

Introduction

Here is the source code for br.com.OCTur.view.GraficoController.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 br.com.OCTur.view;

import br.com.OCTur.control.DAO.CategoriaProdutoDAO;
import br.com.OCTur.control.DAO.CompraItemDAO;
import br.com.OCTur.control.DAO.FornecedorDAO;
import br.com.OCTur.control.DAO.ItemDAO;
import br.com.OCTur.control.DAO.ProdutoDAO;
import br.com.OCTur.control.util.ControlTranducao;
import br.com.OCTur.control.util.Sessao;
import br.com.OCTur.model.EntidadeGrafico;
import br.com.OCTur.model.entity.CategoriaProduto;
import br.com.OCTur.model.entity.CompraItem;
import br.com.OCTur.model.entity.Fornecedor;
import br.com.OCTur.model.entity.Item;
import br.com.OCTur.model.entity.Produto;
import java.awt.BasicStroke;
import java.awt.Color;
import java.net.URL;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.SwingNode;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Slider;
import javafx.scene.layout.AnchorPane;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.ValueMarker;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

/**
 * FXML Controller class
 *
 * @author OCTI01
 */
public class GraficoController implements Initializable {

    @FXML
    private AnchorPane apPrincipal;
    @FXML
    private ScrollPane spProdutosMaisAntigos;
    @FXML
    private ScrollPane spCategoriaMaisVendida;
    @FXML
    private ScrollPane spInteressePorArtesanato;
    @FXML
    private Slider slMeta;

    private SwingNode snProdutosMaisAntigos;
    private SwingNode snCategoriasMaisVendida;
    private SwingNode snInteressePorArtesanato;

    private Fornecedor fornecedor;
    private List<EntidadeGrafico<Produto>> produto;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        fornecedor = new FornecedorDAO().pegarPorEmpresa(Sessao.pessoa.getEmpresa());
        snCategoriasMaisVendida = new SwingNode();
        snInteressePorArtesanato = new SwingNode();
        snProdutosMaisAntigos = new SwingNode();
        spCategoriaMaisVendida.setContent(snCategoriasMaisVendida);
        spInteressePorArtesanato.setContent(snInteressePorArtesanato);
        spProdutosMaisAntigos.setContent(snProdutosMaisAntigos);
        DefaultPieDataset dpdDados = new DefaultPieDataset();
        for (CategoriaProduto categoriaProduto : new CategoriaProdutoDAO().pegarTodos()) {
            List<CompraItem> compraitem = new CompraItemDAO().pegarPorFonecedorCategoria(fornecedor,
                    categoriaProduto);
            dpdDados.setValue(categoriaProduto.toString(), compraitem.size());
        }
        JFreeChart jFreeChart = ChartFactory.createPieChart3D(
                ControlTranducao.traduzirPalavra("CATEGORIASMAISVENDIDAS"), dpdDados, false, false, Locale.ROOT);
        PiePlot3D piePlot3D = (PiePlot3D) jFreeChart.getPlot();
        piePlot3D.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}\n{2}"));
        ChartPanel categoriaMaisVendida = new ChartPanel(jFreeChart);
        Platform.runLater(() -> {
            snCategoriasMaisVendida.setContent(categoriaMaisVendida);
        });
        DefaultCategoryDataset dcdDados = new DefaultCategoryDataset();
        for (int i = Calendar.getInstance().get(Calendar.YEAR) - 10; i < Calendar.getInstance()
                .get(Calendar.YEAR); i++) {
            dcdDados.addValue(new Random().nextDouble() * 100000, "Interesse", String.valueOf(i));
        }
        jFreeChart = ChartFactory.createLineChart(
                ControlTranducao.traduzirPalavra("interesse") + " "
                        + ControlTranducao.traduzirPalavra("artesanato"),
                "", "", dcdDados, PlotOrientation.VERTICAL, false, false, false);
        ChartPanel interesseArtesanato = new ChartPanel(jFreeChart);
        Platform.runLater(() -> {
            snInteressePorArtesanato.setContent(interesseArtesanato);
        });
        produto = new ArrayList<>();
        for (Produto produto : new ProdutoDAO().pegarPorFornecedor(fornecedor)) {
            if (new CompraItemDAO().pegarPorProduto(produto).isEmpty()) {
                List<Item> itens = new ItemDAO().pegarPorProduto(produto);
                if (!itens.isEmpty()) {
                    Item item = itens.get(0);
                    long quantidade = (new Date().getTime() - item.getDatacadastro().getTime()) / 1000 / 60 / 60
                            / 24;
                    this.produto.add(new EntidadeGrafico<>(produto, quantidade));
                }
            }
        }
        slMeta.setMax(produto.stream().mapToDouble(EntidadeGrafico::getValue).max().orElse(0));
        slMeta.valueProperty()
                .addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
                    produtosMaisAntigos();
                });
        Platform.runLater(() -> {
            produtosMaisAntigos();
        });
    }

    private void produtosMaisAntigos() {

        DefaultCategoryDataset dcdDados = new DefaultCategoryDataset();
        for (EntidadeGrafico<Produto> entidadeGrafico : produto) {
            if (entidadeGrafico.getValue() >= slMeta.getValue()) {
                dcdDados.addValue(entidadeGrafico.getValue(), "Dias/Acima do esperado", entidadeGrafico.toString());
            } else {
                dcdDados.addValue(entidadeGrafico.getValue(), "Dias", entidadeGrafico.toString());
            }
        }
        JFreeChart jFreeChart = ChartFactory.createBarChart(ControlTranducao.traduzirPalavra("PRODUTOSMAISANTIGOS"),
                "", "", dcdDados, PlotOrientation.VERTICAL, false, false, false);
        jFreeChart.getCategoryPlot().getRenderer().setBaseItemLabelGenerator(
                new StandardCategoryItemLabelGenerator("{0}", NumberFormat.getCurrencyInstance()));
        jFreeChart.getCategoryPlot()
                .addRangeMarker(new ValueMarker(slMeta.getValue(), Color.CYAN, new BasicStroke(1.0f)));
        ChartPanel chartPanel = new ChartPanel(jFreeChart);
        snProdutosMaisAntigos.setContent(chartPanel);
    }

}