Skip to content

Instantly share code, notes, and snippets.

@isaiastavares
Last active August 29, 2015 14:17
Show Gist options
  • Save isaiastavares/87a0bc9d19bb05daeb7f to your computer and use it in GitHub Desktop.
Save isaiastavares/87a0bc9d19bb05daeb7f to your computer and use it in GitHub Desktop.
package br.com.oobj.utilitario.n3.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.geometry.Bounds;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.text.Text;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import br.com.oobj.utilitario.n3.dao.QueryConfig;
import br.com.oobj.utilitario.n3.model.ChamadoXSituacaoModel;
/**
* Provê um layout contendo um gráfico de barras que mostra a quantidade de chamados por situação:
* <br>* Aguardando Atendimento
* <br>* Em Atendimento
* <br>* Suspenso Aguardando Retorno da Equipe de Sustenta&ccedil;&atilde;o
* <br>* Suspenso Aguardando Retorno do cliente
* <br>* Bloqueio de cliente
*
* @author Isaias Tavares
*/
public class ChamadoXSituacaoController {
@FXML
public BarChart<String, Number> ChamadoXSituacao;
@FXML
public NumberAxis NumberAxis;
private ObservableList<ChamadoXSituacaoModel> ChamadoXSituacaoData;
private static final String SQL_QUALITOR_CHAMADO_X_SITUACAO = "queryChamadosXSituacao.sql";
private XYChart.Data<String, Number> infoBarraSituacao = new XYChart.Data<String, Number>();
/**
* Inicializa a classe controller. Este m&eacute;todo &eacute; chamado automaticamente
* ap&oacute;s o arquivo fxml ter sido carregado.
*/
@FXML
private void initialize() {
try {
ChamadoXSituacaoData = FXCollections.observableArrayList(consultarChamadoPorSituacao());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Retorna os dados como uma observable list de ChamadoXSituacaoModel.
* @return
*/
public ObservableList<ChamadoXSituacaoModel> getChamadoXSituacaoData() {
return ChamadoXSituacaoData;
}
/**
* Informar a barra do grafico no qual deseja exibir os valores
*/
public void infoBar(XYChart.Data< String, Number> data) {
Node node = data.getNode();
Text texto = new Text(data.getYValue() + "");
texto.setStyle("-fx-fill: #888; -fx-font-size: 11px;");
node.parentProperty().addListener((ObservableValue<? extends Parent> obs, Parent old, Parent parent) -> {
Platform.runLater(() -> {
if (parent != null) {
Group parentGroup = (Group) parent;
parentGroup.getChildren().add(texto);
}
});
});
node.boundsInParentProperty().addListener((ObservableValue<? extends Bounds> obs, Bounds old, Bounds bounds) -> {
texto.setLayoutX(Math.round(bounds.getMinX() + bounds.getWidth() / 2 - texto.prefWidth(- 1) / 2));
texto.setLayoutY(Math.round(bounds.getMinY() - texto.prefHeight(- 1) * 0.5));
});
}
/**
* Busca os dados armazenados no Model para exibir o gr&aacute;fico.
* @param situacoes
*/
public void setChamadoXSituacao(List<ChamadoXSituacaoModel> situacoes) {
// Conta o número de pessoas tendo seus aniversários em um mês específico.
int[] situacoesCounter = new int[situacoes.size()];
for (int i = 0; i < situacoes.size(); i++) {
situacoesCounter[i] = situacoes.get(i).getQntsituacao();
}
XYChart.Series<String, Number> series = new XYChart.Series<String, Number>();
series.setName("Quantidade de atividades resolvidas");
ChamadoXSituacao.getData().add(series);
// Cria um objeto XYChart.Data para cada responsavel. Adiciona ele às séries.
for (int i = 0; i < situacoesCounter.length; i++) {
infoBarraSituacao = new XYChart.Data<String, Number>(situacoes.get(i).getNmsituacao(), situacoesCounter[i]);
series.getData().add(infoBarraSituacao);
infoBar(infoBarraSituacao);
}
}
/**
* Consulta no Banco de Dados do Qualitor e retorna a quantidade de chamados por situa&ccedil;&atilde;o.
*/
@SuppressWarnings("unchecked")
public List<ChamadoXSituacaoModel> consultarChamadoPorSituacao() throws IOException {
EntityManagerFactory emQualitor = Persistence
.createEntityManagerFactory("oobj-qualitor");
EntityManager emQ = emQualitor.createEntityManager();
try {
Query queryQualitor = emQ.createNativeQuery(new QueryConfig()
.carregarQuery(SQL_QUALITOR_CHAMADO_X_SITUACAO));
List<Object[]> resultListQualitor = queryQualitor.getResultList();
List<ChamadoXSituacaoModel> list = new ArrayList<ChamadoXSituacaoModel>();
for (Object[] objectQualitor : resultListQualitor) {
ChamadoXSituacaoModel e = new ChamadoXSituacaoModel();
e.setNmsituacao(objectQualitor[0].toString());
e.setQntsituacao((Integer) objectQualitor[1]);
list.add(e);
}
return list;
} finally {
emQ.close();
emQualitor.close();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment