Cícero Ednilson

Blog sobre Desenvolvimento de Softwares

Home » Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

Nessa parte do nosso tutorial vamos criar uma página que vai conter o componente de gráfico do PrimeFaces.

Páginas do tutorial.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 1: Introdução.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 2: Criando o banco de dados.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 3: Criando o projeto com JSF no Maven.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 4: Criando o template com Facelets.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 5: Desenvolvendo a autenticação do sistema.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 6: Desenvolvendo cadastro de pessoa.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 7: Desenvolvendo cadastro via upload de arquivo XML.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 8: Desenvolvendo consulta com PrimeFaces dataTable.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 10: Editando um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 11: Excluindo um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 12: Consulta com Carousel PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

Criando Query para consulta.

Vamos criar a query que vai retornar o total de pessoas por origem de cadastro, vamos abrir a nossa entidade PessoaEntity e vamos adicionar a query da linha 22 do código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package br.com.ciceroednilson.repository.entity;
 
import java.time.LocalDateTime;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
 
 
@Entity
@Table(name="tb_pessoa")
 
@NamedQueries({
 
	@NamedQuery(name = "PessoaEntity.findAll",query= "SELECT p FROM PessoaEntity p"),
	@NamedQuery(name="PessoaEntity.GroupByOrigemCadastro",query= "SELECT p.origemCadastro, count(p) as total FROM PessoaEntity p GROUP By p.origemCadastro")
 
})
public class PessoaEntity {
 
	@Id
	@GeneratedValue
	@Column(name = "id_pessoa")
	private Integer 		codigo;
 
	@Column(name = "nm_pessoa")
	private String  		nome;
 
	@Column(name = "fl_sexo")
	private String  		sexo;
 
	@Column(name = "dt_cadastro")
	private LocalDateTime	dataCadastro;
 
	@Column(name = "ds_email")
	private String  		email;
 
	@Column(name = "ds_endereco")
	private String  		endereco;
 
	@Column(name = "fl_origemCadastro")
	private String  		origemCadastro;
 
	@OneToOne
	@JoinColumn(name="id_usuario_cadastro")
	private UsuarioEntity	usuarioEntity;
 
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSexo() {
		return sexo;
	}
	public void setSexo(String sexo) {
		this.sexo = sexo;
	}
	public LocalDateTime getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(LocalDateTime dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getOrigemCadastro() {
		return origemCadastro;
	}
	public void setOrigemCadastro(String origemCadastro) {
		this.origemCadastro = origemCadastro;
	}
	public UsuarioEntity getUsuarioEntity() {
		return usuarioEntity;
	}
	public void setUsuarioEntity(UsuarioEntity usuarioEntity) {
		this.usuarioEntity = usuarioEntity;
	}
 
}

Criando método de consulta.

Agora na nossa classe PessoaRepository vamos adicionar um o método com o nome de GetOrigemPessoa como mostra a linha 147 do código abaixo, esse método retorna o total de pessoas por origem de cadastro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
package br.com.ciceroednilson.repository;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
 
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.Query;
 
import br.com.ciceroednilson.model.PessoaModel;
import br.com.ciceroednilson.model.UsuarioModel;
import br.com.ciceroednilson.repository.entity.PessoaEntity;
import br.com.ciceroednilson.repository.entity.UsuarioEntity;
import br.com.ciceroednilson.uteis.Uteis;
 
public class PessoaRepository {
 
	@Inject
	PessoaEntity pessoaEntity;
 
	EntityManager entityManager;
 
	/***
	 * MÉTODO RESPONSÁVEL POR SALVAR UMA NOVA PESSOA
	 * @param pessoaModel
	 */
	public void SalvarNovoRegistro(PessoaModel pessoaModel){
 
		entityManager =  Uteis.JpaEntityManager();
 
		pessoaEntity = new PessoaEntity();
		pessoaEntity.setDataCadastro(LocalDateTime.now());
		pessoaEntity.setEmail(pessoaModel.getEmail());
		pessoaEntity.setEndereco(pessoaModel.getEndereco());
		pessoaEntity.setNome(pessoaModel.getNome());
		pessoaEntity.setOrigemCadastro(pessoaModel.getOrigemCadastro());
		pessoaEntity.setSexo(pessoaModel.getSexo());
 
		UsuarioEntity usuarioEntity = entityManager.find(UsuarioEntity.class, pessoaModel.getUsuarioModel().getCodigo()); 
 
		pessoaEntity.setUsuarioEntity(usuarioEntity);
 
		entityManager.persist(pessoaEntity);
 
	}
 
