diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/.tern-project b/282_Jelastic_Criacao_Banco_Dados/Drogaria/.tern-project
new file mode 100644
index 0000000..b6f48dd
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/.tern-project
@@ -0,0 +1 @@
+{"ide":{},"libs":["ecma5","browser"],"plugins":{"guess-types":{},"angular":{}}}
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/pom.xml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/pom.xml
new file mode 100644
index 0000000..39b1e60
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/pom.xml
@@ -0,0 +1,132 @@
+
+ 4.0.0
+ br.pro.delfino.drogaria
+ Drogaria
+ 1.0
+ war
+
+
+
+ UTF-8
+
+
+
+
+
+ Drogaria
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+
+
+ prime-repo
+ PrimeFaces Maven Repository
+ http://repository.primefaces.org
+ default
+
+
+
+
+
+
+
+ org.hibernate
+ hibernate-core
+ 4.3.11.Final
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.36
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+ org.glassfish
+ javax.faces
+ 2.2.12
+
+
+
+
+ org.primefaces
+ primefaces
+ 5.2
+
+
+
+
+ org.primefaces.themes
+ all-themes
+ 1.0.10
+
+
+
+
+ org.omnifaces
+ omnifaces
+ 1.11
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet
+ 2.22.1
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.4
+
+
+
+
+ net.sf.jasperreports
+ jasperreports
+ 6.1.1
+
+
+
+
+ org.apache.shiro
+ shiro-core
+ 1.2.4
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
new file mode 100644
index 0000000..5ac52eb
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
@@ -0,0 +1,42 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.SessionScoped;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@ManagedBean
+@SessionScoped
+public class AutenticacaoBean {
+ private Usuario usuario;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ @PostConstruct
+ public void iniciar() {
+ usuario = new Usuario();
+ usuario.setPessoa(new Pessoa());
+ }
+
+ public void autenticar() {
+ try {
+ Faces.redirect("./pages/principal.xhtml");
+ } catch (IOException erro) {
+ erro.printStackTrace();
+ Messages.addGlobalError(erro.getMessage());
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
new file mode 100644
index 0000000..4b03075
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
@@ -0,0 +1,119 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class CidadeBean implements Serializable {
+ private Cidade cidade;
+ private List cidades;
+ private List estados;
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar listar as cidades");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao gerar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.merge(cidade);
+
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.excluir(cidade);
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade removida com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover a cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento){
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar uma cidade");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
new file mode 100644
index 0000000..c96b115
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
@@ -0,0 +1,91 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ClienteBean implements Serializable {
+ private Cliente cliente;
+
+ private List clientes;
+ private List pessoas;
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listar("dataCadastro");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os clientes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cliente = new Cliente();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo cliente");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clienteDAO.merge(cliente);
+
+ cliente = new Cliente();
+
+ clientes = clienteDAO.listar("dataCadastro");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Cliente salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o cliente");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
new file mode 100644
index 0000000..b4921fe
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
@@ -0,0 +1,88 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class EstadoBean implements Serializable {
+ private Estado estado;
+ private List estados;
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os estados");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ estado = new Estado();
+ }
+
+ public void salvar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.merge(estado);
+
+ estado = new Estado();
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.excluir(estado);
+
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
new file mode 100644
index 0000000..7fddf7d
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
@@ -0,0 +1,116 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+
+import org.omnifaces.util.Messages;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class FabricanteBean implements Serializable {
+ private Fabricante fabricante;
+ private List fabricantes;
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os fabricantes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ fabricante = new Fabricante();
+ }
+
+ public void salvar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+
+ Gson gson = new Gson();
+
+ String json = gson.toJson(fabricante);
+ caminho.request().post(Entity.json(json));
+
+ fabricante = new Fabricante();
+
+ json = caminho.request().get(String.class);
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+
+ Client cliente = ClientBuilder.newClient();
+
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ WebTarget caminhoExcluir = caminho.path("{codigo}").resolveTemplate("codigo", fabricante.getCodigo());
+
+ caminhoExcluir.request().delete();
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
new file mode 100644
index 0000000..a042b04
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
@@ -0,0 +1,89 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.HistoricoDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Historico;
+import br.pro.delfino.drogaria.domain.Produto;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class HistoricoBean implements Serializable {
+ private Produto produto;
+ private Boolean exibePainelDados;
+
+ private Historico historico;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Boolean getExibePainelDados() {
+ return exibePainelDados;
+ }
+
+ public void setExibePainelDados(Boolean exibePainelDados) {
+ this.exibePainelDados = exibePainelDados;
+ }
+
+ public Historico getHistorico() {
+ return historico;
+ }
+
+ public void setHistorico(Historico historico) {
+ this.historico = historico;
+ }
+
+ @PostConstruct
+ public void novo() {
+ historico = new Historico();
+ produto = new Produto();
+ exibePainelDados = false;
+ }
+
+ public void buscar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto resultado = produtoDAO.buscar(produto.getCodigo());
+
+ if (resultado == null) {
+ exibePainelDados = false;
+ Messages.addGlobalWarn("Não existe produto cadastrado para o código informado");
+ } else {
+ exibePainelDados = true;
+ produto = resultado;
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar buscar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ historico.setHorario(new Date());
+ historico.setProduto(produto);
+
+ HistoricoDAO historicoDAO = new HistoricoDAO();
+ historicoDAO.salvar(historico);
+
+ Messages.addGlobalInfo("Histórico salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o histórico");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
new file mode 100644
index 0000000..eb963a8
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.RequestScoped;
+
+import org.primefaces.model.DefaultStreamedContent;
+import org.primefaces.model.StreamedContent;
+
+@ManagedBean
+@RequestScoped
+public class ImagemBean {
+ @ManagedProperty("#{param.caminho}")
+ private String caminho;
+
+ private StreamedContent foto;
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+
+ public StreamedContent getFoto() throws IOException {
+ if(caminho == null || caminho.isEmpty()){
+ Path path = Paths.get("C:/Programação Web com Java/Uploads/branco.png");
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }else{
+ Path path = Paths.get(caminho);
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }
+ return foto;
+ }
+
+ public void setFoto(StreamedContent foto) {
+ this.foto = foto;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
new file mode 100644
index 0000000..931edf7
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
@@ -0,0 +1,156 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class PessoaBean implements Serializable {
+ private Pessoa pessoa;
+ private List pessoas;
+
+ private Estado estado;
+ private List estados;
+
+ private List cidades;
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar as pessoas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar uma nova pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try{
+ pessoa = (Pessoa) evento.getComponent().getAttributes().get("pessoaSelecionada");
+
+ estado = pessoa.getCidade().getEstado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar selecionar uma pessoa");
+ }
+ }
+
+ public void salvar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoaDAO.merge(pessoa);
+
+ pessoas = pessoaDAO.listar("nome");
+
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+
+ Messages.addGlobalInfo("Pessoa salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+
+ }
+
+ public void popular() {
+ try {
+ if (estado != null) {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ } else {
+ cidades = new ArrayList<>();
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar filtrar as cidades");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
new file mode 100644
index 0000000..e48e0d1
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
@@ -0,0 +1,196 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+import org.primefaces.component.datatable.DataTable;
+import org.primefaces.event.FileUploadEvent;
+import org.primefaces.model.UploadedFile;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperPrintManager;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ProdutoBean implements Serializable {
+ private Produto produto;
+ private List produtos;
+ private List fabricantes;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os produtos");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar um novo produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+ produto.setCaminho("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar um produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if (produto.getCaminho() == null) {
+ Messages.addGlobalError("O campo foto é obrigatório");
+ return;
+ }
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto produtoRetorno = produtoDAO.merge(produto);
+
+ Path origem = Paths.get(produto.getCaminho());
+ Path destino = Paths.get("C:/Programação Web com Java/Uploads/" + produtoRetorno.getCodigo() + ".png");
+ Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
+
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto salvo com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtoDAO.excluir(produto);
+
+ Path arquivo = Paths.get("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+ Files.deleteIfExists(arquivo);
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto removido com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void upload(FileUploadEvent evento) {
+ try {
+ UploadedFile arquivoUpload = evento.getFile();
+ Path arquivoTemp = Files.createTempFile(null, null);
+ Files.copy(arquivoUpload.getInputstream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
+ produto.setCaminho(arquivoTemp.toString());
+
+ Messages.addGlobalInfo("Upload realizado com sucesso");
+ } catch (IOException erro) {
+ Messages.addGlobalInfo("Ocorreu um erro ao tentar realizar o upload de arquivo");
+ erro.printStackTrace();
+ }
+ }
+
+ public void imprimir() {
+ try {
+ DataTable tabela = (DataTable) Faces.getViewRoot().findComponent("formListagem:tabela");
+ Map filtros = tabela.getFilters();
+
+ String proDescricao = (String) filtros.get("descricao");
+ String fabDescricao = (String) filtros.get("fabricante.descricao");
+
+ String caminho = Faces.getRealPath("/reports/produtos.jasper");
+
+ Map parametros = new HashMap<>();
+ if (proDescricao == null) {
+ parametros.put("PRODUTO_DESCRICAO", "%%");
+ } else {
+ parametros.put("PRODUTO_DESCRICAO", "%" + proDescricao + "%");
+ }
+ if (fabDescricao == null) {
+ parametros.put("FABRICANTE_DESCRICAO", "%%");
+ } else {
+ parametros.put("FABRICANTE_DESCRICAO", "%" + fabDescricao + "%");
+ }
+
+ Connection conexao = HibernateUtil.getConexao();
+
+ JasperPrint relatorio = JasperFillManager.fillReport(caminho, parametros, conexao);
+
+ JasperPrintManager.printReport(relatorio, true);
+ } catch (JRException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar o relatório");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
new file mode 100644
index 0000000..f526df8
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
@@ -0,0 +1,90 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.dao.UsuarioDAO;
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class UsuarioBean implements Serializable {
+ private Usuario usuario;
+
+ private List pessoas;
+ private List usuarios;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public List getUsuarios() {
+ return usuarios;
+ }
+
+ public void setUsuarios(List usuarios) {
+ this.usuarios = usuarios;
+ }
+
+ @PostConstruct
+ public void listar(){
+ try{
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarios = usuarioDAO.listar("tipo");
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os usuários");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ usuario = new Usuario();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo usuário");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioDAO.merge(usuario);
+
+ usuario = new Usuario();
+ usuarios = usuarioDAO.listar("tipo");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Usuário salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o usuário");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
new file mode 100644
index 0000000..ada8ff2
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
@@ -0,0 +1,186 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.FuncionarioDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.dao.VendaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class VendaBean implements Serializable {
+ private Venda venda;
+
+ private List produtos;
+ private List itensVenda;
+ private List clientes;
+ private List funcionarios;
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getItensVenda() {
+ return itensVenda;
+ }
+
+ public void setItensVenda(List itensVenda) {
+ this.itensVenda = itensVenda;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getFuncionarios() {
+ return funcionarios;
+ }
+
+ public void setFuncionarios(List funcionarios) {
+ this.funcionarios = funcionarios;
+ }
+
+ @PostConstruct
+ public void novo() {
+ try {
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar carregar a tela de vendas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void adicionar(ActionEvent evento) {
+ Produto produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(produto)) {
+ achou = posicao;
+ }
+ }
+
+ if (achou < 0) {
+ ItemVenda itemVenda = new ItemVenda();
+ itemVenda.setPrecoParcial(produto.getPreco());
+ itemVenda.setProduto(produto);
+ itemVenda.setQuantidade(new Short("1"));
+
+ itensVenda.add(itemVenda);
+ } else {
+ ItemVenda itemVenda = itensVenda.get(achou);
+ itemVenda.setQuantidade(new Short(itemVenda.getQuantidade() + 1 + ""));
+ itemVenda.setPrecoParcial(produto.getPreco().multiply(new BigDecimal(itemVenda.getQuantidade())));
+ }
+
+ calcular();
+ }
+
+ public void remover(ActionEvent evento) {
+ ItemVenda itemVenda = (ItemVenda) evento.getComponent().getAttributes().get("itemSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(itemVenda.getProduto())) {
+ achou = posicao;
+ }
+ }
+
+ if (achou > -1) {
+ itensVenda.remove(achou);
+ }
+
+ calcular();
+ }
+
+ public void calcular() {
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ venda.setPrecoTotal(venda.getPrecoTotal().add(itemVenda.getPrecoParcial()));
+ }
+ }
+
+ public void finalizar() {
+ try {
+ venda.setHorario(new Date());
+ venda.setCliente(null);
+ venda.setFuncionario(null);
+
+ FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
+ funcionarios = funcionarioDAO.listarOrdenado();
+
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listarOrdenado();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar finalizar a venda");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if(venda.getPrecoTotal().signum() == 0){
+ Messages.addGlobalError("Informe pelo menos um item para a venda");
+ return;
+ }
+
+ VendaDAO vendaDAO = new VendaDAO();
+ vendaDAO.salvar(venda, itensVenda);
+
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+
+ Messages.addGlobalInfo("Venda realizada com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a venda");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
new file mode 100644
index 0000000..8a5d259
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.converter;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+
+@FacesConverter("upperCaseConverter")
+public class UpperCaseConverter implements Converter {
+
+ @Override
+ public Object getAsObject(FacesContext context, UIComponent component, String value) {
+ if (value == null) {
+ return null;
+ } else {
+ return value.toUpperCase();
+ }
+ }
+
+ @Override
+ public String getAsString(FacesContext context, UIComponent component, Object value) {
+ if (value == null) {
+ return "";
+ } else {
+ return value.toString();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
new file mode 100644
index 0000000..fd8acd7
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
@@ -0,0 +1,26 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.Date;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Caixa;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CaixaDAO extends GenericDAO {
+ public Caixa buscar(Date dataAbertura) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Caixa.class);
+ consulta.add(Restrictions.eq("dataAbertura", dataAbertura));
+ Caixa resultado = (Caixa) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
new file mode 100644
index 0000000..e685e93
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CidadeDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List buscarPorEstado(Long estadoCodigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cidade.class);
+ consulta.add(Restrictions.eq("estado.codigo", estadoCodigo));
+ consulta.addOrder(Order.asc("nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
new file mode 100644
index 0000000..e9796b5
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class ClienteDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cliente.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
new file mode 100644
index 0000000..32b4a79
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class EstadoDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
new file mode 100644
index 0000000..8b7f946
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+public class FabricanteDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
new file mode 100644
index 0000000..2b3114d
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class FuncionarioDAO extends GenericDAO{
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Funcionario.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
new file mode 100644
index 0000000..b505cd3
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
@@ -0,0 +1,140 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class GenericDAO {
+ private Class classe;
+
+ @SuppressWarnings("unchecked")
+ public GenericDAO() {
+ this.classe = (Class) ((ParameterizedType) getClass().getGenericSuperclass())
+ .getActualTypeArguments()[0];
+ }
+
+ public void salvar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.save(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar(String campoOrdenacao) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.addOrder(Order.asc(campoOrdenacao));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade buscar(Long codigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.add(Restrictions.idEq(codigo));
+ Entidade resultado = (Entidade) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void excluir(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.delete(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void editar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.update(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade merge(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ Entidade retorno = (Entidade) sessao.merge(entidade);
+ transacao.commit();
+ return retorno;
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
new file mode 100644
index 0000000..7b30017
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Historico;
+
+public class HistoricoDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
new file mode 100644
index 0000000..b6560e2
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Movimentacao;
+
+public class MovimentacaoDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
new file mode 100644
index 0000000..bbd116b
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+public class PessoaDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
new file mode 100644
index 0000000..4c1e751
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Produto;
+
+public class ProdutoDAO extends GenericDAO {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
new file mode 100644
index 0000000..b4bf524
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.dao;
+
+import org.apache.shiro.crypto.hash.SimpleHash;
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Usuario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class UsuarioDAO extends GenericDAO {
+ public Usuario autenticar(String cpf, String senha) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+
+ try{
+ Criteria consulta = sessao.createCriteria(Usuario.class);
+ consulta.createAlias("pessoa", "p");
+
+ consulta.add(Restrictions.eq("p.cpf", cpf));
+
+ SimpleHash hash = new SimpleHash("md5", senha);
+ consulta.add(Restrictions.eq("senha", hash.toHex()));
+
+ Usuario resultado = (Usuario) consulta.uniqueResult();
+
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
new file mode 100644
index 0000000..3428939
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class VendaDAO extends GenericDAO {
+ public void salvar(Venda venda, List itensVenda) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+
+ sessao.save(venda);
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ itemVenda.setVenda(venda);
+
+ sessao.save(itemVenda);
+
+ Produto produto = itemVenda.getProduto();
+ int quantidade = produto.getQuantidade() - itemVenda.getQuantidade();
+ if (quantidade >= 0) {
+ produto.setQuantidade(new Short(quantidade + ""));
+ sessao.update(produto);
+ } else {
+ throw new RuntimeException("Quantidade insuficiente em estoque");
+ }
+ }
+
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
new file mode 100644
index 0000000..43b07c4
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Caixa extends GenericDomain {
+ @Column(nullable = false, unique = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataAbertura;
+
+ @Column(nullable = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataFechamento;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valorAbertura;
+
+ public Date getDataAbertura() {
+ return dataAbertura;
+ }
+
+ public void setDataAbertura(Date dataAbertura) {
+ this.dataAbertura = dataAbertura;
+ }
+
+ public Date getDataFechamento() {
+ return dataFechamento;
+ }
+
+ public void setDataFechamento(Date dataFechamento) {
+ this.dataFechamento = dataFechamento;
+ }
+
+ public BigDecimal getValorAbertura() {
+ return valorAbertura;
+ }
+
+ public void setValorAbertura(BigDecimal valorAbertura) {
+ this.valorAbertura = valorAbertura;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
new file mode 100644
index 0000000..cf94ede
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cidade extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Estado estado;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
new file mode 100644
index 0000000..6ace9b9
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cliente extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataCadastro;
+
+ @Column(nullable = false)
+ private Boolean liberado;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public Date getDataCadastro() {
+ return dataCadastro;
+ }
+
+ public void setDataCadastro(Date dataCadastro) {
+ this.dataCadastro = dataCadastro;
+ }
+
+ public Boolean getLiberado() {
+ return liberado;
+ }
+
+ public void setLiberado(Boolean liberado) {
+ this.liberado = liberado;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
new file mode 100644
index 0000000..1c06b98
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
@@ -0,0 +1,30 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Estado extends GenericDomain {
+ @Column(length = 2, nullable = false)
+ private String sigla;
+
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ public String getSigla() {
+ return sigla;
+ }
+
+ public void setSigla(String sigla) {
+ this.sigla = sigla;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
new file mode 100644
index 0000000..02eab8c
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
@@ -0,0 +1,19 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Fabricante extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String descricao;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
new file mode 100644
index 0000000..dec9378
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Funcionario extends GenericDomain {
+ @Column(length = 15, nullable = false)
+ private String carteiraTrabalho;
+
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataAdmissao;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getCarteiraTrabalho() {
+ return carteiraTrabalho;
+ }
+
+ public void setCarteiraTrabalho(String carteiraTrabalho) {
+ this.carteiraTrabalho = carteiraTrabalho;
+ }
+
+ public Date getDataAdmissao() {
+ return dataAdmissao;
+ }
+
+ public void setDataAdmissao(Date dataAdmissao) {
+ this.dataAdmissao = dataAdmissao;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
new file mode 100644
index 0000000..f37efea
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
@@ -0,0 +1,54 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+@SuppressWarnings("serial")
+@MappedSuperclass
+public class GenericDomain implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long codigo;
+
+ public Long getCodigo() {
+ return codigo;
+ }
+
+ public void setCodigo(Long codigo) {
+ this.codigo = codigo;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s[codigo=%d]", getClass().getSimpleName(), getCodigo());
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ GenericDomain other = (GenericDomain) obj;
+ if (codigo == null) {
+ if (other.codigo != null)
+ return false;
+ } else if (!codigo.equals(other.codigo))
+ return false;
+ return true;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
new file mode 100644
index 0000000..dafdaeb
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Historico extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, length = 500)
+ private String observacoes;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public String getObservacoes() {
+ return observacoes;
+ }
+
+ public void setObservacoes(String observacoes) {
+ this.observacoes = observacoes;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
new file mode 100644
index 0000000..590ab26
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
@@ -0,0 +1,58 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class ItemVenda extends GenericDomain {
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoParcial;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Venda venda;
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPrecoParcial() {
+ return precoParcial;
+ }
+
+ public void setPrecoParcial(BigDecimal precoParcial) {
+ this.precoParcial = precoParcial;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
new file mode 100644
index 0000000..c3d6319
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
@@ -0,0 +1,50 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Movimentacao extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valor;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Caixa caixa;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getValor() {
+ return valor;
+ }
+
+ public void setValor(BigDecimal valor) {
+ this.valor = valor;
+ }
+
+ public Caixa getCaixa() {
+ return caixa;
+ }
+
+ public void setCaixa(Caixa caixa) {
+ this.caixa = caixa;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
new file mode 100644
index 0000000..f354001
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
@@ -0,0 +1,143 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Pessoa extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @Column(length = 14, nullable = false)
+ private String cpf;
+
+ @Column(length = 12, nullable = false)
+ private String rg;
+
+ @Column(length = 100, nullable = false)
+ private String rua;
+
+ @Column(nullable = false)
+ private Short numero;
+
+ @Column(length = 30, nullable = false)
+ private String bairro;
+
+ @Column(length = 10, nullable = false)
+ private String cep;
+
+ @Column(length = 10)
+ private String complemento;
+
+ @Column(length = 13, nullable = false)
+ private String telefone;
+
+ @Column(length = 14, nullable = false)
+ private String celular;
+
+ @Column(length = 100, nullable = false)
+ private String email;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Cidade cidade;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public String getCpf() {
+ return cpf;
+ }
+
+ public void setCpf(String cpf) {
+ this.cpf = cpf;
+ }
+
+ public String getRg() {
+ return rg;
+ }
+
+ public void setRg(String rg) {
+ this.rg = rg;
+ }
+
+ public String getRua() {
+ return rua;
+ }
+
+ public void setRua(String rua) {
+ this.rua = rua;
+ }
+
+ public Short getNumero() {
+ return numero;
+ }
+
+ public void setNumero(Short numero) {
+ this.numero = numero;
+ }
+
+ public String getBairro() {
+ return bairro;
+ }
+
+ public void setBairro(String bairro) {
+ this.bairro = bairro;
+ }
+
+ public String getCep() {
+ return cep;
+ }
+
+ public void setCep(String cep) {
+ this.cep = cep;
+ }
+
+ public String getComplemento() {
+ return complemento;
+ }
+
+ public void setComplemento(String complemento) {
+ this.complemento = complemento;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public String getCelular() {
+ return celular;
+ }
+
+ public void setCelular(String celular) {
+ this.celular = celular;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
new file mode 100644
index 0000000..82049b0
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
@@ -0,0 +1,69 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Produto extends GenericDomain {
+ @Column(length = 80, nullable = false)
+ private String descricao;
+
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 6, scale = 2)
+ private BigDecimal preco;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Fabricante fabricante;
+
+ @Transient
+ private String caminho;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPreco() {
+ return preco;
+ }
+
+ public void setPreco(BigDecimal preco) {
+ this.preco = preco;
+ }
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
new file mode 100644
index 0000000..ae51941
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
@@ -0,0 +1,93 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Usuario extends GenericDomain {
+ @Column(length = 32, nullable = false)
+ private String senha;
+
+ @Transient
+ private String senhaSemCriptografia;
+
+ @Column(nullable = false)
+ private Character tipo;
+
+ @Column(nullable = false)
+ private Boolean ativo;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getSenha() {
+ return senha;
+ }
+
+ public void setSenha(String senha) {
+ this.senha = senha;
+ }
+
+ public String getSenhaSemCriptografia() {
+ return senhaSemCriptografia;
+ }
+
+ public void setSenhaSemCriptografia(String senhaSemCriptografia) {
+ this.senhaSemCriptografia = senhaSemCriptografia;
+ }
+
+ public Character getTipo() {
+ return tipo;
+ }
+
+ @Transient
+ public String getTipoFormatado() {
+ String tipoFormatado = null;
+
+ if (tipo == 'A') {
+ tipoFormatado = "Administrador";
+ } else if (tipo == 'B') {
+ tipoFormatado = "Balconista";
+ } else if (tipo == 'G') {
+ tipoFormatado = "Gerente";
+ }
+
+ return tipoFormatado;
+ }
+
+ public void setTipo(Character tipo) {
+ this.tipo = tipo;
+ }
+
+ public Boolean getAtivo() {
+ return ativo;
+ }
+
+ @Transient
+ public String getAtivoFormatado(){
+ String ativoFormatado = "Não";
+
+ if(ativo){
+ ativoFormatado = "Sim";
+ }
+
+ return ativoFormatado;
+ }
+
+ public void setAtivo(Boolean ativo) {
+ this.ativo = ativo;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
new file mode 100644
index 0000000..3f4c226
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
@@ -0,0 +1,61 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Venda extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoTotal;
+
+ @ManyToOne
+ private Cliente cliente;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Funcionario funcionario;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getPrecoTotal() {
+ return precoTotal;
+ }
+
+ public void setPrecoTotal(BigDecimal precoTotal) {
+ this.precoTotal = precoTotal;
+ }
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public Funcionario getFuncionario() {
+ return funcionario;
+ }
+
+ public void setFuncionario(Funcionario funcionario) {
+ this.funcionario = funcionario;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
new file mode 100644
index 0000000..fbb1f2b
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.service;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+// http://localhost:8080/Drogaria/rest/drogaria
+@Path("drogaria")
+public class DrogariaService {
+ @GET
+ public String exibir(){
+ return "Curso de Java";
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
new file mode 100644
index 0000000..1dbc0d1
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
@@ -0,0 +1,85 @@
+package br.pro.delfino.drogaria.service;
+
+import java.util.List;
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@Path("fabricante")
+public class FabricanteService {
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @GET
+ public String listar() {
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ List fabricantes = fabricanteDAO.listar("descricao");
+
+ Gson gson = new Gson();
+ String json = gson.toJson(fabricantes);
+
+ return json;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/{codigo}
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/10
+ @GET
+ @Path("{codigo}")
+ public String buscar(@PathParam("codigo") Long codigo) {
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+
+ Gson gson = new Gson();
+ String json = gson.toJson(fabricante);
+
+ return json;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @POST
+ public String salvar(String json) {
+ Gson gson = new Gson();
+ Fabricante fabricante = gson.fromJson(json, Fabricante.class);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.merge(fabricante);
+
+ String jsonSaida = gson.toJson(fabricante);
+ return jsonSaida;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @PUT
+ public String editar(String json) {
+ Gson gson = new Gson();
+ Fabricante fabricante = gson.fromJson(json, Fabricante.class);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.editar(fabricante);
+
+ String jsonSaida = gson.toJson(fabricante);
+ return jsonSaida;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/{codigo}
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/10
+ @DELETE
+ @Path("{codigo}")
+ public String excluir(@PathParam("codigo") Long codigo){
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+ fabricanteDAO.excluir(fabricante);
+
+ Gson gson = new Gson();
+ String saida = gson.toJson(fabricante);
+ return saida;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java
new file mode 100644
index 0000000..4dfdf40
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java
@@ -0,0 +1,39 @@
+package br.pro.delfino.drogaria.service;
+
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Produto;
+
+// http://127.0.0.1:8080/Drogaria/rest/produto
+@Path("produto")
+public class ProdutoService {
+ @GET
+ public String listar(){
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ List produtos = produtoDAO.listar("descricao");
+
+ Gson gson = new Gson();
+ String json = gson.toJson(produtos);
+
+ return json;
+ }
+
+ @POST
+ public String salvar (String json){
+ Gson gson = new Gson();
+ Produto produto = gson.fromJson(json, Produto.class);
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produto = produtoDAO.merge(produto);
+
+ String jsonSaida = gson.toJson(produto);
+ return jsonSaida;
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java
new file mode 100644
index 0000000..2c997a9
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.util;
+
+import javax.ws.rs.ApplicationPath;
+
+import org.glassfish.jersey.server.ResourceConfig;
+
+//http://localhost:8080/Drogaria/rest
+@ApplicationPath("rest")
+public class DrogariaResourceConfig extends ResourceConfig {
+ public DrogariaResourceConfig(){
+ packages("br.pro.delfino.drogaria.service");
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java
new file mode 100644
index 0000000..71869d7
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java
@@ -0,0 +1,18 @@
+package br.pro.delfino.drogaria.util;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class HibernateContexto implements ServletContextListener {
+
+ @Override
+ public void contextDestroyed(ServletContextEvent event) {
+ HibernateUtil.getFabricaDeSessoes().close();
+ }
+
+ @Override
+ public void contextInitialized(ServletContextEvent event) {
+ HibernateUtil.getFabricaDeSessoes();
+ }
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java
new file mode 100644
index 0000000..693551b
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java
@@ -0,0 +1,47 @@
+package br.pro.delfino.drogaria.util;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.jdbc.ReturningWork;
+import org.hibernate.service.ServiceRegistry;
+
+public class HibernateUtil {
+ private static SessionFactory fabricaDeSessoes = criarFabricaDeSessoes();
+
+ public static SessionFactory getFabricaDeSessoes() {
+ return fabricaDeSessoes;
+ }
+
+ public static Connection getConexao(){
+ Session sessao = fabricaDeSessoes.openSession();
+
+ Connection conexao = sessao.doReturningWork(new ReturningWork() {
+ @Override
+ public Connection execute(Connection conn) throws SQLException {
+ return conn;
+ }
+ });
+
+ return conexao;
+ }
+
+ private static SessionFactory criarFabricaDeSessoes() {
+ try {
+ Configuration configuracao = new Configuration().configure();
+
+ ServiceRegistry registro = new StandardServiceRegistryBuilder().applySettings(configuracao.getProperties()).build();
+
+ SessionFactory fabrica = configuracao.buildSessionFactory(registro);
+
+ return fabrica;
+ } catch (Throwable ex) {
+ System.err.println("A fábrica de sessões não pode ser criada." + ex);
+ throw new ExceptionInInitializerError(ex);
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/resources/hibernate.cfg.xml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/resources/hibernate.cfg.xml
new file mode 100644
index 0000000..e67323a
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/resources/hibernate.cfg.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+ com.mysql.jdbc.Driver
+ jdbc:mysql://node87281-drogaria.jelasticlw.com.br/drogaria
+ root
+ ADVibc98587
+
+
+ 1
+
+
+ org.hibernate.dialect.MySQL5InnoDBDialect
+
+
+ thread
+
+
+ org.hibernate.cache.internal.NoCacheProvider
+
+
+ true
+
+
+ update
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml
new file mode 100644
index 0000000..9d6938c
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml
@@ -0,0 +1,32 @@
+
+
+
+ http://www.springframework.org/security/tags
+
+ authorize
+ org.springframework.faces.security.FaceletsAuthorizeTagHandler
+
+
+ areAllGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areAllGranted(java.lang.String)
+
+
+ areAnyGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areAnyGranted(java.lang.String)
+
+
+ areNotGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areNotGranted(java.lang.String)
+
+
+ isAllowed
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean isAllowed(java.lang.String,
+ java.lang.String)
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/web.xml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..6b0cf5d
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,48 @@
+
+
+
+
+ Drogaria
+
+
+
+ pages/principal.xhtml
+
+
+
+
+ javax.faces.PROJECT_STAGE
+ Development
+
+
+
+
+ primefaces.THEME
+ blitzer
+
+
+
+
+ primefaces.UPLOADER
+ native
+
+
+
+
+ Faces Servlet
+ javax.faces.webapp.FacesServlet
+ 1
+
+
+ Faces Servlet
+ *.xhtml
+
+
+
+
+ br.pro.delfino.drogaria.util.HibernateContexto
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/autenticacao.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/autenticacao.xhtml
new file mode 100644
index 0000000..e41a833
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/autenticacao.xhtml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ Autenticação
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/cidades.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/cidades.xhtml
new file mode 100644
index 0000000..504f3a3
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/cidades.xhtml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/clientes.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/clientes.xhtml
new file mode 100644
index 0000000..4e3cfb5
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/clientes.xhtml
@@ -0,0 +1,94 @@
+
+
+
+
+
+ Clientes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/estados.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/estados.xhtml
new file mode 100644
index 0000000..1d441f1
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/estados.xhtml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/fabricantes.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/fabricantes.xhtml
new file mode 100644
index 0000000..3904db0
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/fabricantes.xhtml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/historico.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/historico.xhtml
new file mode 100644
index 0000000..184a864
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/historico.xhtml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ Histórico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/pessoas.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/pessoas.xhtml
new file mode 100644
index 0000000..7d68e8c
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/pessoas.xhtml
@@ -0,0 +1,162 @@
+
+
+
+
+
+ Pessoas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/principal.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/principal.xhtml
new file mode 100644
index 0000000..c05ed85
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/principal.xhtml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/produtos.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/produtos.xhtml
new file mode 100644
index 0000000..56c5db4
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/produtos.xhtml
@@ -0,0 +1,141 @@
+
+
+
+
+
+ Produtos
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testeJSF.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testeJSF.xhtml
new file mode 100644
index 0000000..c20659b
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testeJSF.xhtml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Teste JSF
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml
new file mode 100644
index 0000000..6c4d434
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Teste PrimeFaces
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/usuarios.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/usuarios.xhtml
new file mode 100644
index 0000000..45dd761
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/usuarios.xhtml
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Usuários
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/vendas.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/vendas.xhtml
new file mode 100644
index 0000000..4485892
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/pages/vendas.xhtml
@@ -0,0 +1,156 @@
+
+
+
+
+
+ Vendas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jasper b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jasper
new file mode 100644
index 0000000..96a1278
Binary files /dev/null and b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jasper differ
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jrxml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jrxml
new file mode 100644
index 0000000..76da981
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/estados.jrxml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jasper b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jasper
new file mode 100644
index 0000000..ad55e5f
Binary files /dev/null and b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jasper differ
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jrxml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jrxml
new file mode 100644
index 0000000..800aed0
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/reports/produtos.jrxml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/css/estilos.css b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/css/estilos.css
new file mode 100644
index 0000000..4acdd7f
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/css/estilos.css
@@ -0,0 +1,19 @@
+@CHARSET "UTF-8";
+
+.imagemCentralizada {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.divTopo {
+ padding-bottom: 5px;
+}
+
+.divCabecalho {
+ padding-bottom: 5px;
+}
+
+.ui-widget, .ui-widget .ui-widget {
+ font-size: 100% !important;
+}
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/images/banner.jpg b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/images/banner.jpg
new file mode 100644
index 0000000..f58cc21
Binary files /dev/null and b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/images/banner.jpg differ
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/js/scripts.js b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/js/scripts.js
new file mode 100644
index 0000000..e39ad9b
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/resources/js/scripts.js
@@ -0,0 +1,26 @@
+PrimeFaces.locales['pt_BR'] = {
+ closeText: 'Fechar',
+ prevText: 'Anterior',
+ nextText: 'Próximo',
+ currentText: 'Começo',
+ monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+ dayNamesMin: ['D','S','T','Q','Q','S','S'],
+ weekHeader: 'Semana',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: '',
+ timeOnlyTitle: 'Só Horas',
+ timeText: 'Tempo',
+ hourText: 'Hora',
+ minuteText: 'Minuto',
+ secondText: 'Segundo',
+ ampm: false,
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ allDayText : 'Todo o Dia'
+};
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/templates/modelo.xhtml b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/templates/modelo.xhtml
new file mode 100644
index 0000000..62d3d1c
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/main/webapp/templates/modelo.xhtml
@@ -0,0 +1,55 @@
+
+
+
+
+
+ SiGDro
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java
new file mode 100644
index 0000000..b5e6156
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Caixa;
+
+public class CaixaDAOTest {
+ @Test
+ @Ignore
+ public void salvar() throws ParseException {
+ Caixa caixa = new Caixa();
+ caixa.setDataAbertura(new SimpleDateFormat("dd/MM/yyyy").parse("14/12/2015"));
+ caixa.setValorAbertura(new BigDecimal("100.00"));
+
+ CaixaDAO caixaDAO = new CaixaDAO();
+ caixaDAO.salvar(caixa);
+ }
+
+ @Test
+ @Ignore
+ public void buscar() throws ParseException {
+ CaixaDAO caixaDAO = new CaixaDAO();
+ Caixa caixa = caixaDAO.buscar(new SimpleDateFormat("dd/MM/yyyy").parse("13/12/2015"));
+ System.out.println(caixa);
+ Assert.assertNull(caixa);
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java
new file mode 100644
index 0000000..ec59599
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java
@@ -0,0 +1,130 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class CidadeDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Long codigoEstado = 1L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+
+ Estado estado = estadoDAO.buscar(codigoEstado);
+
+ Cidade cidade = new Cidade();
+ cidade.setNome("Marília");
+ cidade.setEstado(estado);
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.salvar(cidade);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ List resultado = cidadeDAO.listar();
+
+ for (Cidade cidade : resultado) {
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ System.out.println();
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 7L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigo);
+
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ @Ignore
+ public void excluir(){
+ Long codigo = 7L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigo);
+
+ cidadeDAO.excluir(cidade);
+
+ System.out.println("Cidade Removida");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ @Ignore
+ public void editar(){
+ Long codigoCidade = 6L;
+ Long codigoEstado = 11L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigoEstado);
+
+ System.out.println("Código do Estado: " + estado.getCodigo());
+ System.out.println("Sigla do Estado: " + estado.getSigla());
+ System.out.println("Nome do Estado: " + estado.getNome());
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigoCidade);
+
+ System.out.println("Cidade A Ser Editada");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+
+ cidade.setNome("Guarapuava");
+ cidade.setEstado(estado);
+
+ cidadeDAO.editar(cidade);
+
+ System.out.println("Cidade Editada");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ public void buscarPorEstado() {
+ Long estadoCodigo = 3L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ List resultado = cidadeDAO.buscarPorEstado(estadoCodigo);
+
+ for (Cidade cidade : resultado) {
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ System.out.println();
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java
new file mode 100644
index 0000000..4d557d9
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+public class ClienteDAOTest {
+ @Test
+ @Ignore
+ public void salvar() throws ParseException {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ Pessoa pessoa = pessoaDAO.buscar(2L);
+
+ Cliente cliente = new Cliente();
+ cliente.setDataCadastro(new SimpleDateFormat("dd/MM/yyyy").parse("09/06/2015"));
+ cliente.setLiberado(false);
+ cliente.setPessoa(pessoa);
+
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clienteDAO.salvar(cliente);
+
+ System.out.println("Cliente salvo com sucesso.");
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java
new file mode 100644
index 0000000..f84a086
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java
@@ -0,0 +1,88 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class EstadoDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Estado estado = new Estado();
+ estado.setNome("Rio Grande do Sul");
+ estado.setSigla("RS");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.salvar(estado);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ List resultado = estadoDAO.listar();
+
+ System.out.println("Total de Registros Encontrados: " + resultado.size());
+
+ for (Estado estado : resultado) {
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 3L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro encontrado:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void excluir(){
+ Long codigo = 1L;
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ estadoDAO.excluir(estado);
+ System.out.println("Registro removido:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void editar(){
+ Long codigo = 10L;
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro editado - Antes:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+
+ estado.setNome("Santa Catarina");
+ estado.setSigla("SC");
+ estadoDAO.editar(estado);
+
+ System.out.println("Registro editado - Depois:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java
new file mode 100644
index 0000000..56fb124
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java
@@ -0,0 +1,63 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+public class FabricanteDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Fabricante fabricante = new Fabricante();
+ fabricante.setDescricao("Aché");
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.salvar(fabricante);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ FabricanteDAO FabricanteDAO = new FabricanteDAO();
+ List resultado = FabricanteDAO.listar();
+
+ System.out.println("Total de Registros Encontrados: " + resultado.size());
+
+ for (Fabricante fabricante : resultado) {
+ System.out.println(fabricante.getCodigo() + " - " + fabricante.getDescricao());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 3L;
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+
+ if(fabricante == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro encontrado:");
+ System.out.println(fabricante.getCodigo() + " - " + fabricante.getDescricao());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void merge() {
+ //Fabricante fabricante = new Fabricante();
+ //fabricante.setDescricao("Fabricante A");
+ //FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ //fabricanteDAO.merge(fabricante);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(5L);
+ fabricante.setDescricao("Fabricante B");
+ fabricanteDAO.merge(fabricante);
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java
new file mode 100644
index 0000000..06cfff7
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java
@@ -0,0 +1,5 @@
+package br.pro.delfino.drogaria.dao;
+
+public class FuncionarioDAOTest {
+
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java
new file mode 100644
index 0000000..36f8563
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.math.BigDecimal;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+import br.pro.delfino.drogaria.domain.Produto;
+
+public class ProdutoDAOTest {
+ @Test
+ @Ignore
+ public void salvar(){
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(new Long("3"));
+
+ Produto produto = new Produto();
+ produto.setDescricao("Cataflan 50mg com 20 Comprimidos");
+ produto.setFabricante(fabricante);
+ produto.setPreco(new BigDecimal("13.70"));
+ produto.setQuantidade(new Short("7"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtoDAO.salvar(produto);
+
+ System.out.println("Produto salvo com sucesso");
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java
new file mode 100644
index 0000000..c567ec8
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java
@@ -0,0 +1,47 @@
+package br.pro.delfino.drogaria.dao;
+
+import org.apache.shiro.crypto.hash.SimpleHash;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+public class UsuarioDAOTest {
+ @Test
+ @Ignore
+ public void salvar(){
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ Pessoa pessoa = pessoaDAO.buscar(3L);
+
+ System.out.println("Pessoa Encontrada");
+ System.out.println("Nome: " + pessoa.getNome());
+ System.out.println("CPF: " + pessoa.getCpf());
+
+ Usuario usuario = new Usuario();
+ usuario.setAtivo(true);
+ usuario.setPessoa(pessoa);
+ usuario.setSenhaSemCriptografia("q1w2e3r4");
+
+ SimpleHash hash = new SimpleHash("md5", usuario.getSenhaSemCriptografia());
+ usuario.setSenha(hash.toHex());
+
+ usuario.setTipo('B');
+
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioDAO.salvar(usuario);
+
+ System.out.println("Usuário salvo com sucesso.");
+ }
+
+ @Test
+ public void autenticar(){
+ String cpf = "999.999.999-99";
+ String senha = "12345678";
+
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ Usuario usuario = usuarioDAO.autenticar(cpf, senha);
+
+ System.out.println("Usuário autentica: " + usuario);
+ }
+}
diff --git a/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java
new file mode 100644
index 0000000..75776e0
--- /dev/null
+++ b/282_Jelastic_Criacao_Banco_Dados/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.util;
+
+import org.hibernate.Session;
+import org.junit.Test;
+
+public class HibernateUtilTest {
+ @Test
+ public void conectar(){
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ sessao.close();
+ HibernateUtil.getFabricaDeSessoes().close();
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/.tern-project b/284_Autenticacao_ManagedBean_Parte2/Drogaria/.tern-project
new file mode 100644
index 0000000..b6f48dd
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/.tern-project
@@ -0,0 +1 @@
+{"ide":{},"libs":["ecma5","browser"],"plugins":{"guess-types":{},"angular":{}}}
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/pom.xml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/pom.xml
new file mode 100644
index 0000000..39b1e60
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/pom.xml
@@ -0,0 +1,132 @@
+
+ 4.0.0
+ br.pro.delfino.drogaria
+ Drogaria
+ 1.0
+ war
+
+
+
+ UTF-8
+
+
+
+
+
+ Drogaria
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+
+
+ prime-repo
+ PrimeFaces Maven Repository
+ http://repository.primefaces.org
+ default
+
+
+
+
+
+
+
+ org.hibernate
+ hibernate-core
+ 4.3.11.Final
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.36
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+ org.glassfish
+ javax.faces
+ 2.2.12
+
+
+
+
+ org.primefaces
+ primefaces
+ 5.2
+
+
+
+
+ org.primefaces.themes
+ all-themes
+ 1.0.10
+
+
+
+
+ org.omnifaces
+ omnifaces
+ 1.11
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet
+ 2.22.1
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.4
+
+
+
+
+ net.sf.jasperreports
+ jasperreports
+ 6.1.1
+
+
+
+
+ org.apache.shiro
+ shiro-core
+ 1.2.4
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
new file mode 100644
index 0000000..7e86b0d
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
@@ -0,0 +1,60 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.SessionScoped;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.UsuarioDAO;
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@ManagedBean
+@SessionScoped
+public class AutenticacaoBean {
+ private Usuario usuario;
+ private Usuario usuarioLogado;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ public Usuario getUsuarioLogado() {
+ return usuarioLogado;
+ }
+
+ public void setUsuarioLogado(Usuario usuarioLogado) {
+ this.usuarioLogado = usuarioLogado;
+ }
+
+ @PostConstruct
+ public void iniciar() {
+ usuario = new Usuario();
+ usuario.setPessoa(new Pessoa());
+ }
+
+ public void autenticar() {
+ try {
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioLogado = usuarioDAO.autenticar(usuario.getPessoa().getCpf(), usuario.getSenha());
+
+ if(usuarioLogado == null){
+ Messages.addGlobalError("CPF e/ou senha incorretos");
+ return;
+ }
+
+ Faces.redirect("./pages/principal.xhtml");
+ } catch (IOException erro) {
+ erro.printStackTrace();
+ Messages.addGlobalError(erro.getMessage());
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
new file mode 100644
index 0000000..4b03075
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
@@ -0,0 +1,119 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class CidadeBean implements Serializable {
+ private Cidade cidade;
+ private List cidades;
+ private List estados;
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar listar as cidades");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao gerar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.merge(cidade);
+
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.excluir(cidade);
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade removida com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover a cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento){
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar uma cidade");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
new file mode 100644
index 0000000..c96b115
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
@@ -0,0 +1,91 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ClienteBean implements Serializable {
+ private Cliente cliente;
+
+ private List clientes;
+ private List pessoas;
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listar("dataCadastro");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os clientes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cliente = new Cliente();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo cliente");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clienteDAO.merge(cliente);
+
+ cliente = new Cliente();
+
+ clientes = clienteDAO.listar("dataCadastro");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Cliente salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o cliente");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
new file mode 100644
index 0000000..b4921fe
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
@@ -0,0 +1,88 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class EstadoBean implements Serializable {
+ private Estado estado;
+ private List estados;
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os estados");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ estado = new Estado();
+ }
+
+ public void salvar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.merge(estado);
+
+ estado = new Estado();
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.excluir(estado);
+
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
new file mode 100644
index 0000000..7fddf7d
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
@@ -0,0 +1,116 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+
+import org.omnifaces.util.Messages;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class FabricanteBean implements Serializable {
+ private Fabricante fabricante;
+ private List fabricantes;
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os fabricantes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ fabricante = new Fabricante();
+ }
+
+ public void salvar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+
+ Gson gson = new Gson();
+
+ String json = gson.toJson(fabricante);
+ caminho.request().post(Entity.json(json));
+
+ fabricante = new Fabricante();
+
+ json = caminho.request().get(String.class);
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+
+ Client cliente = ClientBuilder.newClient();
+
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ WebTarget caminhoExcluir = caminho.path("{codigo}").resolveTemplate("codigo", fabricante.getCodigo());
+
+ caminhoExcluir.request().delete();
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
new file mode 100644
index 0000000..a042b04
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
@@ -0,0 +1,89 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.HistoricoDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Historico;
+import br.pro.delfino.drogaria.domain.Produto;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class HistoricoBean implements Serializable {
+ private Produto produto;
+ private Boolean exibePainelDados;
+
+ private Historico historico;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Boolean getExibePainelDados() {
+ return exibePainelDados;
+ }
+
+ public void setExibePainelDados(Boolean exibePainelDados) {
+ this.exibePainelDados = exibePainelDados;
+ }
+
+ public Historico getHistorico() {
+ return historico;
+ }
+
+ public void setHistorico(Historico historico) {
+ this.historico = historico;
+ }
+
+ @PostConstruct
+ public void novo() {
+ historico = new Historico();
+ produto = new Produto();
+ exibePainelDados = false;
+ }
+
+ public void buscar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto resultado = produtoDAO.buscar(produto.getCodigo());
+
+ if (resultado == null) {
+ exibePainelDados = false;
+ Messages.addGlobalWarn("Não existe produto cadastrado para o código informado");
+ } else {
+ exibePainelDados = true;
+ produto = resultado;
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar buscar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ historico.setHorario(new Date());
+ historico.setProduto(produto);
+
+ HistoricoDAO historicoDAO = new HistoricoDAO();
+ historicoDAO.salvar(historico);
+
+ Messages.addGlobalInfo("Histórico salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o histórico");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
new file mode 100644
index 0000000..eb963a8
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.RequestScoped;
+
+import org.primefaces.model.DefaultStreamedContent;
+import org.primefaces.model.StreamedContent;
+
+@ManagedBean
+@RequestScoped
+public class ImagemBean {
+ @ManagedProperty("#{param.caminho}")
+ private String caminho;
+
+ private StreamedContent foto;
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+
+ public StreamedContent getFoto() throws IOException {
+ if(caminho == null || caminho.isEmpty()){
+ Path path = Paths.get("C:/Programação Web com Java/Uploads/branco.png");
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }else{
+ Path path = Paths.get(caminho);
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }
+ return foto;
+ }
+
+ public void setFoto(StreamedContent foto) {
+ this.foto = foto;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
new file mode 100644
index 0000000..931edf7
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
@@ -0,0 +1,156 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class PessoaBean implements Serializable {
+ private Pessoa pessoa;
+ private List pessoas;
+
+ private Estado estado;
+ private List estados;
+
+ private List cidades;
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar as pessoas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar uma nova pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try{
+ pessoa = (Pessoa) evento.getComponent().getAttributes().get("pessoaSelecionada");
+
+ estado = pessoa.getCidade().getEstado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar selecionar uma pessoa");
+ }
+ }
+
+ public void salvar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoaDAO.merge(pessoa);
+
+ pessoas = pessoaDAO.listar("nome");
+
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+
+ Messages.addGlobalInfo("Pessoa salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+
+ }
+
+ public void popular() {
+ try {
+ if (estado != null) {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ } else {
+ cidades = new ArrayList<>();
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar filtrar as cidades");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
new file mode 100644
index 0000000..e48e0d1
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
@@ -0,0 +1,196 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+import org.primefaces.component.datatable.DataTable;
+import org.primefaces.event.FileUploadEvent;
+import org.primefaces.model.UploadedFile;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperPrintManager;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ProdutoBean implements Serializable {
+ private Produto produto;
+ private List produtos;
+ private List fabricantes;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os produtos");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar um novo produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+ produto.setCaminho("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar um produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if (produto.getCaminho() == null) {
+ Messages.addGlobalError("O campo foto é obrigatório");
+ return;
+ }
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto produtoRetorno = produtoDAO.merge(produto);
+
+ Path origem = Paths.get(produto.getCaminho());
+ Path destino = Paths.get("C:/Programação Web com Java/Uploads/" + produtoRetorno.getCodigo() + ".png");
+ Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
+
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto salvo com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtoDAO.excluir(produto);
+
+ Path arquivo = Paths.get("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+ Files.deleteIfExists(arquivo);
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto removido com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void upload(FileUploadEvent evento) {
+ try {
+ UploadedFile arquivoUpload = evento.getFile();
+ Path arquivoTemp = Files.createTempFile(null, null);
+ Files.copy(arquivoUpload.getInputstream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
+ produto.setCaminho(arquivoTemp.toString());
+
+ Messages.addGlobalInfo("Upload realizado com sucesso");
+ } catch (IOException erro) {
+ Messages.addGlobalInfo("Ocorreu um erro ao tentar realizar o upload de arquivo");
+ erro.printStackTrace();
+ }
+ }
+
+ public void imprimir() {
+ try {
+ DataTable tabela = (DataTable) Faces.getViewRoot().findComponent("formListagem:tabela");
+ Map filtros = tabela.getFilters();
+
+ String proDescricao = (String) filtros.get("descricao");
+ String fabDescricao = (String) filtros.get("fabricante.descricao");
+
+ String caminho = Faces.getRealPath("/reports/produtos.jasper");
+
+ Map parametros = new HashMap<>();
+ if (proDescricao == null) {
+ parametros.put("PRODUTO_DESCRICAO", "%%");
+ } else {
+ parametros.put("PRODUTO_DESCRICAO", "%" + proDescricao + "%");
+ }
+ if (fabDescricao == null) {
+ parametros.put("FABRICANTE_DESCRICAO", "%%");
+ } else {
+ parametros.put("FABRICANTE_DESCRICAO", "%" + fabDescricao + "%");
+ }
+
+ Connection conexao = HibernateUtil.getConexao();
+
+ JasperPrint relatorio = JasperFillManager.fillReport(caminho, parametros, conexao);
+
+ JasperPrintManager.printReport(relatorio, true);
+ } catch (JRException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar o relatório");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
new file mode 100644
index 0000000..f526df8
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
@@ -0,0 +1,90 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.dao.UsuarioDAO;
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class UsuarioBean implements Serializable {
+ private Usuario usuario;
+
+ private List pessoas;
+ private List usuarios;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public List getUsuarios() {
+ return usuarios;
+ }
+
+ public void setUsuarios(List usuarios) {
+ this.usuarios = usuarios;
+ }
+
+ @PostConstruct
+ public void listar(){
+ try{
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarios = usuarioDAO.listar("tipo");
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os usuários");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ usuario = new Usuario();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo usuário");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioDAO.merge(usuario);
+
+ usuario = new Usuario();
+ usuarios = usuarioDAO.listar("tipo");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Usuário salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o usuário");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
new file mode 100644
index 0000000..ada8ff2
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
@@ -0,0 +1,186 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.FuncionarioDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.dao.VendaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class VendaBean implements Serializable {
+ private Venda venda;
+
+ private List produtos;
+ private List itensVenda;
+ private List clientes;
+ private List funcionarios;
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getItensVenda() {
+ return itensVenda;
+ }
+
+ public void setItensVenda(List itensVenda) {
+ this.itensVenda = itensVenda;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getFuncionarios() {
+ return funcionarios;
+ }
+
+ public void setFuncionarios(List funcionarios) {
+ this.funcionarios = funcionarios;
+ }
+
+ @PostConstruct
+ public void novo() {
+ try {
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar carregar a tela de vendas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void adicionar(ActionEvent evento) {
+ Produto produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(produto)) {
+ achou = posicao;
+ }
+ }
+
+ if (achou < 0) {
+ ItemVenda itemVenda = new ItemVenda();
+ itemVenda.setPrecoParcial(produto.getPreco());
+ itemVenda.setProduto(produto);
+ itemVenda.setQuantidade(new Short("1"));
+
+ itensVenda.add(itemVenda);
+ } else {
+ ItemVenda itemVenda = itensVenda.get(achou);
+ itemVenda.setQuantidade(new Short(itemVenda.getQuantidade() + 1 + ""));
+ itemVenda.setPrecoParcial(produto.getPreco().multiply(new BigDecimal(itemVenda.getQuantidade())));
+ }
+
+ calcular();
+ }
+
+ public void remover(ActionEvent evento) {
+ ItemVenda itemVenda = (ItemVenda) evento.getComponent().getAttributes().get("itemSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(itemVenda.getProduto())) {
+ achou = posicao;
+ }
+ }
+
+ if (achou > -1) {
+ itensVenda.remove(achou);
+ }
+
+ calcular();
+ }
+
+ public void calcular() {
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ venda.setPrecoTotal(venda.getPrecoTotal().add(itemVenda.getPrecoParcial()));
+ }
+ }
+
+ public void finalizar() {
+ try {
+ venda.setHorario(new Date());
+ venda.setCliente(null);
+ venda.setFuncionario(null);
+
+ FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
+ funcionarios = funcionarioDAO.listarOrdenado();
+
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listarOrdenado();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar finalizar a venda");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if(venda.getPrecoTotal().signum() == 0){
+ Messages.addGlobalError("Informe pelo menos um item para a venda");
+ return;
+ }
+
+ VendaDAO vendaDAO = new VendaDAO();
+ vendaDAO.salvar(venda, itensVenda);
+
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+
+ Messages.addGlobalInfo("Venda realizada com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a venda");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
new file mode 100644
index 0000000..8a5d259
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.converter;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+
+@FacesConverter("upperCaseConverter")
+public class UpperCaseConverter implements Converter {
+
+ @Override
+ public Object getAsObject(FacesContext context, UIComponent component, String value) {
+ if (value == null) {
+ return null;
+ } else {
+ return value.toUpperCase();
+ }
+ }
+
+ @Override
+ public String getAsString(FacesContext context, UIComponent component, Object value) {
+ if (value == null) {
+ return "";
+ } else {
+ return value.toString();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
new file mode 100644
index 0000000..fd8acd7
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
@@ -0,0 +1,26 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.Date;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Caixa;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CaixaDAO extends GenericDAO {
+ public Caixa buscar(Date dataAbertura) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Caixa.class);
+ consulta.add(Restrictions.eq("dataAbertura", dataAbertura));
+ Caixa resultado = (Caixa) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
new file mode 100644
index 0000000..e685e93
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CidadeDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List buscarPorEstado(Long estadoCodigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cidade.class);
+ consulta.add(Restrictions.eq("estado.codigo", estadoCodigo));
+ consulta.addOrder(Order.asc("nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
new file mode 100644
index 0000000..e9796b5
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class ClienteDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cliente.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
new file mode 100644
index 0000000..32b4a79
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class EstadoDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
new file mode 100644
index 0000000..8b7f946
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+public class FabricanteDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
new file mode 100644
index 0000000..2b3114d
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class FuncionarioDAO extends GenericDAO{
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Funcionario.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
new file mode 100644
index 0000000..b505cd3
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
@@ -0,0 +1,140 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class GenericDAO {
+ private Class classe;
+
+ @SuppressWarnings("unchecked")
+ public GenericDAO() {
+ this.classe = (Class) ((ParameterizedType) getClass().getGenericSuperclass())
+ .getActualTypeArguments()[0];
+ }
+
+ public void salvar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.save(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar(String campoOrdenacao) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.addOrder(Order.asc(campoOrdenacao));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade buscar(Long codigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.add(Restrictions.idEq(codigo));
+ Entidade resultado = (Entidade) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void excluir(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.delete(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void editar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.update(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade merge(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ Entidade retorno = (Entidade) sessao.merge(entidade);
+ transacao.commit();
+ return retorno;
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
new file mode 100644
index 0000000..7b30017
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Historico;
+
+public class HistoricoDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
new file mode 100644
index 0000000..b6560e2
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Movimentacao;
+
+public class MovimentacaoDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
new file mode 100644
index 0000000..bbd116b
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+public class PessoaDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
new file mode 100644
index 0000000..4c1e751
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Produto;
+
+public class ProdutoDAO extends GenericDAO {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
new file mode 100644
index 0000000..b4bf524
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.dao;
+
+import org.apache.shiro.crypto.hash.SimpleHash;
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Usuario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class UsuarioDAO extends GenericDAO {
+ public Usuario autenticar(String cpf, String senha) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+
+ try{
+ Criteria consulta = sessao.createCriteria(Usuario.class);
+ consulta.createAlias("pessoa", "p");
+
+ consulta.add(Restrictions.eq("p.cpf", cpf));
+
+ SimpleHash hash = new SimpleHash("md5", senha);
+ consulta.add(Restrictions.eq("senha", hash.toHex()));
+
+ Usuario resultado = (Usuario) consulta.uniqueResult();
+
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
new file mode 100644
index 0000000..3428939
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class VendaDAO extends GenericDAO {
+ public void salvar(Venda venda, List itensVenda) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+
+ sessao.save(venda);
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ itemVenda.setVenda(venda);
+
+ sessao.save(itemVenda);
+
+ Produto produto = itemVenda.getProduto();
+ int quantidade = produto.getQuantidade() - itemVenda.getQuantidade();
+ if (quantidade >= 0) {
+ produto.setQuantidade(new Short(quantidade + ""));
+ sessao.update(produto);
+ } else {
+ throw new RuntimeException("Quantidade insuficiente em estoque");
+ }
+ }
+
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
new file mode 100644
index 0000000..43b07c4
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Caixa extends GenericDomain {
+ @Column(nullable = false, unique = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataAbertura;
+
+ @Column(nullable = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataFechamento;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valorAbertura;
+
+ public Date getDataAbertura() {
+ return dataAbertura;
+ }
+
+ public void setDataAbertura(Date dataAbertura) {
+ this.dataAbertura = dataAbertura;
+ }
+
+ public Date getDataFechamento() {
+ return dataFechamento;
+ }
+
+ public void setDataFechamento(Date dataFechamento) {
+ this.dataFechamento = dataFechamento;
+ }
+
+ public BigDecimal getValorAbertura() {
+ return valorAbertura;
+ }
+
+ public void setValorAbertura(BigDecimal valorAbertura) {
+ this.valorAbertura = valorAbertura;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
new file mode 100644
index 0000000..cf94ede
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cidade extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Estado estado;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
new file mode 100644
index 0000000..6ace9b9
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cliente extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataCadastro;
+
+ @Column(nullable = false)
+ private Boolean liberado;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public Date getDataCadastro() {
+ return dataCadastro;
+ }
+
+ public void setDataCadastro(Date dataCadastro) {
+ this.dataCadastro = dataCadastro;
+ }
+
+ public Boolean getLiberado() {
+ return liberado;
+ }
+
+ public void setLiberado(Boolean liberado) {
+ this.liberado = liberado;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
new file mode 100644
index 0000000..1c06b98
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
@@ -0,0 +1,30 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Estado extends GenericDomain {
+ @Column(length = 2, nullable = false)
+ private String sigla;
+
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ public String getSigla() {
+ return sigla;
+ }
+
+ public void setSigla(String sigla) {
+ this.sigla = sigla;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
new file mode 100644
index 0000000..02eab8c
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
@@ -0,0 +1,19 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Fabricante extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String descricao;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
new file mode 100644
index 0000000..dec9378
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Funcionario extends GenericDomain {
+ @Column(length = 15, nullable = false)
+ private String carteiraTrabalho;
+
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataAdmissao;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getCarteiraTrabalho() {
+ return carteiraTrabalho;
+ }
+
+ public void setCarteiraTrabalho(String carteiraTrabalho) {
+ this.carteiraTrabalho = carteiraTrabalho;
+ }
+
+ public Date getDataAdmissao() {
+ return dataAdmissao;
+ }
+
+ public void setDataAdmissao(Date dataAdmissao) {
+ this.dataAdmissao = dataAdmissao;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
new file mode 100644
index 0000000..f37efea
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
@@ -0,0 +1,54 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+@SuppressWarnings("serial")
+@MappedSuperclass
+public class GenericDomain implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long codigo;
+
+ public Long getCodigo() {
+ return codigo;
+ }
+
+ public void setCodigo(Long codigo) {
+ this.codigo = codigo;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s[codigo=%d]", getClass().getSimpleName(), getCodigo());
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ GenericDomain other = (GenericDomain) obj;
+ if (codigo == null) {
+ if (other.codigo != null)
+ return false;
+ } else if (!codigo.equals(other.codigo))
+ return false;
+ return true;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
new file mode 100644
index 0000000..dafdaeb
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Historico extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, length = 500)
+ private String observacoes;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public String getObservacoes() {
+ return observacoes;
+ }
+
+ public void setObservacoes(String observacoes) {
+ this.observacoes = observacoes;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
new file mode 100644
index 0000000..590ab26
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
@@ -0,0 +1,58 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class ItemVenda extends GenericDomain {
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoParcial;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Venda venda;
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPrecoParcial() {
+ return precoParcial;
+ }
+
+ public void setPrecoParcial(BigDecimal precoParcial) {
+ this.precoParcial = precoParcial;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
new file mode 100644
index 0000000..c3d6319
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
@@ -0,0 +1,50 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Movimentacao extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valor;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Caixa caixa;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getValor() {
+ return valor;
+ }
+
+ public void setValor(BigDecimal valor) {
+ this.valor = valor;
+ }
+
+ public Caixa getCaixa() {
+ return caixa;
+ }
+
+ public void setCaixa(Caixa caixa) {
+ this.caixa = caixa;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
new file mode 100644
index 0000000..f354001
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
@@ -0,0 +1,143 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Pessoa extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @Column(length = 14, nullable = false)
+ private String cpf;
+
+ @Column(length = 12, nullable = false)
+ private String rg;
+
+ @Column(length = 100, nullable = false)
+ private String rua;
+
+ @Column(nullable = false)
+ private Short numero;
+
+ @Column(length = 30, nullable = false)
+ private String bairro;
+
+ @Column(length = 10, nullable = false)
+ private String cep;
+
+ @Column(length = 10)
+ private String complemento;
+
+ @Column(length = 13, nullable = false)
+ private String telefone;
+
+ @Column(length = 14, nullable = false)
+ private String celular;
+
+ @Column(length = 100, nullable = false)
+ private String email;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Cidade cidade;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public String getCpf() {
+ return cpf;
+ }
+
+ public void setCpf(String cpf) {
+ this.cpf = cpf;
+ }
+
+ public String getRg() {
+ return rg;
+ }
+
+ public void setRg(String rg) {
+ this.rg = rg;
+ }
+
+ public String getRua() {
+ return rua;
+ }
+
+ public void setRua(String rua) {
+ this.rua = rua;
+ }
+
+ public Short getNumero() {
+ return numero;
+ }
+
+ public void setNumero(Short numero) {
+ this.numero = numero;
+ }
+
+ public String getBairro() {
+ return bairro;
+ }
+
+ public void setBairro(String bairro) {
+ this.bairro = bairro;
+ }
+
+ public String getCep() {
+ return cep;
+ }
+
+ public void setCep(String cep) {
+ this.cep = cep;
+ }
+
+ public String getComplemento() {
+ return complemento;
+ }
+
+ public void setComplemento(String complemento) {
+ this.complemento = complemento;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public String getCelular() {
+ return celular;
+ }
+
+ public void setCelular(String celular) {
+ this.celular = celular;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
new file mode 100644
index 0000000..82049b0
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
@@ -0,0 +1,69 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Produto extends GenericDomain {
+ @Column(length = 80, nullable = false)
+ private String descricao;
+
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 6, scale = 2)
+ private BigDecimal preco;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Fabricante fabricante;
+
+ @Transient
+ private String caminho;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPreco() {
+ return preco;
+ }
+
+ public void setPreco(BigDecimal preco) {
+ this.preco = preco;
+ }
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
new file mode 100644
index 0000000..ae51941
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
@@ -0,0 +1,93 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Usuario extends GenericDomain {
+ @Column(length = 32, nullable = false)
+ private String senha;
+
+ @Transient
+ private String senhaSemCriptografia;
+
+ @Column(nullable = false)
+ private Character tipo;
+
+ @Column(nullable = false)
+ private Boolean ativo;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getSenha() {
+ return senha;
+ }
+
+ public void setSenha(String senha) {
+ this.senha = senha;
+ }
+
+ public String getSenhaSemCriptografia() {
+ return senhaSemCriptografia;
+ }
+
+ public void setSenhaSemCriptografia(String senhaSemCriptografia) {
+ this.senhaSemCriptografia = senhaSemCriptografia;
+ }
+
+ public Character getTipo() {
+ return tipo;
+ }
+
+ @Transient
+ public String getTipoFormatado() {
+ String tipoFormatado = null;
+
+ if (tipo == 'A') {
+ tipoFormatado = "Administrador";
+ } else if (tipo == 'B') {
+ tipoFormatado = "Balconista";
+ } else if (tipo == 'G') {
+ tipoFormatado = "Gerente";
+ }
+
+ return tipoFormatado;
+ }
+
+ public void setTipo(Character tipo) {
+ this.tipo = tipo;
+ }
+
+ public Boolean getAtivo() {
+ return ativo;
+ }
+
+ @Transient
+ public String getAtivoFormatado(){
+ String ativoFormatado = "Não";
+
+ if(ativo){
+ ativoFormatado = "Sim";
+ }
+
+ return ativoFormatado;
+ }
+
+ public void setAtivo(Boolean ativo) {
+ this.ativo = ativo;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
new file mode 100644
index 0000000..3f4c226
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
@@ -0,0 +1,61 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Venda extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoTotal;
+
+ @ManyToOne
+ private Cliente cliente;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Funcionario funcionario;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getPrecoTotal() {
+ return precoTotal;
+ }
+
+ public void setPrecoTotal(BigDecimal precoTotal) {
+ this.precoTotal = precoTotal;
+ }
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public Funcionario getFuncionario() {
+ return funcionario;
+ }
+
+ public void setFuncionario(Funcionario funcionario) {
+ this.funcionario = funcionario;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
new file mode 100644
index 0000000..fbb1f2b
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.service;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+// http://localhost:8080/Drogaria/rest/drogaria
+@Path("drogaria")
+public class DrogariaService {
+ @GET
+ public String exibir(){
+ return "Curso de Java";
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
new file mode 100644
index 0000000..1dbc0d1
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
@@ -0,0 +1,85 @@
+package br.pro.delfino.drogaria.service;
+
+import java.util.List;
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@Path("fabricante")
+public class FabricanteService {
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @GET
+ public String listar() {
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ List fabricantes = fabricanteDAO.listar("descricao");
+
+ Gson gson = new Gson();
+ String json = gson.toJson(fabricantes);
+
+ return json;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/{codigo}
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/10
+ @GET
+ @Path("{codigo}")
+ public String buscar(@PathParam("codigo") Long codigo) {
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+
+ Gson gson = new Gson();
+ String json = gson.toJson(fabricante);
+
+ return json;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @POST
+ public String salvar(String json) {
+ Gson gson = new Gson();
+ Fabricante fabricante = gson.fromJson(json, Fabricante.class);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.merge(fabricante);
+
+ String jsonSaida = gson.toJson(fabricante);
+ return jsonSaida;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @PUT
+ public String editar(String json) {
+ Gson gson = new Gson();
+ Fabricante fabricante = gson.fromJson(json, Fabricante.class);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.editar(fabricante);
+
+ String jsonSaida = gson.toJson(fabricante);
+ return jsonSaida;
+ }
+
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/{codigo}
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante/10
+ @DELETE
+ @Path("{codigo}")
+ public String excluir(@PathParam("codigo") Long codigo){
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+ fabricanteDAO.excluir(fabricante);
+
+ Gson gson = new Gson();
+ String saida = gson.toJson(fabricante);
+ return saida;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java
new file mode 100644
index 0000000..4dfdf40
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/service/ProdutoService.java
@@ -0,0 +1,39 @@
+package br.pro.delfino.drogaria.service;
+
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Produto;
+
+// http://127.0.0.1:8080/Drogaria/rest/produto
+@Path("produto")
+public class ProdutoService {
+ @GET
+ public String listar(){
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ List produtos = produtoDAO.listar("descricao");
+
+ Gson gson = new Gson();
+ String json = gson.toJson(produtos);
+
+ return json;
+ }
+
+ @POST
+ public String salvar (String json){
+ Gson gson = new Gson();
+ Produto produto = gson.fromJson(json, Produto.class);
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produto = produtoDAO.merge(produto);
+
+ String jsonSaida = gson.toJson(produto);
+ return jsonSaida;
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java
new file mode 100644
index 0000000..2c997a9
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/DrogariaResourceConfig.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.util;
+
+import javax.ws.rs.ApplicationPath;
+
+import org.glassfish.jersey.server.ResourceConfig;
+
+//http://localhost:8080/Drogaria/rest
+@ApplicationPath("rest")
+public class DrogariaResourceConfig extends ResourceConfig {
+ public DrogariaResourceConfig(){
+ packages("br.pro.delfino.drogaria.service");
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java
new file mode 100644
index 0000000..71869d7
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateContexto.java
@@ -0,0 +1,18 @@
+package br.pro.delfino.drogaria.util;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class HibernateContexto implements ServletContextListener {
+
+ @Override
+ public void contextDestroyed(ServletContextEvent event) {
+ HibernateUtil.getFabricaDeSessoes().close();
+ }
+
+ @Override
+ public void contextInitialized(ServletContextEvent event) {
+ HibernateUtil.getFabricaDeSessoes();
+ }
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java
new file mode 100644
index 0000000..693551b
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/java/br/pro/delfino/drogaria/util/HibernateUtil.java
@@ -0,0 +1,47 @@
+package br.pro.delfino.drogaria.util;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.jdbc.ReturningWork;
+import org.hibernate.service.ServiceRegistry;
+
+public class HibernateUtil {
+ private static SessionFactory fabricaDeSessoes = criarFabricaDeSessoes();
+
+ public static SessionFactory getFabricaDeSessoes() {
+ return fabricaDeSessoes;
+ }
+
+ public static Connection getConexao(){
+ Session sessao = fabricaDeSessoes.openSession();
+
+ Connection conexao = sessao.doReturningWork(new ReturningWork() {
+ @Override
+ public Connection execute(Connection conn) throws SQLException {
+ return conn;
+ }
+ });
+
+ return conexao;
+ }
+
+ private static SessionFactory criarFabricaDeSessoes() {
+ try {
+ Configuration configuracao = new Configuration().configure();
+
+ ServiceRegistry registro = new StandardServiceRegistryBuilder().applySettings(configuracao.getProperties()).build();
+
+ SessionFactory fabrica = configuracao.buildSessionFactory(registro);
+
+ return fabrica;
+ } catch (Throwable ex) {
+ System.err.println("A fábrica de sessões não pode ser criada." + ex);
+ throw new ExceptionInInitializerError(ex);
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/resources/hibernate.cfg.xml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/resources/hibernate.cfg.xml
new file mode 100644
index 0000000..65f392e
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/resources/hibernate.cfg.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/drogaria
+ root
+ q1w2e3r4
+
+
+ 1
+
+
+ org.hibernate.dialect.MySQL5InnoDBDialect
+
+
+ thread
+
+
+ org.hibernate.cache.internal.NoCacheProvider
+
+
+ true
+
+
+ update
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml
new file mode 100644
index 0000000..9d6938c
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/springsecurity.taglib.xml
@@ -0,0 +1,32 @@
+
+
+
+ http://www.springframework.org/security/tags
+
+ authorize
+ org.springframework.faces.security.FaceletsAuthorizeTagHandler
+
+
+ areAllGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areAllGranted(java.lang.String)
+
+
+ areAnyGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areAnyGranted(java.lang.String)
+
+
+ areNotGranted
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean areNotGranted(java.lang.String)
+
+
+ isAllowed
+ org.springframework.faces.security.FaceletsAuthorizeTagUtils
+ boolean isAllowed(java.lang.String,
+ java.lang.String)
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/web.xml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..6b0cf5d
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,48 @@
+
+
+
+
+ Drogaria
+
+
+
+ pages/principal.xhtml
+
+
+
+
+ javax.faces.PROJECT_STAGE
+ Development
+
+
+
+
+ primefaces.THEME
+ blitzer
+
+
+
+
+ primefaces.UPLOADER
+ native
+
+
+
+
+ Faces Servlet
+ javax.faces.webapp.FacesServlet
+ 1
+
+
+ Faces Servlet
+ *.xhtml
+
+
+
+
+ br.pro.delfino.drogaria.util.HibernateContexto
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/autenticacao.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/autenticacao.xhtml
new file mode 100644
index 0000000..e41a833
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/autenticacao.xhtml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ Autenticação
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/cidades.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/cidades.xhtml
new file mode 100644
index 0000000..504f3a3
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/cidades.xhtml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/clientes.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/clientes.xhtml
new file mode 100644
index 0000000..4e3cfb5
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/clientes.xhtml
@@ -0,0 +1,94 @@
+
+
+
+
+
+ Clientes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/estados.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/estados.xhtml
new file mode 100644
index 0000000..1d441f1
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/estados.xhtml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/fabricantes.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/fabricantes.xhtml
new file mode 100644
index 0000000..3904db0
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/fabricantes.xhtml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/historico.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/historico.xhtml
new file mode 100644
index 0000000..184a864
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/historico.xhtml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ Histórico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/pessoas.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/pessoas.xhtml
new file mode 100644
index 0000000..7d68e8c
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/pessoas.xhtml
@@ -0,0 +1,162 @@
+
+
+
+
+
+ Pessoas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/principal.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/principal.xhtml
new file mode 100644
index 0000000..726842c
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/principal.xhtml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/produtos.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/produtos.xhtml
new file mode 100644
index 0000000..56c5db4
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/produtos.xhtml
@@ -0,0 +1,141 @@
+
+
+
+
+
+ Produtos
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testeJSF.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testeJSF.xhtml
new file mode 100644
index 0000000..c20659b
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testeJSF.xhtml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Teste JSF
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml
new file mode 100644
index 0000000..6c4d434
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/testePrimeFaces.xhtml
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Teste PrimeFaces
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/usuarios.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/usuarios.xhtml
new file mode 100644
index 0000000..45dd761
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/usuarios.xhtml
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Usuários
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/vendas.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/vendas.xhtml
new file mode 100644
index 0000000..4485892
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/pages/vendas.xhtml
@@ -0,0 +1,156 @@
+
+
+
+
+
+ Vendas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jasper b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jasper
new file mode 100644
index 0000000..96a1278
Binary files /dev/null and b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jasper differ
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jrxml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jrxml
new file mode 100644
index 0000000..76da981
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/estados.jrxml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jasper b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jasper
new file mode 100644
index 0000000..ad55e5f
Binary files /dev/null and b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jasper differ
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jrxml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jrxml
new file mode 100644
index 0000000..800aed0
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/reports/produtos.jrxml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/css/estilos.css b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/css/estilos.css
new file mode 100644
index 0000000..4acdd7f
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/css/estilos.css
@@ -0,0 +1,19 @@
+@CHARSET "UTF-8";
+
+.imagemCentralizada {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.divTopo {
+ padding-bottom: 5px;
+}
+
+.divCabecalho {
+ padding-bottom: 5px;
+}
+
+.ui-widget, .ui-widget .ui-widget {
+ font-size: 100% !important;
+}
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/images/banner.jpg b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/images/banner.jpg
new file mode 100644
index 0000000..f58cc21
Binary files /dev/null and b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/images/banner.jpg differ
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/js/scripts.js b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/js/scripts.js
new file mode 100644
index 0000000..e39ad9b
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/resources/js/scripts.js
@@ -0,0 +1,26 @@
+PrimeFaces.locales['pt_BR'] = {
+ closeText: 'Fechar',
+ prevText: 'Anterior',
+ nextText: 'Próximo',
+ currentText: 'Começo',
+ monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+ dayNamesMin: ['D','S','T','Q','Q','S','S'],
+ weekHeader: 'Semana',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: '',
+ timeOnlyTitle: 'Só Horas',
+ timeText: 'Tempo',
+ hourText: 'Hora',
+ minuteText: 'Minuto',
+ secondText: 'Segundo',
+ ampm: false,
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ allDayText : 'Todo o Dia'
+};
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/templates/modelo.xhtml b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/templates/modelo.xhtml
new file mode 100644
index 0000000..62d3d1c
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/main/webapp/templates/modelo.xhtml
@@ -0,0 +1,55 @@
+
+
+
+
+
+ SiGDro
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java
new file mode 100644
index 0000000..b5e6156
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CaixaDAOTest.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Caixa;
+
+public class CaixaDAOTest {
+ @Test
+ @Ignore
+ public void salvar() throws ParseException {
+ Caixa caixa = new Caixa();
+ caixa.setDataAbertura(new SimpleDateFormat("dd/MM/yyyy").parse("14/12/2015"));
+ caixa.setValorAbertura(new BigDecimal("100.00"));
+
+ CaixaDAO caixaDAO = new CaixaDAO();
+ caixaDAO.salvar(caixa);
+ }
+
+ @Test
+ @Ignore
+ public void buscar() throws ParseException {
+ CaixaDAO caixaDAO = new CaixaDAO();
+ Caixa caixa = caixaDAO.buscar(new SimpleDateFormat("dd/MM/yyyy").parse("13/12/2015"));
+ System.out.println(caixa);
+ Assert.assertNull(caixa);
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java
new file mode 100644
index 0000000..ec59599
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/CidadeDAOTest.java
@@ -0,0 +1,130 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class CidadeDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Long codigoEstado = 1L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+
+ Estado estado = estadoDAO.buscar(codigoEstado);
+
+ Cidade cidade = new Cidade();
+ cidade.setNome("Marília");
+ cidade.setEstado(estado);
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.salvar(cidade);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ List resultado = cidadeDAO.listar();
+
+ for (Cidade cidade : resultado) {
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ System.out.println();
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 7L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigo);
+
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ @Ignore
+ public void excluir(){
+ Long codigo = 7L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigo);
+
+ cidadeDAO.excluir(cidade);
+
+ System.out.println("Cidade Removida");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ @Ignore
+ public void editar(){
+ Long codigoCidade = 6L;
+ Long codigoEstado = 11L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigoEstado);
+
+ System.out.println("Código do Estado: " + estado.getCodigo());
+ System.out.println("Sigla do Estado: " + estado.getSigla());
+ System.out.println("Nome do Estado: " + estado.getNome());
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ Cidade cidade = cidadeDAO.buscar(codigoCidade);
+
+ System.out.println("Cidade A Ser Editada");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+
+ cidade.setNome("Guarapuava");
+ cidade.setEstado(estado);
+
+ cidadeDAO.editar(cidade);
+
+ System.out.println("Cidade Editada");
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ }
+
+ @Test
+ public void buscarPorEstado() {
+ Long estadoCodigo = 3L;
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ List resultado = cidadeDAO.buscarPorEstado(estadoCodigo);
+
+ for (Cidade cidade : resultado) {
+ System.out.println("Código da Cidade: " + cidade.getCodigo());
+ System.out.println("Nome da Cidade: " + cidade.getNome());
+ System.out.println("Código do Estado: " + cidade.getEstado().getCodigo());
+ System.out.println("Sigla do Estado: " + cidade.getEstado().getSigla());
+ System.out.println("Nome do Estado: " + cidade.getEstado().getNome());
+ System.out.println();
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java
new file mode 100644
index 0000000..4d557d9
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ClienteDAOTest.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+public class ClienteDAOTest {
+ @Test
+ @Ignore
+ public void salvar() throws ParseException {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ Pessoa pessoa = pessoaDAO.buscar(2L);
+
+ Cliente cliente = new Cliente();
+ cliente.setDataCadastro(new SimpleDateFormat("dd/MM/yyyy").parse("09/06/2015"));
+ cliente.setLiberado(false);
+ cliente.setPessoa(pessoa);
+
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clienteDAO.salvar(cliente);
+
+ System.out.println("Cliente salvo com sucesso.");
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java
new file mode 100644
index 0000000..f84a086
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/EstadoDAOTest.java
@@ -0,0 +1,88 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class EstadoDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Estado estado = new Estado();
+ estado.setNome("Rio Grande do Sul");
+ estado.setSigla("RS");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.salvar(estado);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ List resultado = estadoDAO.listar();
+
+ System.out.println("Total de Registros Encontrados: " + resultado.size());
+
+ for (Estado estado : resultado) {
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 3L;
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro encontrado:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void excluir(){
+ Long codigo = 1L;
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ estadoDAO.excluir(estado);
+ System.out.println("Registro removido:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void editar(){
+ Long codigo = 10L;
+ EstadoDAO estadoDAO = new EstadoDAO();
+ Estado estado = estadoDAO.buscar(codigo);
+
+ if(estado == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro editado - Antes:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+
+ estado.setNome("Santa Catarina");
+ estado.setSigla("SC");
+ estadoDAO.editar(estado);
+
+ System.out.println("Registro editado - Depois:");
+ System.out.println(estado.getCodigo() + " - " + estado.getSigla() + " - " + estado.getNome());
+ }
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java
new file mode 100644
index 0000000..56fb124
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FabricanteDAOTest.java
@@ -0,0 +1,63 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+public class FabricanteDAOTest {
+ @Test
+ @Ignore
+ public void salvar() {
+ Fabricante fabricante = new Fabricante();
+ fabricante.setDescricao("Aché");
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricanteDAO.salvar(fabricante);
+ }
+
+ @Test
+ @Ignore
+ public void listar() {
+ FabricanteDAO FabricanteDAO = new FabricanteDAO();
+ List resultado = FabricanteDAO.listar();
+
+ System.out.println("Total de Registros Encontrados: " + resultado.size());
+
+ for (Fabricante fabricante : resultado) {
+ System.out.println(fabricante.getCodigo() + " - " + fabricante.getDescricao());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void buscar(){
+ Long codigo = 3L;
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(codigo);
+
+ if(fabricante == null){
+ System.out.println("Nenhum registro encontrado");
+ }else{
+ System.out.println("Registro encontrado:");
+ System.out.println(fabricante.getCodigo() + " - " + fabricante.getDescricao());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void merge() {
+ //Fabricante fabricante = new Fabricante();
+ //fabricante.setDescricao("Fabricante A");
+ //FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ //fabricanteDAO.merge(fabricante);
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(5L);
+ fabricante.setDescricao("Fabricante B");
+ fabricanteDAO.merge(fabricante);
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java
new file mode 100644
index 0000000..06cfff7
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/FuncionarioDAOTest.java
@@ -0,0 +1,5 @@
+package br.pro.delfino.drogaria.dao;
+
+public class FuncionarioDAOTest {
+
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java
new file mode 100644
index 0000000..36f8563
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/ProdutoDAOTest.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.math.BigDecimal;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+import br.pro.delfino.drogaria.domain.Produto;
+
+public class ProdutoDAOTest {
+ @Test
+ @Ignore
+ public void salvar(){
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ Fabricante fabricante = fabricanteDAO.buscar(new Long("3"));
+
+ Produto produto = new Produto();
+ produto.setDescricao("Cataflan 50mg com 20 Comprimidos");
+ produto.setFabricante(fabricante);
+ produto.setPreco(new BigDecimal("13.70"));
+ produto.setQuantidade(new Short("7"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtoDAO.salvar(produto);
+
+ System.out.println("Produto salvo com sucesso");
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java
new file mode 100644
index 0000000..c567ec8
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/dao/UsuarioDAOTest.java
@@ -0,0 +1,47 @@
+package br.pro.delfino.drogaria.dao;
+
+import org.apache.shiro.crypto.hash.SimpleHash;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+public class UsuarioDAOTest {
+ @Test
+ @Ignore
+ public void salvar(){
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ Pessoa pessoa = pessoaDAO.buscar(3L);
+
+ System.out.println("Pessoa Encontrada");
+ System.out.println("Nome: " + pessoa.getNome());
+ System.out.println("CPF: " + pessoa.getCpf());
+
+ Usuario usuario = new Usuario();
+ usuario.setAtivo(true);
+ usuario.setPessoa(pessoa);
+ usuario.setSenhaSemCriptografia("q1w2e3r4");
+
+ SimpleHash hash = new SimpleHash("md5", usuario.getSenhaSemCriptografia());
+ usuario.setSenha(hash.toHex());
+
+ usuario.setTipo('B');
+
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioDAO.salvar(usuario);
+
+ System.out.println("Usuário salvo com sucesso.");
+ }
+
+ @Test
+ public void autenticar(){
+ String cpf = "999.999.999-99";
+ String senha = "12345678";
+
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ Usuario usuario = usuarioDAO.autenticar(cpf, senha);
+
+ System.out.println("Usuário autentica: " + usuario);
+ }
+}
diff --git a/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java
new file mode 100644
index 0000000..75776e0
--- /dev/null
+++ b/284_Autenticacao_ManagedBean_Parte2/Drogaria/src/test/java/br/pro/delfino/drogaria/util/HibernateUtilTest.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.util;
+
+import org.hibernate.Session;
+import org.junit.Test;
+
+public class HibernateUtilTest {
+ @Test
+ public void conectar(){
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ sessao.close();
+ HibernateUtil.getFabricaDeSessoes().close();
+ }
+}
diff --git a/285_ViewAction/Drogaria/.tern-project b/285_ViewAction/Drogaria/.tern-project
new file mode 100644
index 0000000..b6f48dd
--- /dev/null
+++ b/285_ViewAction/Drogaria/.tern-project
@@ -0,0 +1 @@
+{"ide":{},"libs":["ecma5","browser"],"plugins":{"guess-types":{},"angular":{}}}
\ No newline at end of file
diff --git a/285_ViewAction/Drogaria/pom.xml b/285_ViewAction/Drogaria/pom.xml
new file mode 100644
index 0000000..39b1e60
--- /dev/null
+++ b/285_ViewAction/Drogaria/pom.xml
@@ -0,0 +1,132 @@
+
+ 4.0.0
+ br.pro.delfino.drogaria
+ Drogaria
+ 1.0
+ war
+
+
+
+ UTF-8
+
+
+
+
+
+ Drogaria
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+
+
+ prime-repo
+ PrimeFaces Maven Repository
+ http://repository.primefaces.org
+ default
+
+
+
+
+
+
+
+ org.hibernate
+ hibernate-core
+ 4.3.11.Final
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.36
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+ org.glassfish
+ javax.faces
+ 2.2.12
+
+
+
+
+ org.primefaces
+ primefaces
+ 5.2
+
+
+
+
+ org.primefaces.themes
+ all-themes
+ 1.0.10
+
+
+
+
+ org.omnifaces
+ omnifaces
+ 1.11
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet
+ 2.22.1
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.4
+
+
+
+
+ net.sf.jasperreports
+ jasperreports
+ 6.1.1
+
+
+
+
+ org.apache.shiro
+ shiro-core
+ 1.2.4
+
+
+
+
\ No newline at end of file
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
new file mode 100644
index 0000000..7e86b0d
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/AutenticacaoBean.java
@@ -0,0 +1,60 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.SessionScoped;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.UsuarioDAO;
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@ManagedBean
+@SessionScoped
+public class AutenticacaoBean {
+ private Usuario usuario;
+ private Usuario usuarioLogado;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ public Usuario getUsuarioLogado() {
+ return usuarioLogado;
+ }
+
+ public void setUsuarioLogado(Usuario usuarioLogado) {
+ this.usuarioLogado = usuarioLogado;
+ }
+
+ @PostConstruct
+ public void iniciar() {
+ usuario = new Usuario();
+ usuario.setPessoa(new Pessoa());
+ }
+
+ public void autenticar() {
+ try {
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioLogado = usuarioDAO.autenticar(usuario.getPessoa().getCpf(), usuario.getSenha());
+
+ if(usuarioLogado == null){
+ Messages.addGlobalError("CPF e/ou senha incorretos");
+ return;
+ }
+
+ Faces.redirect("./pages/principal.xhtml");
+ } catch (IOException erro) {
+ erro.printStackTrace();
+ Messages.addGlobalError(erro.getMessage());
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
new file mode 100644
index 0000000..4b03075
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/CidadeBean.java
@@ -0,0 +1,119 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class CidadeBean implements Serializable {
+ private Cidade cidade;
+ private List cidades;
+ private List estados;
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar listar as cidades");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao gerar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.merge(cidade);
+
+ cidade = new Cidade();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidadeDAO.excluir(cidade);
+
+ cidades = cidadeDAO.listar();
+
+ Messages.addGlobalInfo("Cidade removida com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover a cidade");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento){
+ try {
+ cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar uma cidade");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
new file mode 100644
index 0000000..c96b115
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ClienteBean.java
@@ -0,0 +1,91 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ClienteBean implements Serializable {
+ private Cliente cliente;
+
+ private List clientes;
+ private List pessoas;
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listar("dataCadastro");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os clientes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ cliente = new Cliente();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo cliente");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clienteDAO.merge(cliente);
+
+ cliente = new Cliente();
+
+ clientes = clienteDAO.listar("dataCadastro");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Cliente salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o cliente");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
new file mode 100644
index 0000000..b4921fe
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/EstadoBean.java
@@ -0,0 +1,88 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.domain.Estado;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class EstadoBean implements Serializable {
+ private Estado estado;
+ private List estados;
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os estados");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ estado = new Estado();
+ }
+
+ public void salvar() {
+ try {
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.merge(estado);
+
+ estado = new Estado();
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estadoDAO.excluir(estado);
+
+ estados = estadoDAO.listar();
+
+ Messages.addGlobalInfo("Estado removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o estado");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ estado = (Estado) evento.getComponent().getAttributes().get("estadoSelecionado");
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
new file mode 100644
index 0000000..7fddf7d
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/FabricanteBean.java
@@ -0,0 +1,116 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+
+import org.omnifaces.util.Messages;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class FabricanteBean implements Serializable {
+ private Fabricante fabricante;
+ private List fabricantes;
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os fabricantes");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ fabricante = new Fabricante();
+ }
+
+ public void salvar() {
+ try {
+ Client cliente = ClientBuilder.newClient();
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+
+ Gson gson = new Gson();
+
+ String json = gson.toJson(fabricante);
+ caminho.request().post(Entity.json(json));
+
+ fabricante = new Fabricante();
+
+ json = caminho.request().get(String.class);
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+
+ Client cliente = ClientBuilder.newClient();
+
+ WebTarget caminho = cliente.target("http://127.0.0.1:8080/Drogaria/rest/fabricante");
+ WebTarget caminhoExcluir = caminho.path("{codigo}").resolveTemplate("codigo", fabricante.getCodigo());
+
+ caminhoExcluir.request().delete();
+ String json = caminho.request().get(String.class);
+
+ Gson gson = new Gson();
+ Fabricante[] vetor = gson.fromJson(json, Fabricante[].class);
+
+ fabricantes = Arrays.asList(vetor);
+
+ Messages.addGlobalInfo("Fabricante removido com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o fabricante");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ fabricante = (Fabricante) evento.getComponent().getAttributes().get("fabricanteSelecionado");
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
new file mode 100644
index 0000000..a042b04
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/HistoricoBean.java
@@ -0,0 +1,89 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.HistoricoDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Historico;
+import br.pro.delfino.drogaria.domain.Produto;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class HistoricoBean implements Serializable {
+ private Produto produto;
+ private Boolean exibePainelDados;
+
+ private Historico historico;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Boolean getExibePainelDados() {
+ return exibePainelDados;
+ }
+
+ public void setExibePainelDados(Boolean exibePainelDados) {
+ this.exibePainelDados = exibePainelDados;
+ }
+
+ public Historico getHistorico() {
+ return historico;
+ }
+
+ public void setHistorico(Historico historico) {
+ this.historico = historico;
+ }
+
+ @PostConstruct
+ public void novo() {
+ historico = new Historico();
+ produto = new Produto();
+ exibePainelDados = false;
+ }
+
+ public void buscar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto resultado = produtoDAO.buscar(produto.getCodigo());
+
+ if (resultado == null) {
+ exibePainelDados = false;
+ Messages.addGlobalWarn("Não existe produto cadastrado para o código informado");
+ } else {
+ exibePainelDados = true;
+ produto = resultado;
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar buscar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ historico.setHorario(new Date());
+ historico.setProduto(produto);
+
+ HistoricoDAO historicoDAO = new HistoricoDAO();
+ historicoDAO.salvar(historico);
+
+ Messages.addGlobalInfo("Histórico salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o histórico");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
new file mode 100644
index 0000000..eb963a8
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ImagemBean.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.RequestScoped;
+
+import org.primefaces.model.DefaultStreamedContent;
+import org.primefaces.model.StreamedContent;
+
+@ManagedBean
+@RequestScoped
+public class ImagemBean {
+ @ManagedProperty("#{param.caminho}")
+ private String caminho;
+
+ private StreamedContent foto;
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+
+ public StreamedContent getFoto() throws IOException {
+ if(caminho == null || caminho.isEmpty()){
+ Path path = Paths.get("C:/Programação Web com Java/Uploads/branco.png");
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }else{
+ Path path = Paths.get(caminho);
+ InputStream stream = Files.newInputStream(path);
+ foto = new DefaultStreamedContent(stream);
+ }
+ return foto;
+ }
+
+ public void setFoto(StreamedContent foto) {
+ this.foto = foto;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
new file mode 100644
index 0000000..931edf7
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/PessoaBean.java
@@ -0,0 +1,156 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.CidadeDAO;
+import br.pro.delfino.drogaria.dao.EstadoDAO;
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.domain.Estado;
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class PessoaBean implements Serializable {
+ private Pessoa pessoa;
+ private List pessoas;
+
+ private Estado estado;
+ private List estados;
+
+ private List cidades;
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+
+ public List getEstados() {
+ return estados;
+ }
+
+ public void setEstados(List estados) {
+ this.estados = estados;
+ }
+
+ public List getCidades() {
+ return cidades;
+ }
+
+ public void setCidades(List cidades) {
+ this.cidades = cidades;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar as pessoas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar uma nova pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try{
+ pessoa = (Pessoa) evento.getComponent().getAttributes().get("pessoaSelecionada");
+
+ estado = pessoa.getCidade().getEstado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar selecionar uma pessoa");
+ }
+ }
+
+ public void salvar() {
+ try {
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoaDAO.merge(pessoa);
+
+ pessoas = pessoaDAO.listar("nome");
+
+ pessoa = new Pessoa();
+
+ estado = new Estado();
+
+ EstadoDAO estadoDAO = new EstadoDAO();
+ estados = estadoDAO.listar("nome");
+
+ cidades = new ArrayList<>();
+
+ Messages.addGlobalInfo("Pessoa salva com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a pessoa");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+
+ }
+
+ public void popular() {
+ try {
+ if (estado != null) {
+ CidadeDAO cidadeDAO = new CidadeDAO();
+ cidades = cidadeDAO.buscarPorEstado(estado.getCodigo());
+ } else {
+ cidades = new ArrayList<>();
+ }
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar filtrar as cidades");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
new file mode 100644
index 0000000..e48e0d1
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean.java
@@ -0,0 +1,196 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Faces;
+import org.omnifaces.util.Messages;
+import org.primefaces.component.datatable.DataTable;
+import org.primefaces.event.FileUploadEvent;
+import org.primefaces.model.UploadedFile;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperPrintManager;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ProdutoBean implements Serializable {
+ private Produto produto;
+ private List produtos;
+ private List fabricantes;
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getFabricantes() {
+ return fabricantes;
+ }
+
+ public void setFabricantes(List fabricantes) {
+ this.fabricantes = fabricantes;
+ }
+
+ @PostConstruct
+ public void listar() {
+ try {
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os produtos");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar um novo produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void editar(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+ produto.setCaminho("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+ } catch (RuntimeException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar um produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if (produto.getCaminho() == null) {
+ Messages.addGlobalError("O campo foto é obrigatório");
+ return;
+ }
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ Produto produtoRetorno = produtoDAO.merge(produto);
+
+ Path origem = Paths.get(produto.getCaminho());
+ Path destino = Paths.get("C:/Programação Web com Java/Uploads/" + produtoRetorno.getCodigo() + ".png");
+ Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
+
+ produto = new Produto();
+
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ fabricantes = fabricanteDAO.listar();
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto salvo com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void excluir(ActionEvent evento) {
+ try {
+ produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtoDAO.excluir(produto);
+
+ Path arquivo = Paths.get("C:/Programação Web com Java/Uploads/" + produto.getCodigo() + ".png");
+ Files.deleteIfExists(arquivo);
+
+ produtos = produtoDAO.listar();
+
+ Messages.addGlobalInfo("Produto removido com sucesso");
+ } catch (RuntimeException | IOException erro) {
+ Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o produto");
+ erro.printStackTrace();
+ }
+ }
+
+ public void upload(FileUploadEvent evento) {
+ try {
+ UploadedFile arquivoUpload = evento.getFile();
+ Path arquivoTemp = Files.createTempFile(null, null);
+ Files.copy(arquivoUpload.getInputstream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
+ produto.setCaminho(arquivoTemp.toString());
+
+ Messages.addGlobalInfo("Upload realizado com sucesso");
+ } catch (IOException erro) {
+ Messages.addGlobalInfo("Ocorreu um erro ao tentar realizar o upload de arquivo");
+ erro.printStackTrace();
+ }
+ }
+
+ public void imprimir() {
+ try {
+ DataTable tabela = (DataTable) Faces.getViewRoot().findComponent("formListagem:tabela");
+ Map filtros = tabela.getFilters();
+
+ String proDescricao = (String) filtros.get("descricao");
+ String fabDescricao = (String) filtros.get("fabricante.descricao");
+
+ String caminho = Faces.getRealPath("/reports/produtos.jasper");
+
+ Map parametros = new HashMap<>();
+ if (proDescricao == null) {
+ parametros.put("PRODUTO_DESCRICAO", "%%");
+ } else {
+ parametros.put("PRODUTO_DESCRICAO", "%" + proDescricao + "%");
+ }
+ if (fabDescricao == null) {
+ parametros.put("FABRICANTE_DESCRICAO", "%%");
+ } else {
+ parametros.put("FABRICANTE_DESCRICAO", "%" + fabDescricao + "%");
+ }
+
+ Connection conexao = HibernateUtil.getConexao();
+
+ JasperPrint relatorio = JasperFillManager.fillReport(caminho, parametros, conexao);
+
+ JasperPrintManager.printReport(relatorio, true);
+ } catch (JRException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar gerar o relatório");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean2.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean2.java
new file mode 100644
index 0000000..7346efd
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/ProdutoBean2.java
@@ -0,0 +1,44 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.domain.Produto;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class ProdutoBean2 implements Serializable {
+ private List produtos;
+
+ private ProdutoDAO produtoDAO;
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ @PostConstruct
+ public void iniciar(){
+ produtoDAO = new ProdutoDAO();
+ }
+
+ public void listar() {
+ try {
+ produtos = produtoDAO.listar("descricao");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os produtos");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
new file mode 100644
index 0000000..f526df8
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/UsuarioBean.java
@@ -0,0 +1,90 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.PessoaDAO;
+import br.pro.delfino.drogaria.dao.UsuarioDAO;
+import br.pro.delfino.drogaria.domain.Pessoa;
+import br.pro.delfino.drogaria.domain.Usuario;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class UsuarioBean implements Serializable {
+ private Usuario usuario;
+
+ private List pessoas;
+ private List usuarios;
+
+ public Usuario getUsuario() {
+ return usuario;
+ }
+
+ public void setUsuario(Usuario usuario) {
+ this.usuario = usuario;
+ }
+
+ public List getPessoas() {
+ return pessoas;
+ }
+
+ public void setPessoas(List pessoas) {
+ this.pessoas = pessoas;
+ }
+
+ public List getUsuarios() {
+ return usuarios;
+ }
+
+ public void setUsuarios(List usuarios) {
+ this.usuarios = usuarios;
+ }
+
+ @PostConstruct
+ public void listar(){
+ try{
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarios = usuarioDAO.listar("tipo");
+ }catch(RuntimeException erro){
+ Messages.addGlobalError("Ocorreu um erro ao tentar listar os usuários");
+ erro.printStackTrace();
+ }
+ }
+
+ public void novo() {
+ try {
+ usuario = new Usuario();
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar criar um novo usuário");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ UsuarioDAO usuarioDAO = new UsuarioDAO();
+ usuarioDAO.merge(usuario);
+
+ usuario = new Usuario();
+ usuarios = usuarioDAO.listar("tipo");
+
+ PessoaDAO pessoaDAO = new PessoaDAO();
+ pessoas = pessoaDAO.listar("nome");
+
+ Messages.addGlobalInfo("Usuário salvo com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar o usuário");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
new file mode 100644
index 0000000..ada8ff2
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/bean/VendaBean.java
@@ -0,0 +1,186 @@
+package br.pro.delfino.drogaria.bean;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ViewScoped;
+import javax.faces.event.ActionEvent;
+
+import org.omnifaces.util.Messages;
+
+import br.pro.delfino.drogaria.dao.ClienteDAO;
+import br.pro.delfino.drogaria.dao.FuncionarioDAO;
+import br.pro.delfino.drogaria.dao.ProdutoDAO;
+import br.pro.delfino.drogaria.dao.VendaDAO;
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+
+@SuppressWarnings("serial")
+@ManagedBean
+@ViewScoped
+public class VendaBean implements Serializable {
+ private Venda venda;
+
+ private List produtos;
+ private List itensVenda;
+ private List clientes;
+ private List funcionarios;
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+
+ public List getProdutos() {
+ return produtos;
+ }
+
+ public void setProdutos(List produtos) {
+ this.produtos = produtos;
+ }
+
+ public List getItensVenda() {
+ return itensVenda;
+ }
+
+ public void setItensVenda(List itensVenda) {
+ this.itensVenda = itensVenda;
+ }
+
+ public List getClientes() {
+ return clientes;
+ }
+
+ public void setClientes(List clientes) {
+ this.clientes = clientes;
+ }
+
+ public List getFuncionarios() {
+ return funcionarios;
+ }
+
+ public void setFuncionarios(List funcionarios) {
+ this.funcionarios = funcionarios;
+ }
+
+ @PostConstruct
+ public void novo() {
+ try {
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar carregar a tela de vendas");
+ erro.printStackTrace();
+ }
+ }
+
+ public void adicionar(ActionEvent evento) {
+ Produto produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(produto)) {
+ achou = posicao;
+ }
+ }
+
+ if (achou < 0) {
+ ItemVenda itemVenda = new ItemVenda();
+ itemVenda.setPrecoParcial(produto.getPreco());
+ itemVenda.setProduto(produto);
+ itemVenda.setQuantidade(new Short("1"));
+
+ itensVenda.add(itemVenda);
+ } else {
+ ItemVenda itemVenda = itensVenda.get(achou);
+ itemVenda.setQuantidade(new Short(itemVenda.getQuantidade() + 1 + ""));
+ itemVenda.setPrecoParcial(produto.getPreco().multiply(new BigDecimal(itemVenda.getQuantidade())));
+ }
+
+ calcular();
+ }
+
+ public void remover(ActionEvent evento) {
+ ItemVenda itemVenda = (ItemVenda) evento.getComponent().getAttributes().get("itemSelecionado");
+
+ int achou = -1;
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ if (itensVenda.get(posicao).getProduto().equals(itemVenda.getProduto())) {
+ achou = posicao;
+ }
+ }
+
+ if (achou > -1) {
+ itensVenda.remove(achou);
+ }
+
+ calcular();
+ }
+
+ public void calcular() {
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ venda.setPrecoTotal(venda.getPrecoTotal().add(itemVenda.getPrecoParcial()));
+ }
+ }
+
+ public void finalizar() {
+ try {
+ venda.setHorario(new Date());
+ venda.setCliente(null);
+ venda.setFuncionario(null);
+
+ FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
+ funcionarios = funcionarioDAO.listarOrdenado();
+
+ ClienteDAO clienteDAO = new ClienteDAO();
+ clientes = clienteDAO.listarOrdenado();
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar finalizar a venda");
+ erro.printStackTrace();
+ }
+ }
+
+ public void salvar() {
+ try {
+ if(venda.getPrecoTotal().signum() == 0){
+ Messages.addGlobalError("Informe pelo menos um item para a venda");
+ return;
+ }
+
+ VendaDAO vendaDAO = new VendaDAO();
+ vendaDAO.salvar(venda, itensVenda);
+
+ venda = new Venda();
+ venda.setPrecoTotal(new BigDecimal("0.00"));
+
+ ProdutoDAO produtoDAO = new ProdutoDAO();
+ produtos = produtoDAO.listar("descricao");
+
+ itensVenda = new ArrayList<>();
+
+ Messages.addGlobalInfo("Venda realizada com sucesso");
+ } catch (RuntimeException erro) {
+ Messages.addGlobalError("Ocorreu um erro ao tentar salvar a venda");
+ erro.printStackTrace();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
new file mode 100644
index 0000000..8a5d259
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/converter/UpperCaseConverter.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.converter;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+
+@FacesConverter("upperCaseConverter")
+public class UpperCaseConverter implements Converter {
+
+ @Override
+ public Object getAsObject(FacesContext context, UIComponent component, String value) {
+ if (value == null) {
+ return null;
+ } else {
+ return value.toUpperCase();
+ }
+ }
+
+ @Override
+ public String getAsString(FacesContext context, UIComponent component, Object value) {
+ if (value == null) {
+ return "";
+ } else {
+ return value.toString();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
new file mode 100644
index 0000000..fd8acd7
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CaixaDAO.java
@@ -0,0 +1,26 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.Date;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Caixa;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CaixaDAO extends GenericDAO {
+ public Caixa buscar(Date dataAbertura) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Caixa.class);
+ consulta.add(Restrictions.eq("dataAbertura", dataAbertura));
+ Caixa resultado = (Caixa) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
new file mode 100644
index 0000000..e685e93
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/CidadeDAO.java
@@ -0,0 +1,29 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Cidade;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class CidadeDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List buscarPorEstado(Long estadoCodigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cidade.class);
+ consulta.add(Restrictions.eq("estado.codigo", estadoCodigo));
+ consulta.addOrder(Order.asc("nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
new file mode 100644
index 0000000..e9796b5
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ClienteDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Cliente;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class ClienteDAO extends GenericDAO {
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Cliente.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
new file mode 100644
index 0000000..32b4a79
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/EstadoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Estado;
+
+public class EstadoDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
new file mode 100644
index 0000000..8b7f946
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FabricanteDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+public class FabricanteDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
new file mode 100644
index 0000000..2b3114d
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/FuncionarioDAO.java
@@ -0,0 +1,28 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+
+import br.pro.delfino.drogaria.domain.Funcionario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class FuncionarioDAO extends GenericDAO{
+ @SuppressWarnings("unchecked")
+ public List listarOrdenado() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(Funcionario.class);
+ consulta.createAlias("pessoa", "p");
+ consulta.addOrder(Order.asc("p.nome"));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
new file mode 100644
index 0000000..b505cd3
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/GenericDAO.java
@@ -0,0 +1,140 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class GenericDAO {
+ private Class classe;
+
+ @SuppressWarnings("unchecked")
+ public GenericDAO() {
+ this.classe = (Class) ((ParameterizedType) getClass().getGenericSuperclass())
+ .getActualTypeArguments()[0];
+ }
+
+ public void salvar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.save(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar() {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List listar(String campoOrdenacao) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.addOrder(Order.asc(campoOrdenacao));
+ List resultado = consulta.list();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade buscar(Long codigo) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ try {
+ Criteria consulta = sessao.createCriteria(classe);
+ consulta.add(Restrictions.idEq(codigo));
+ Entidade resultado = (Entidade) consulta.uniqueResult();
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void excluir(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.delete(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ public void editar(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ sessao.update(entidade);
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entidade merge(Entidade entidade) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+ Entidade retorno = (Entidade) sessao.merge(entidade);
+ transacao.commit();
+ return retorno;
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
new file mode 100644
index 0000000..7b30017
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/HistoricoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Historico;
+
+public class HistoricoDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
new file mode 100644
index 0000000..b6560e2
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/MovimentacaoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Movimentacao;
+
+public class MovimentacaoDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
new file mode 100644
index 0000000..bbd116b
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/PessoaDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Pessoa;
+
+public class PessoaDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
new file mode 100644
index 0000000..4c1e751
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/ProdutoDAO.java
@@ -0,0 +1,7 @@
+package br.pro.delfino.drogaria.dao;
+
+import br.pro.delfino.drogaria.domain.Produto;
+
+public class ProdutoDAO extends GenericDAO {
+
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
new file mode 100644
index 0000000..b4bf524
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/UsuarioDAO.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.dao;
+
+import org.apache.shiro.crypto.hash.SimpleHash;
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.criterion.Restrictions;
+
+import br.pro.delfino.drogaria.domain.Usuario;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class UsuarioDAO extends GenericDAO {
+ public Usuario autenticar(String cpf, String senha) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+
+ try{
+ Criteria consulta = sessao.createCriteria(Usuario.class);
+ consulta.createAlias("pessoa", "p");
+
+ consulta.add(Restrictions.eq("p.cpf", cpf));
+
+ SimpleHash hash = new SimpleHash("md5", senha);
+ consulta.add(Restrictions.eq("senha", hash.toHex()));
+
+ Usuario resultado = (Usuario) consulta.uniqueResult();
+
+ return resultado;
+ } catch (RuntimeException erro) {
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
new file mode 100644
index 0000000..3428939
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/dao/VendaDAO.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.dao;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+import br.pro.delfino.drogaria.domain.ItemVenda;
+import br.pro.delfino.drogaria.domain.Produto;
+import br.pro.delfino.drogaria.domain.Venda;
+import br.pro.delfino.drogaria.util.HibernateUtil;
+
+public class VendaDAO extends GenericDAO {
+ public void salvar(Venda venda, List itensVenda) {
+ Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
+ Transaction transacao = null;
+
+ try {
+ transacao = sessao.beginTransaction();
+
+ sessao.save(venda);
+
+ for (int posicao = 0; posicao < itensVenda.size(); posicao++) {
+ ItemVenda itemVenda = itensVenda.get(posicao);
+ itemVenda.setVenda(venda);
+
+ sessao.save(itemVenda);
+
+ Produto produto = itemVenda.getProduto();
+ int quantidade = produto.getQuantidade() - itemVenda.getQuantidade();
+ if (quantidade >= 0) {
+ produto.setQuantidade(new Short(quantidade + ""));
+ sessao.update(produto);
+ } else {
+ throw new RuntimeException("Quantidade insuficiente em estoque");
+ }
+ }
+
+ transacao.commit();
+ } catch (RuntimeException erro) {
+ if (transacao != null) {
+ transacao.rollback();
+ }
+ throw erro;
+ } finally {
+ sessao.close();
+ }
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
new file mode 100644
index 0000000..43b07c4
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Caixa.java
@@ -0,0 +1,48 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Caixa extends GenericDomain {
+ @Column(nullable = false, unique = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataAbertura;
+
+ @Column(nullable = true)
+ @Temporal(TemporalType.DATE)
+ private Date dataFechamento;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valorAbertura;
+
+ public Date getDataAbertura() {
+ return dataAbertura;
+ }
+
+ public void setDataAbertura(Date dataAbertura) {
+ this.dataAbertura = dataAbertura;
+ }
+
+ public Date getDataFechamento() {
+ return dataFechamento;
+ }
+
+ public void setDataFechamento(Date dataFechamento) {
+ this.dataFechamento = dataFechamento;
+ }
+
+ public BigDecimal getValorAbertura() {
+ return valorAbertura;
+ }
+
+ public void setValorAbertura(BigDecimal valorAbertura) {
+ this.valorAbertura = valorAbertura;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
new file mode 100644
index 0000000..cf94ede
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cidade.java
@@ -0,0 +1,33 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cidade extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Estado estado;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public Estado getEstado() {
+ return estado;
+ }
+
+ public void setEstado(Estado estado) {
+ this.estado = estado;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
new file mode 100644
index 0000000..6ace9b9
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Cliente.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Cliente extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataCadastro;
+
+ @Column(nullable = false)
+ private Boolean liberado;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public Date getDataCadastro() {
+ return dataCadastro;
+ }
+
+ public void setDataCadastro(Date dataCadastro) {
+ this.dataCadastro = dataCadastro;
+ }
+
+ public Boolean getLiberado() {
+ return liberado;
+ }
+
+ public void setLiberado(Boolean liberado) {
+ this.liberado = liberado;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
new file mode 100644
index 0000000..1c06b98
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Estado.java
@@ -0,0 +1,30 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Estado extends GenericDomain {
+ @Column(length = 2, nullable = false)
+ private String sigla;
+
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ public String getSigla() {
+ return sigla;
+ }
+
+ public void setSigla(String sigla) {
+ this.sigla = sigla;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
new file mode 100644
index 0000000..02eab8c
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Fabricante.java
@@ -0,0 +1,19 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@SuppressWarnings("serial")
+@Entity
+public class Fabricante extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String descricao;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
new file mode 100644
index 0000000..dec9378
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Funcionario.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Funcionario extends GenericDomain {
+ @Column(length = 15, nullable = false)
+ private String carteiraTrabalho;
+
+ @Column(nullable = false)
+ @Temporal(TemporalType.DATE)
+ private Date dataAdmissao;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getCarteiraTrabalho() {
+ return carteiraTrabalho;
+ }
+
+ public void setCarteiraTrabalho(String carteiraTrabalho) {
+ this.carteiraTrabalho = carteiraTrabalho;
+ }
+
+ public Date getDataAdmissao() {
+ return dataAdmissao;
+ }
+
+ public void setDataAdmissao(Date dataAdmissao) {
+ this.dataAdmissao = dataAdmissao;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
new file mode 100644
index 0000000..f37efea
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/GenericDomain.java
@@ -0,0 +1,54 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+@SuppressWarnings("serial")
+@MappedSuperclass
+public class GenericDomain implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long codigo;
+
+ public Long getCodigo() {
+ return codigo;
+ }
+
+ public void setCodigo(Long codigo) {
+ this.codigo = codigo;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s[codigo=%d]", getClass().getSimpleName(), getCodigo());
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ GenericDomain other = (GenericDomain) obj;
+ if (codigo == null) {
+ if (other.codigo != null)
+ return false;
+ } else if (!codigo.equals(other.codigo))
+ return false;
+ return true;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
new file mode 100644
index 0000000..dafdaeb
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Historico.java
@@ -0,0 +1,49 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Historico extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, length = 500)
+ private String observacoes;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public String getObservacoes() {
+ return observacoes;
+ }
+
+ public void setObservacoes(String observacoes) {
+ this.observacoes = observacoes;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
new file mode 100644
index 0000000..590ab26
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/ItemVenda.java
@@ -0,0 +1,58 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class ItemVenda extends GenericDomain {
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoParcial;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Produto produto;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Venda venda;
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPrecoParcial() {
+ return precoParcial;
+ }
+
+ public void setPrecoParcial(BigDecimal precoParcial) {
+ this.precoParcial = precoParcial;
+ }
+
+ public Produto getProduto() {
+ return produto;
+ }
+
+ public void setProduto(Produto produto) {
+ this.produto = produto;
+ }
+
+ public Venda getVenda() {
+ return venda;
+ }
+
+ public void setVenda(Venda venda) {
+ this.venda = venda;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
new file mode 100644
index 0000000..c3d6319
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Movimentacao.java
@@ -0,0 +1,50 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Movimentacao extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal valor;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Caixa caixa;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getValor() {
+ return valor;
+ }
+
+ public void setValor(BigDecimal valor) {
+ this.valor = valor;
+ }
+
+ public Caixa getCaixa() {
+ return caixa;
+ }
+
+ public void setCaixa(Caixa caixa) {
+ this.caixa = caixa;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
new file mode 100644
index 0000000..f354001
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Pessoa.java
@@ -0,0 +1,143 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@SuppressWarnings("serial")
+@Entity
+public class Pessoa extends GenericDomain {
+ @Column(length = 50, nullable = false)
+ private String nome;
+
+ @Column(length = 14, nullable = false)
+ private String cpf;
+
+ @Column(length = 12, nullable = false)
+ private String rg;
+
+ @Column(length = 100, nullable = false)
+ private String rua;
+
+ @Column(nullable = false)
+ private Short numero;
+
+ @Column(length = 30, nullable = false)
+ private String bairro;
+
+ @Column(length = 10, nullable = false)
+ private String cep;
+
+ @Column(length = 10)
+ private String complemento;
+
+ @Column(length = 13, nullable = false)
+ private String telefone;
+
+ @Column(length = 14, nullable = false)
+ private String celular;
+
+ @Column(length = 100, nullable = false)
+ private String email;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Cidade cidade;
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public String getCpf() {
+ return cpf;
+ }
+
+ public void setCpf(String cpf) {
+ this.cpf = cpf;
+ }
+
+ public String getRg() {
+ return rg;
+ }
+
+ public void setRg(String rg) {
+ this.rg = rg;
+ }
+
+ public String getRua() {
+ return rua;
+ }
+
+ public void setRua(String rua) {
+ this.rua = rua;
+ }
+
+ public Short getNumero() {
+ return numero;
+ }
+
+ public void setNumero(Short numero) {
+ this.numero = numero;
+ }
+
+ public String getBairro() {
+ return bairro;
+ }
+
+ public void setBairro(String bairro) {
+ this.bairro = bairro;
+ }
+
+ public String getCep() {
+ return cep;
+ }
+
+ public void setCep(String cep) {
+ this.cep = cep;
+ }
+
+ public String getComplemento() {
+ return complemento;
+ }
+
+ public void setComplemento(String complemento) {
+ this.complemento = complemento;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public String getCelular() {
+ return celular;
+ }
+
+ public void setCelular(String celular) {
+ this.celular = celular;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public Cidade getCidade() {
+ return cidade;
+ }
+
+ public void setCidade(Cidade cidade) {
+ this.cidade = cidade;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
new file mode 100644
index 0000000..82049b0
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Produto.java
@@ -0,0 +1,69 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Produto extends GenericDomain {
+ @Column(length = 80, nullable = false)
+ private String descricao;
+
+ @Column(nullable = false)
+ private Short quantidade;
+
+ @Column(nullable = false, precision = 6, scale = 2)
+ private BigDecimal preco;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Fabricante fabricante;
+
+ @Transient
+ private String caminho;
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+
+ public Short getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(Short quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public BigDecimal getPreco() {
+ return preco;
+ }
+
+ public void setPreco(BigDecimal preco) {
+ this.preco = preco;
+ }
+
+ public Fabricante getFabricante() {
+ return fabricante;
+ }
+
+ public void setFabricante(Fabricante fabricante) {
+ this.fabricante = fabricante;
+ }
+
+ public String getCaminho() {
+ return caminho;
+ }
+
+ public void setCaminho(String caminho) {
+ this.caminho = caminho;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
new file mode 100644
index 0000000..ae51941
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Usuario.java
@@ -0,0 +1,93 @@
+package br.pro.delfino.drogaria.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
+
+@SuppressWarnings("serial")
+@Entity
+public class Usuario extends GenericDomain {
+ @Column(length = 32, nullable = false)
+ private String senha;
+
+ @Transient
+ private String senhaSemCriptografia;
+
+ @Column(nullable = false)
+ private Character tipo;
+
+ @Column(nullable = false)
+ private Boolean ativo;
+
+ @OneToOne
+ @JoinColumn(nullable = false)
+ private Pessoa pessoa;
+
+ public String getSenha() {
+ return senha;
+ }
+
+ public void setSenha(String senha) {
+ this.senha = senha;
+ }
+
+ public String getSenhaSemCriptografia() {
+ return senhaSemCriptografia;
+ }
+
+ public void setSenhaSemCriptografia(String senhaSemCriptografia) {
+ this.senhaSemCriptografia = senhaSemCriptografia;
+ }
+
+ public Character getTipo() {
+ return tipo;
+ }
+
+ @Transient
+ public String getTipoFormatado() {
+ String tipoFormatado = null;
+
+ if (tipo == 'A') {
+ tipoFormatado = "Administrador";
+ } else if (tipo == 'B') {
+ tipoFormatado = "Balconista";
+ } else if (tipo == 'G') {
+ tipoFormatado = "Gerente";
+ }
+
+ return tipoFormatado;
+ }
+
+ public void setTipo(Character tipo) {
+ this.tipo = tipo;
+ }
+
+ public Boolean getAtivo() {
+ return ativo;
+ }
+
+ @Transient
+ public String getAtivoFormatado(){
+ String ativoFormatado = "Não";
+
+ if(ativo){
+ ativoFormatado = "Sim";
+ }
+
+ return ativoFormatado;
+ }
+
+ public void setAtivo(Boolean ativo) {
+ this.ativo = ativo;
+ }
+
+ public Pessoa getPessoa() {
+ return pessoa;
+ }
+
+ public void setPessoa(Pessoa pessoa) {
+ this.pessoa = pessoa;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
new file mode 100644
index 0000000..3f4c226
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/domain/Venda.java
@@ -0,0 +1,61 @@
+package br.pro.delfino.drogaria.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@SuppressWarnings("serial")
+@Entity
+public class Venda extends GenericDomain {
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date horario;
+
+ @Column(nullable = false, precision = 7, scale = 2)
+ private BigDecimal precoTotal;
+
+ @ManyToOne
+ private Cliente cliente;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Funcionario funcionario;
+
+ public Date getHorario() {
+ return horario;
+ }
+
+ public void setHorario(Date horario) {
+ this.horario = horario;
+ }
+
+ public BigDecimal getPrecoTotal() {
+ return precoTotal;
+ }
+
+ public void setPrecoTotal(BigDecimal precoTotal) {
+ this.precoTotal = precoTotal;
+ }
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public Funcionario getFuncionario() {
+ return funcionario;
+ }
+
+ public void setFuncionario(Funcionario funcionario) {
+ this.funcionario = funcionario;
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
new file mode 100644
index 0000000..fbb1f2b
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/DrogariaService.java
@@ -0,0 +1,13 @@
+package br.pro.delfino.drogaria.service;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+// http://localhost:8080/Drogaria/rest/drogaria
+@Path("drogaria")
+public class DrogariaService {
+ @GET
+ public String exibir(){
+ return "Curso de Java";
+ }
+}
diff --git a/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
new file mode 100644
index 0000000..1dbc0d1
--- /dev/null
+++ b/285_ViewAction/Drogaria/src/main/java/br/pro/delfino/drogaria/service/FabricanteService.java
@@ -0,0 +1,85 @@
+package br.pro.delfino.drogaria.service;
+
+import java.util.List;
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import com.google.gson.Gson;
+
+import br.pro.delfino.drogaria.dao.FabricanteDAO;
+import br.pro.delfino.drogaria.domain.Fabricante;
+
+@Path("fabricante")
+public class FabricanteService {
+ // http://127.0.0.1:8080/Drogaria/rest/fabricante
+ @GET
+ public String listar() {
+ FabricanteDAO fabricanteDAO = new FabricanteDAO();
+ List