Last active
August 29, 2015 14:17
-
-
Save isaiastavares/87a0bc9d19bb05daeb7f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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çã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étodo é chamado automaticamente | |
* apó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á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çã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