	/***
	 * MÉTODO PARA CONSULTAR A PESSOA
	 * @return
	 */
	public List<PessoaModel> GetPessoas(){
 
		List<PessoaModel> pessoasModel = new ArrayList<PessoaModel>();
 
		entityManager =  Uteis.JpaEntityManager();
 
		Query query = entityManager.createNamedQuery("PessoaEntity.findAll");
 
		@SuppressWarnings("unchecked")
		Collection<PessoaEntity> pessoasEntity = (Collection<PessoaEntity>)query.getResultList();
 
		PessoaModel pessoaModel = null;
 
		for (PessoaEntity pessoaEntity : pessoasEntity) {
 
			pessoaModel = new PessoaModel();
			pessoaModel.setCodigo(pessoaEntity.getCodigo());
			pessoaModel.setDataCadastro(pessoaEntity.getDataCadastro());
			pessoaModel.setEmail(pessoaEntity.getEmail());
			pessoaModel.setEndereco(pessoaEntity.getEndereco());
			pessoaModel.setNome(pessoaEntity.getNome());
 
			if(pessoaEntity.getOrigemCadastro().equals("X"))
				pessoaModel.setOrigemCadastro("XML");
			else
				pessoaModel.setOrigemCadastro("INPUT");
 
 
			if(pessoaEntity.getSexo().equals("M"))
				pessoaModel.setSexo("Masculino");
			else
				pessoaModel.setSexo("Feminino");
 
			UsuarioEntity usuarioEntity =  pessoaEntity.getUsuarioEntity();			
 
			UsuarioModel usuarioModel = new UsuarioModel();
			usuarioModel.setUsuario(usuarioEntity.getUsuario());
 
			pessoaModel.setUsuarioModel(usuarioModel);
 
			pessoasModel.add(pessoaModel);
		}
 
		return pessoasModel;
 
	}
 
	/***
	 * CONSULTA UMA PESSOA CADASTRADA PELO CÓDIGO
	 * @param codigo
	 * @return
	 */
	private PessoaEntity GetPessoa(int codigo){
 
		entityManager =  Uteis.JpaEntityManager();
 
		return entityManager.find(PessoaEntity.class, codigo);
	}
 
	/***
	 * ALTERA UM REGISTRO CADASTRADO NO BANCO DE DADOS
	 * @param pessoaModel
	 */
	public void AlterarRegistro(PessoaModel pessoaModel){
 
		entityManager =  Uteis.JpaEntityManager();
 
		PessoaEntity pessoaEntity = this.GetPessoa(pessoaModel.getCodigo());
 
		pessoaEntity.setEmail(pessoaModel.getEmail());
		pessoaEntity.setEndereco(pessoaModel.getEndereco());
		pessoaEntity.setNome(pessoaModel.getNome());
		pessoaEntity.setSexo(pessoaModel.getSexo());
 
		entityManager.merge(pessoaEntity);
	}
	/***
	 * EXCLUI UM REGISTRO DO BANCO DE DADOS
	 * @param codigo
	 */
	public void ExcluirRegistro(int codigo){
 
		entityManager =  Uteis.JpaEntityManager();		
 
		PessoaEntity pessoaEntity = this.GetPessoa(codigo);
 
		entityManager.remove(pessoaEntity);
	}
 
	/***
	 * RETORNA OS TIPOS DE PESSOA AGRUPADOS
	 * @return
	 */
	public Hashtable<String, Integer> GetOrigemPessoa(){
 
		Hashtable<String, Integer> hashtableRegistros = new Hashtable<String,Integer>(); 
 
		entityManager =  Uteis.JpaEntityManager();
 
		Query query = entityManager.createNamedQuery("PessoaEntity.GroupByOrigemCadastro");
 
		@SuppressWarnings("unchecked")
		Collection<Object[]> collectionRegistros  = (Collection<Object[]>)query.getResultList();
 
		for (Object[] objects : collectionRegistros) {
 
 
			String tipoPessoa 		= (String)objects[0];
			int	   totalDeRegistros = ((Number)objects[1]).intValue();
 
			if(tipoPessoa.equals("X"))
				tipoPessoa = "XML";
			else
				tipoPessoa = "INPUT";
 
			hashtableRegistros.put(tipoPessoa, totalDeRegistros);
 
		}
 
		return hashtableRegistros;
 
	}
 
 
}

Criando a classe do gráfico.

Agora no pacote br.com.ciceroednilson.pessoa.controller, vamos adicionar uma classe com o nome de GraficoPizzaPessoaController, depois vamos adicionar o código abaixo a nossa classe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package br.com.ciceroednilson.pessoa.controller;
 
import java.util.Hashtable;
 
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
 
import org.primefaces.model.chart.PieChartModel;
 
import br.com.ciceroednilson.repository.PessoaRepository;
 
@Named(value="graficoPizzaPessoaController")
@RequestScoped
public class GraficoPizzaPessoaController {
 
	@Inject
	private PessoaRepository pessoaRepository;
 
 
	private PieChartModel pieChartModel;
 
	public PieChartModel getPieChartModel() {
		return pieChartModel;
	}
 
	@PostConstruct
	public  void init(){
 
		this.pieChartModel = new PieChartModel();
 
		this.MontaGrafico();
	}
 
	/***
	 * MONTA O GRÁFICO NA PÁGINA
	 */
	private void MontaGrafico(){
 
		//CONSULTA OS DADOS PARA MONTAR O GRÁFICO
		Hashtable<String, Integer> hashtableRegistros = pessoaRepository.GetOrigemPessoa();
 
 
		//INFORMANDO OS VALORES PARA MONTAR O GRÁFICO
		hashtableRegistros.forEach((chave,valor) -> {
 
 
			pieChartModel.set(chave, valor);
 
		});
 
		pieChartModel.setTitle("Total de Pessoas cadastrado por Tipo");
		pieChartModel.setShowDataLabels(true);
		pieChartModel.setLegendPosition("e");
 
 
	}
}

Criando página do gráfico.

Na pasta sistema do nosso projeto vamos adicionar uma página com o nome de graficoPizzaPessoa.xhtml, depois vamos deixar a nossa página com o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
	xmlns:h="http://xmlns.jcp.org/jsf/html"
	xmlns:f="http://xmlns.jcp.org/jsf/core"
	xmlns:p="http://primefaces.org/ui">
 
<ui:composition template="/template/layoutBase.xhtml">
 
	<ui:define name="content">
 
		<p:chart type="pie" 
				 model="#{graficoPizzaPessoaController.pieChartModel}" 
				 style="height:600px" />
 
	</ui:define>
 
</ui:composition>
</html>

Abaixo podemos ver o fluxo da nossa rotina para montar o gráfico.

Agora vamos adicionar a chamada da nossa página ao nosso header.xhtml como mostra a imagem abaixo.

Testando gráfico.

Agora vamos fazer o deploy da nossa aplicação e então vamos acessar o menu Gráfico tipo Pessoa, e então vamos ver o percentual de cada tipo de pessoa(cadastradas por INPUT ou via XML).

É isso ai amigos, na próxima parte do nosso tutorial vamos criar uma página para a realização de download dos registros cadastrados, até a próxima.

Comentários

Name of author

Name: ciceroednilson@gmail.com

2 thoughts on “Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

  • Alisson Fernandes

    Muito bom, tem algum post que fala com exportar o gráfico como imagem? Não estou conseguindo fazer.

    Reply
    • ciceroednilson@gmail.com Post author

      Muito obrigado por visitar o Blog Alisson,

      Ainda não fiz um tutorial de como exportar imagem, mas vou tentar fazer no futuro.

      Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *