Professional Documents
Culture Documents
Palmas-TO
2013
RODRIGO OLIVEIRA PORTO
Palmas-TO
2013
DEDICATÓRIA
Dedico este primeiramente a Deus, pois, como disse o Apóstolo São Paulo:
A minha filha Yasmin que a cada dia faz meus olhos brilhar com seu jeito simples
e sincero de expressar suas emoções e sentimentos. – Filha tenho muito orgulho de
você e te amo muito.
Aos meus pais Lourival e Ana que me ensinaram princípios aos quais não seria
possível aprender em nenhum outro lugar, que sempre deram forças e incentivos em
tudo que fiz, apesar de suas dificuldades. – Pai, mãe amo vocês.
12
Para que a administração pública possa oferecer o ensino e a capacitação da
forma como os pesquisadores vêm apontando para realizar uma efetiva
ressocialização dos presos, necessitará de uma ferramenta que possibilite primeiro
conhecer quem são, onde estão, quais as características e necessidades de cada
indivíduo.
Desta forma este trabalho visa desenvolver a priori um levantamento para
saber quais são as características do sistema prisional no estado do Tocantins e em
segundo momento uma ferramenta que possibilitará manter dados socioeconômicos
que servirão de base para a cúpula de políticas prisionais do estado a fim de
maximizar o esforço da ressocialização1 no estado.
1 Ressocialização significa reintegral uma pessoa novamente ao convívio social por meio de políticas
públicas que gere resultados duradores na vida do individuo evitando o reingresso no sistema.
13
1.1 - Justificativa
15
1.2.1 - Objetivos Específicos
16
1.3 - Escopo
17
1.4 – Estrutura do projeto
18
2 – SISTEMA PENITENCIÁRIO FEDERAL / ESTADUAL
Desta forma, concluímos por indução que a questão legal está resolvida, ou
seja, não falta legislação para tratar do problema, o que precisa é colocar em prática
políticas que conduzam a ressocialição dos indivíduos hoje presos para por fim
conduzi-os novamente a sociedade de forma definitiva.
Mais uma vez por dedução podemos afirma que, se o sistema não consegue
recuperar quem já está dentro e considerando que novos presos entram todos os
dias, a situação é no mínimo preocupante. Outro dado que merece destaque é
conforme afirma (Viana, 2012), a “questão dos presos que já cumpriram sua pena, e
não são postos em liberdade, bem como, o grande número de presos provisórios
que estão nos presídios juntamente com os sentenciados”. Na foto 1, podemos
perceber a gravidade do problema e na ilustração 1 observaremos como o sistema
está funcionando na atualidade.
20
Foto 1 – Contagem (MG) Fonte: Câmera dos Deputados – CPI Sistema Carcerário
Ilustração 1 – Ilustração do funcionamento do sistema prisional atual Fonte: Adaptado pelo autor
21
2.4 – O Sistema Penitenciário e Prisional do Tocantins
22
Gráfico 3 – Presos Semiabertos por região Fonte: www.defesasocial.to.gov.br
24
3 – TECNOLOGIAS UTILIZADAS NO DESENVOLVIMENTO DE
SOFTWARE PARA WEB
O fato é que com a união destes três metodistas a orientação a objeto ganhou
ainda mais força dentro do universo de desenvolvimento de software, pois, a UML
proporcionou uma maneira mais adequada de comunicação entre os
desenvolvedores e os clientes. A autora (MELO, 2004), argumenta que “é essa
facilidade de entendimento e absorção de ideias, não só pelo desenvolvedor, mas
também e principalmente pelo usuário, que faz com que a UML seja cada vez mais
adotada”.
Para (MELO, 2004), a UML:
25
Auxilia na construção de software, pois permite um mapeamento de seus
modelos para as linguagens de programação, ou vise versa. Assim, é
possível gerar código a partir de modelos da UML, ou com um suporte
adequado realizar a engenharia reversa, reconstruindo um modelo a partir
de sua implementação.
26
ambientes de software (como sistemas
operacionais e máquinas virtuais)
Usado para organizar elementos de
Diagrama de Pacotes modelo e mostrar dependências entre
eles.
Usado para mostrar a composição de
uma estrutura. Útil em estruturas
Diagrama de Estrutura
compostas de estruturas complexas ou
Composta
em projetos baseados em
componentes.
Mostra os casos de uso, atores e seus
Diagrama de Caso de
relacionamentos que expressam a
Uso
Diagramas funcionalidade de um sistema.
Diagramas de Interação
Dinâmicos
Uma variação do diagrama de
atividades que mostra de uma forma
geral o fluxo de controle dentro de um
Diagrama de Visão Geral sistema ou processo de negócios. Cada
nó ou atividade dentro do diagrama
pode representar outro diagrama de
interação.
Mostra as interações que correspondem
a um conjunto de mensagens trocadas
Diagrama de Sequencia
entre objetos e a ordem que essas
mensagens acontecem.
Mostra a mudança de estado de
Diagrama Temporal um objeto numa passagem de tempo,
em resposta a eventos externos.
É o antigo diagrama de colaboração,
Diagrama de que mostra objetos, seus inter-
Comunicação relacionamentos e fluxo de mensagens
entre eles.
Diagrama de Atividade Representa a execução de ações ou
atividades e os fluxos que são
disparados pela conclusão de outras
ações ou atividades.
27
Diagrama de Máquina de Representa as ações ocorridas em
Estado resposta ao recebimento de eventos.
Tabela 2 – Tipos de diagramas da UML versão 2.0 conforme (MELO, 2004).
28
A identidade de objeto é a propriedade pela qual cada objeto
(independentemente de sua classe ou seu estado) pode ser identificado e
tratado como uma entidade distinta de software.
Nossa próxima qualidade a ser observada é a classe, talvez uma das mais
conhecidas do mundo dos objetos, a classe é nada mais que uma forma geradora
de objetos, sendo todos iguais, do ponto de vista dos atributos e métodos, mas,
únicos como objetos. Na ilustração 4 temos exemplos de classes representadas
através da UML. A primeira delas é a classe cachorro, através dela podemos ter
vários cachorros com nomes até iguais, mas, animais distintos, peso, cor do pelo,
bem como a forma de latir, abanar o rabo etc.
29
Ilustração 4 – Representação de uma classe através da UML Fonte: www.guiadophp.yoonix.com.br
30
ao mesmo tempo manuteníveis, já que reduz a quantidade de código produzido.
Como ilustração poderíamos novamente usar a de número 3 do exemplo sobre
mensagem, mas para reforça a ideia veja a ilustração 6.
31
3.3 – Gerenciamento de Projetos de Software para web
32
Ilustração 8 – Representação das partes do gerenciamento de projetos web Fonte:
http://ainternetenossa.wordpress.com
33
3.4.1 – Persistência de Dados em Java e a especificação JPA
34
Fazer essa conversão do mundo OO para o relacional cada vez que
precisamos salvar ou recuperar qualquer objeto do banco de dados exige
tanto esforço de desenvolvimento, que acabamos gastando alguma energia
com algo que não é o objetivo final do sistema. Não seria muito melhor se
essa integração entre os dois paradigmas já estivesse pronta e não
precisássemos nos preocupar com ela?
35
@Column(name=”sigla_dpto”)
private String sigla;
@OneToOne
private Funcionario responsavel;
// getters e setters se necessário
}
36
Hibernate
37
estas máquinas ficam aguardando uma solicitação e ao recebê-la, ele processa o
pedido e devolve a resposta.
Este trabalho usará o servidor web denominado Apache Tomcat em sua
versão 7.0, mantido pela Apache Software Foundation, sob a licença Apache versão
2, que entre outras características preserva o fato do código ser aberto, ou seja,
open source. O Apache é um servidor robusto, altamente configurável, é flexível
podendo ser utilizado em diferentes plataformas, fornece o código-fonte completo,
está sempre em constante atualização para incorporações de novos protocolos, é
composto de módulos sendo cada um implementado com características para
aumento de suas funcionalidades, provêm um alto desempenho, além de outras
características.
A linguagem de programação Java teve seu primeiro projeto voltado para web
com o surgimento da tecnologia Servlet e após ela várias outras surgiram, mas
sempre baseadas na mesma. Abaixo podemos verificar um pouco de cada uma
delas.
Servlets Muito utilizadas nas primeiras aplicações web feitas em
Java. Porém, era muito complexa de usar, já que demandava
conhecimento de como os dados eram capturados e manipulados
pelos métodos GET e POST, além de ter que escrever todo o código
HTML dentro do código Java, mas o problema mais evidente estava
em ter que manter as aplicações conforme iam ganhando corpo, já que
não era fácil deixar todas as tecnologias juntas.
38
JSTL4 Essa especificação Java facilitou o desenvolvimento já que
separava os códigos escritos deixando dentro do HTML somente o
essencial para a execução do software.
3.6.1 – Padrão de Projeto Modelo Visão Controle (Model View Controller) - MVC
40
Código HTML misturado com SQL e lógica de negócios em Java é
especialmente difícil de manter, além de o reúso ser baixo; mas,
infelizmente, este ainda é um dos grandes responsáveis pelo alto custo de
manutenção de código legado.
41
3.7 – Frameworks para desenvolvimento
43
No uso do JSF temos que ter em mente que não estamos codificando tags
como fazia no passado, cada abertura de código é um componente e este pode
pertencer a dos dois tipos que a especificação determina, são eles:
Componentes Core Conforme (LUCKOW, MELO, 2010), este
componentes “são como utilitários para as demais componentes do JSF,
inclusive os de terceiros”. Sua declaração dever ser:
xmlns:f=http://Java.sun.com/jsf/core
Componentes HTML Contêm conforme (LUCKOW, MELO, 2010), as
“tags que correspondem diretamente as tags do HTML, com a diferença de
que essas tags no JSF são componentes e estarão diretamente ligadas à
inteligência da aplicação”. Sua declaração dever ser:
xmlns:h=http://Java.sun.com/jsf/html
A página acima não tem nada de especial, isto porque tirando o fato de já
aparecer no navegador quando solicitada pelo endereço correto, não implementa
nenhuma ação. Em JSF cada arquivo com a extensão .xhtml(JSF) pode ser ligado a
uma ou mais classes Java. Estas classes são conhecidas como Bean (Backing
Bean). (LUCKOW, MELO, 2010) descrevem estas classes da seguinte maneira:
A classe Bean (conhecidas também como Backing Bean) é uma classe Java
normal, que suportará todo o funcionamento das paginas JSF. Isso permite
que você desenvolva seu projeto separando as regras de funcionamento da
organização visual da página e do layout.
@ManagedBean
@RequestScoped
public class CelaBean implements Serializable{
private Cela cela;
//Gets e Sets
}
Um dos cuidados que todo desenvolvedor deve ter ao trabalhar com o JSF é
quanto ao ciclo de vida das suas requisições, que é como o JSF se comporta
internamente quando está processando uma página. Este ciclo de vida é dividido em
sete fases, isto se ele for processado corretamente, além de outras variáveis que
pode influenciar o ciclo. Na ilustração 17 e 18 temos duas visões de como o JSF se
comporta ao processar uma página.
47
Ilustração 18 – Ciclo de vida pagina JSF visão do processamento Fonte: http://osl2.uca.es
Abaixo uma breve explicação sobre cada uma das fases mostradas acima.
1. Restore View Carrega em memória a pagina solicitada, isto se ele
já não estiver lá, ou seja, caso ela seja nova;
2. Aplly Request Values O JSF preenche a árvore de componentes
da página com os valores da requisição, isto se, o componente não
estiver marcado com a opção immediate=true.
3. Process Events O JSF navega pelos componentes e registra os
eventos.
4. Process Validation O JSF percorre os componentes validando as
regras codificadas pelo desenvolvedor, caso alguma delas seja
invalidada ele reexibe a página mostrando o erro.
5. Update Model Values Somente neste passo é que o JSF atualiza o
modelo de dados, ou seja, nas classes beans, isto porque aqui ele já
tem a certeza que todos os dados foram devidamente validados e os
eventos processados. Também é nesta fase que ocorrem as
conversões básicas da linguagem Java.
6. Invoke Application Nesta fase o JSF, após ter certeza das fases
anteriores terem sido processadas e validadas, chama o método que
foi configurado ao processar o formulário.
7. Render Responde Aqui o JSF monta através de seus componentes
o HTML para que o navegador possa disponibilizá-lo ao solicitante.
48
3.7.2 – Hibernate
49
Ilustração 19 – Exemplo de configuração arquivo Hibernate.cfg.xml Fonte: http://tech-
gcs.blogspot.com
50
Ilustração 20 – Exemplo de configuração arquivo persistence.xml
Fonte: http://blog.camilolopes.com.br
Podemos observar através dos arquivos que eles são muito próximos com
exceção de algumas propriedades, olhando mais atentamente veremos inclusive
que no arquivo persistence.xml fazemos referência ao Hibernate.
Uma característica muito importante que o uso de JPA/Hibernate pode
proporcionar ao desenvolvedor é a capacidade de criação e destruição das tabelas
do banco de dados. Para usarmos essa propriedade basta acrescentar no código
acima a seguinte linha: <property name="hibernate.hbm2ddl.auto" value="update"/>. Desta
forma estamos informando ao Hibernate que ele deve criar e alterar as nossas
tabelas automaticamente. Outras possibilidades segundo (CORDEIRO, 2012) são:
create Nesta propriedade o Hibernate sempre recria todas as
tabelas na base de dados, assim o desenvolvedor trabalha sempre
com um base limpa;
create-drop As tabelas são criadas e excluídas no final da
execução, caso solicitado pelo desenvolvedor;
validate Não cria e nem apaga nada, apenas valida se as entidades
estão de acordo com as tabelas, lançando uma exceção caso
contrário;
51
update Essa propriedade é a mais indicada para aplicações em
produção, pois sua tarefa é manter os dados e criar os solicitado,
nunca apagar os existentes.
3.7.3 – Facelets
52
Ilustração 22 – Definição de um Tamplate em Facelets Fonte: Autor
53
3.7.4 – Biblioteca de componentes - Primefaces
É uma biblioteca que tem como premissa facilitar a vida do desenvolvedor isto
através de vários componentes prontos que podemos incluir no nosso código. Foi
uma das primeiras a estar totalmente convertida para o JSF 2 segundo (LUCKOW,
MELO, 2010). A instalação é muito simples, são apenas dois passos, o primeiro é
incluir na lib do projeto a biblioteca primefaces-x.x.jar, e o segundo é incluir nos
arquivos .xhtml que irão usar os componentes o namespace
xmlns:p="http://primefaces.org/ui.
Está biblioteca é muito rica e disponibiliza um grande número de
componentes e temas, deixando a aplicação muito mais dinâmica e interativa,
diminuindo muito o trabalho dos desenvolvedores. Alguns dos componentes desta
biblioteca poderão ser vistos juntamente com uma curta descrição do uso e uma
imagem da saída na tabela 7.
54
é um robô.
InputMask Fornece mascaras para os
campos de um formulário, sendo
possível a personalizações das
mesmas de acordo com a
necessidade.
Collector Gerencia as operações de
adicionar objetos em listas.
55
GMap Fornece um mapa no padrão do
serviços oferecidos pelo
GoogleMap
56
4 – PROJETO: Sistema de Gestão Penitenciário - SISGESPEN
57
Ilustração 24 – Organograma Secretaria da Defesa Social – SEDS (Ex-Secretaria da Justiça e dos Direitos Humanos) Fonte: Autor
58
4.3 – Modelagem do Problema a ser resolvido
Com base nas informações obtidas nos tópicos anteriores partimos para a
entrevista com os envolvidos para ratificação do modelo e aprimoramento das
informações colhidas. Assim, entrevistamos a Diretora de Assistência ao Preso e ao
Egresso como também o diretor de Administração Prisional e Penitenciário e por fim
alguns agentes penitenciários acostumados com o dia a dia das unidades, obtendo
assim várias informações adicionais.
Uma das informações que colhemos foi à existência de uma pequena base de
dados utilizada nas unidades para catalogar dados dos internos, alias apesar de não
suprir as necessidades por ser bastante limita, esta é muito utilizada.
60
Ilustração 26 – Diagrama de Classe Fonte: Autor
61
4.4 – Configurações para a persistência via JPA
62
Ilustração 28 – Tela principal do SISGESPEN Fonte: Autor
63
5 – CONCLUSÃO
AGÊNCIA ARAGUAIA CAPC. Tocantins: 75,6% dos presos não têm atividade.
Disponível em <http://www.folhadobico.com.br/06/2010/tocantins-756-dos-presos-
nao-tem-atividade.php> Acesso em maio de 2013.
CAELUM. FJ-26 Laboratório de MVC com Hibernate e JSF para Web. Disponível
em: <www.caelum.com.br> Acesso em maio de 2013.
CORDEIRO, Gilliard. Aplicações Java para web com JSF e JPA. São Paulo-SP.
Editora Casa do Código, 2012.
A – Arquivo Persistence.xml
package br.to.gov.modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@NamedQueries({
@NamedQuery(name = "Advogado.buscaPorCodigo", query="SELECT a FROM Advogado
a WHERE a.codigo = :codigo"),
@NamedQuery(name = "Advogado.buscaPorNome", query="SELECT a FROM Advogado a
WHERE a.nome LIKE :nome")
})
public class Advogado implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long codigo;
public static final String buscaPorNome = "Advogado.buscaPorNome";
private String nome;
@Column(unique=true, nullable=false, updatable=false)
private String numeroOAB;
private String telefone;
private String endereco;
private String email;
private String celular;
@Column(updatable=false)
@Temporal(TemporalType.DATE)
private Date dataCadastro;
private String bairro;
@OneToOne
private Estado estado;
@OneToOne
private Cidade cidade;
public Long getCodigo() {
return codigo;
}
public static String getBuscapornome() {
return buscaPorNome;
}
//Gets e Sets e hashCode() e equals
}
E – Classe do pacote br.to.gov.modelo.Agente.java
package br.to.gov.modelo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@NamedQueries({
@NamedQuery(name = "Agente.buscaPorNome", query="SELECT a FROM Agente
a WHERE a.nome LIKE :nome"),
@NamedQuery(name = "Agente.buscaPorLogin", query="SELECT a FROM
Agente a WHERE a.login = :login")
})
public class Agente implements Serializable{
private static final long serialVersionUID = 1L;
import java.lang.String;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Cela
*
*/
@Entity
public class Cela implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long codigo;
private int numero;
private String descricao;
private int capacidade;
@OneToOne
private UnidadePrisional unidadePrisional;
@OneToOne
private Pavilhao pavilhao;
//Gets e Sets e hashCode() e equals
}
G – Classe do pacote br.to.gov.modelo.Interno.java
package br.to.gov.modelo;
import br.to.gov.modelo.Cidade;
import br.to.gov.modelo.Estado;
import br.to.gov.modelo.EstadoCivil;
import br.to.gov.modelo.GrauInstrucao;
import br.to.gov.modelo.Ocupacao;
import br.to.gov.modelo.Pais;
import java.io.Serializable;
import java.lang.Long;
import java.lang.String;
import java.util.Date;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Interno
*
*/
@Entity
@NamedQueries({
@NamedQuery(name = "Interno.buscaPorCodigo", query="SELECT i FROM
Interno i WHERE i.codigo = :codigo"),
@NamedQuery(name = "Interno.buscaPorApelido", query="SELECT i FROM
Interno i WHERE i.apelido LIKE :apelido"),
@NamedQuery(name = "Interno.buscaPorNome", query="SELECT i FROM
Interno i WHERE i.nome LIKE :nome")
})
public class Interno implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long codigo;
private String nome;
private static final String buscaPorApelido = "Interno.buscaPorApelido";
private static final String buscaPorNome = "Interno.buscaPorNome";
private String apelido;
private String sexo;
@Column(unique=true, nullable=true)
private String cpf;
private String rg;
private String rgExpedidor;
@OneToOne
private Cidade naturalDe;
@OneToOne
private Estado estado;
@OneToOne
private Pais nacionalidade;
@Temporal(TemporalType.DATE)
private Date dataNascimento;
@OneToOne
private Ocupacao ocupacao;
@OneToOne
private EstadoCivil estadoCivil;
private boolean convivemConjuge;
private String nomeConjuge;
private String enderecoConjuge;
private String bairroConjuge;
@OneToOne
private Cidade cidadeConjuge;
@OneToOne
private Estado estadoConjuge;
private boolean temFilhos;
private int quantos;
private String codicoesSaudeFilhos;
private boolean convivemPais;
private boolean paiVivo;
private String nomePai;
private boolean maeViva;
private String nomeMae;
private String enderecoPais;
private String bairroPais;
@OneToOne
private Cidade cidadeDosPais;
@OneToOne
private Estado estadoDosPais;
private String racaEtnia;
private String rosto;
private String corOlhos;
private String sombrancelhas;
private String nariz;
private String barba;
private String cabelos;
private String dentes;
private String orelhas;
private String pescoso;
private String compleicao;
private double estatura;
private double ultimaRenda;
private String religiao;
@OneToOne
private GrauInstrucao grauInstrucao;
private String tatuagem;
private String formaTatuagem;
private String cicatriz;
private String defeitosFisicos;
private String amputacoes;
//Gets e Sets e hashCode() e equals
}
H – Outras classe do pacote br.to.gov.modelo
H – InterfaceDAO.java pacote br.to.gov.DAO
package br.to.gov.DAO;
import java.util.List;
package br.to.gov.DAO;
import java.util.List;
import javax.persistence.EntityManager;
package br.to.gov.DAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.to.gov.modelo.UnidadePrisional;
@Override
public void adicionar(UnidadePrisional t) {
dao.adicionar(t);
}
@Override
public void alterar(UnidadePrisional t) {
dao.alterar(t);
}
@Override
public void deletar(UnidadePrisional t) {
dao.remove(t);
}
@Override
public List<UnidadePrisional> lista() {
return dao.lista();
}
@Override
public UnidadePrisional busca(Long codigo) {
return dao.busca(codigo);
}
//Gets e Sets
}
M – Classe DAO especifico para Agente pacote br.to.gov.DAO classe
AgenteDAO.java
package br.to.gov.DAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.to.gov.modelo.Agente;
@Override
public void adicionar(Agente t){
dao.adicionar(t);
}
@Override
public void alterar(Agente t){
dao.alterar(t);
}
@Override
public void deletar(Agente t){
dao.remove(t);
}
@Override
public List<Agente> lista(){
return dao.lista();
}
@Override
public Agente busca(Long codigo) {
return dao.busca(codigo);
}
//Gets e Sets
}
N – Demais classes do pacote br.to.gov.DAO
O – EntityConverter.java esta no pacote br.to.gov.conversor
/**
* Converter para entidades JPA. Baseia-se nas anotações @Id e @EmbeddedId para
identificar o
* atributo que representa a identidade da entidade. Capaz de detectar as
anotações nas classes superiores.
*
* @author Flávio Henrique
* @version 1.0.3
* @since 05/10/2010
*/
@FacesConverter(value="entityConverter")
public class EntityConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component,
String value) {
if (value != null) {
return component.getAttributes().get(value);
}
return null;
}
List<Class<?>> hierarquiaDeClasses =
this.getHierarquiaDeClasses(clazz);
}
return hierarquiaDeClasses;
}
}
P – Classes do pacote br.to.gov.beans - AdvogadoBean.java
package br.to.gov.beans;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import br.to.gov.DAO.AdvogadoDAO;
import br.to.gov.modelo.Advogado;
import br.to.gov.util.JPAUtil;
@ManagedBean
@RequestScoped
public class AdvogadoBean implements Serializable {
private static final long serialVersionUID = 1L;
public AdvogadoBean() {
em = new JPAUtil().getEntityManager();
dao = new AdvogadoDAO(em);
advogado = new Advogado();
advogados = null;
}
//Salvar e alterar
public void salvar(){
em.getTransaction().begin();
try{
advogado.setDataCadastro(data);
dao.alterar(advogado);
context.addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastrado","Advogado Cadastrado com
sucesso!" ));
em.getTransaction().commit();
}catch(PersistenceException e){
context.addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR,"Ops","Advogado ja cadastrado!" ));
}finally{
if(em != null){
em.close();
}
}
}
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import br.to.gov.DAO.InternoDAO;
import br.to.gov.modelo.Interno;
import br.to.gov.util.JPAUtil;
@ManagedBean
@RequestScoped
public class InternoBean implements Serializable {
private static final long serialVersionUID = 1L;
public InternoBean() {
em = new JPAUtil().getEntityManager();
dao = new InternoDAO(em);
interno = new Interno();
internos = null;
}
<ui:composition template="/templates/template.xhtml">
<ui:define name="conteudo">
<h:form id="edicao">
<p:panel id="painel" toggleable="true">
<f:facet name="header">
<h:graphicImage library="imagens" name="agente.png" />
<h:outputText value="Cadastro/Alteração - Agentes"
styleClass="titulos"/>
</f:facet>
<p:growl id="msn" showDetail="true" sticky="true"
showSummary="false"/>
<h:panelGrid columns="2">
<h:outputLabel value="Código:" />
<p:inputText id="codigo" value="#{agenteBean.agente.codigo}"
readonly="true" size="20"/>
<h:outputLabel value="Nome:" />
<p:inputText id="nome" value="#{agenteBean.agente.nome}" size="40"
required="true" requiredMessage="Campo NOME Obrigatório"/>
<h:outputLabel value="Login:" />
<p:inputText id="username" value="#{agenteBean.agente.login}"
size="40" required="true" requiredMessage="Campo LOGIN Obrigatório">
<f:validateLength minimum="3" maximum="15"/>
</p:inputText>
<h:outputLabel value="Senha:" rendered="#{agenteBean.agente.nome ==
null}"/>
<p:password id="password" rendered="#{agenteBean.agente.nome ==
null}" value="#{agenteBean.agente.senha}" size="20" required="true"
requiredMessage="Campo SENHA Obrigatório">
<f:validateLength minimum="3" maximum="15"/>
</p:password>
<h:outputLabel value="Matricula:" />
<p:inputText id="matricula" value="#{agenteBean.agente.matricula}"
size="20" required="true" requiredMessage="Campo MATRICULA Obrigatório"/>
<h:outputLabel value="Telefone:" />
<p:inputMask mask="(99) 9999-9999" id="telefone"
value="#{agenteBean.agente.telefone}" size="20"/>
<h:outputLabel value="Celular:" />
<p:inputMask mask="(99) 9999-9999" id="celular"
value="#{agenteBean.agente.celular}" size="20"/>
<h:outputLabel value="Email:" />
<p:inputText id="email" value="#{agenteBean.agente.email}" size="40"
required="true" requiredMessage="Campo EMAIL Obrigatório">
<f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.
[a-zA-Z][a-zA-Z\.]*[a-zA-Z]" />
</p:inputText>
<h:outputText value="Lotação:" />
<p:selectOneMenu id="lotacao" value="#{agenteBean.agente.lotacao}"
required="true" requiredMessage="O TIPO de unidade deve ser selecionado">
<ui:composition template="/templates/template.xhtml">
<ui:define name="conteudo">
<h:form id="form">
<p:panel header="Lista de Agentes Cadastrados" toggleable="true">
<h:outputLink value="/Sisgespen/administrador/cadastroAgente.jsf">
<h:graphicImage library="imagens" name="adicionar.gif" style="border:0"/>
</h:outputLink>
<h:outputText value=" - " />
<h:commandLink>
<h:graphicImage library="imagens" name="pdf.png" title="Imprimir PDF"/>
<p:dataExporter type="pdf" target="ListaAgentes" fileName="agente"/>
</h:commandLink>
<p:column>
<f:facet name="header">Nome</f:facet>
<h:outputText value="#{agente.nome}" />
</p:column>
<p:column>
<f:facet name="header">Matricula</f:facet>
<h:outputText value="#{agente.matricula}" />
</p:column>
<p:column>
<f:facet name="header">Login</f:facet>
<h:outputText value="#{agente.login}" />
</p:column>
<p:column>
<f:facet name="header">Telefone</f:facet>
<h:outputText value="#{agente.telefone}" />
</p:column>
<p:column>
<f:facet name="header">Email</f:facet>
<h:outputText value="#{agente.email}" />
</p:column>
<p:column>
<f:facet name="header">Lotação Atual</f:facet>
<h:outputText value="#{agente.lotacao.nome}" />
</p:column>
<p:column>
<f:facet name="header">Senha</f:facet>
<h:outputText value="#{agente.senha}" />
</p:column>
<p:column>
<f:facet name="header">Data Início Lotação</f:facet>
<h:outputText value="#{agente.inicioLotacao}">
<f:convertDateTime showOn="button" pattern="dd/MM/yyyy" locale="pt_BR"/>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Permissão no Sistema</f:facet>
</p:column>
<p:column>
<f:facet name="header">Editar</f:facet>
<p:commandLink action="#{agenteBean.alterar}">
<h:graphicImage library="imagens" name="Editar.png" style="border:0"/>
<f:setPropertyActionListener target="#{agenteBean.agente}"
value="#{agente}" />
</p:commandLink>
</p:column>
<sec:ifAnyGranted roles="ROLE_ADMINISTRADOR">
<p:column>
<f:facet name="header">Excluir</f:facet>
<p:commandLink action="#{agenteBean.excluir}" onclick="if (!
confirm('Confirma a exclusão do Agente #{agente.nome}')) return false"
update="@form">
<h:graphicImage library="imagens" name="excluir.gif" style="border:0"/>
<f:setPropertyActionListener target="#{agenteBean.agente}"
value="#{agente}" />
</p:commandLink>
</p:column>
</sec:ifAnyGranted>
</p:dataTable>
<h:commandLink>
<p:graphicImage library="imagens" name="pdf.png" title="Imprimir PDF"/>
</h:commandLink>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</html>
V – Arquivos xhtml para consultas de Internos
<ui:composition template="/templates/template.xhtml">
<ui:define name="conteudo">
<h:form id="formNome">
<p:panel header="Consulta Internos por nomes" toggleable="true">
<p:growl id="msn" showDetail="true" sticky="true" showSummary="false"/>
<p:panelGrid columns="2">
<h:outputText value="Digite o NOME do Interno" />
<p:inputText id="nome" value="#{internoBean.interno.nome}" size="40"
required="true" requiredMessage="Digite o Nome do Interno a ser procurado"/>
<h:form id="formApelido">
<p:panel header="Consulta Interno por Apelido" toggleable="true">
<p:growl id="msn" showDetail="true" sticky="true" showSummary="false"/>
<p:panelGrid columns="2">
<h:outputText value="Digite o APELIDO do Interno" />
<p:inputText id="apelido" value="#{internoBean.interno.apelido}" size="40"
required="true" requiredMessage="Digite do Interno a ser procurado"/>
<h:head>
</h:head>
<h:body>
<p:menubar>
<p:menuitem id="principal" value="Principal" url="/publico/principal.jsf"
icon="/imagens/Editar.png"></p:menuitem>
<p:submenu label="Cadastros" icon="ui-icon-pencil">
<p:menuitem id="cadastroAgente" value="Cadastro Agentes"
url="/cadastros/cadastroAgente.jsf"/>
<p:menuitem id="cadastroTipoUnidade" value="Cadastro Tipo Unidade"
url="/cadastros/cadastroTipoUnidade.jsf"/>
<p:menuitem id="cadastroUnidade" value="Cadastro Unidade Prisional"
url="/cadastros/cadastroUnidadePrisional.jsf"/>
<p:menuitem id="cadastroPavilhaoPorUnidade" value="Cadastro Pavilhão por
Unidade" url="/cadastros/cadastroPavilhao.jsf"/>
<p:menuitem id="cadastroCelasPorPavilhao" value="Cadastro Celas por
Pavilhão" url="/cadastros/cadastroCelas.jsf"/>
<p:menuitem id="cadastroOcupacao" value="Cadastro Ocupações"
url="/cadastros/cadastroOcupacoes.jsf"/>
<p:menuitem id="cadastroInstrucao" value="Cadastro Graus de Instruções"
url="/cadastros/cadastroGrauInstrucao.jsf"/>
<p:menuitem id="cadastroEstadoCivil" value="Cadastro Estado Civil"
url="/cadastros/cadastroEstadoCivil.jsf"/>
<p:menuitem id="cadastroAdvogado" value="Cadastro Advogados"
url="/cadastros/cadastroAdvogado.jsf"/>
<p:menuitem id="cadastroInterno" value="Cadastro Internos"
url="/cadastros/cadastroInterno.jsf"/>
</p:submenu>
<p:submenu label="Listagens" icon="ui-icon-document">
<p:menuitem value="Listagem Agentes" url="/listagens/listaAgentes.jsf"/>
<p:menuitem value="Listagem Tipos de Unidades"
url="/listagens/listaTiposUnidades.jsf"/>
<p:menuitem value="Listagem Unidades Prisonais"
url="/listagens/listaUnidades.jsf"/>
<p:menuitem value="Listagem Pavilhoes por Unidades Prisonais"
url="/listagens/listaPavilhoesUnidades.jsf"/>
<p:menuitem value="Listagem Celas por Pavilhoes e Unidades Prisonais"
url="/listagens/listaCelasPavilhoesUnidades.jsf"/>
<p:menuitem value="Listagem Ocupações" url="/listagens/listaOcupacoes.jsf"/>
<p:menuitem value="Listagem Graus de Instruções"
url="/listagens/listaGrausInstrucoes.jsf"/>
<p:menuitem value="Listagem Estados Civis"
url="/listagens/listaEstadoCivil.jsf"/>
<p:menuitem value="Listagem Advogados" url="/listagens/listaAdvogados.jsf"/>
<p:menuitem value="Listagem Internos - Dados Pessoais"
url="/listagens/listaInternosDadoPessoais.jsf"/>
<p:menuitem value="Listagem Internos - Dados Socioeconômicos"
url="/listagens/listaInternosDadoSocio.jsf"/>
</p:submenu>
<p:submenu label="Consultas" icon="ui-icon-search">
<p:menuitem value="Consultas de Agentes"
url="/consultas/consultaAgentes.jsf"/>
<p:menuitem value="Consultas de Internos"
url="/consultas/consultaInternos.jsf"/>
<p:menuitem value="Consultas de Advogados"
url="/consultas/consultaAdvogados.jsf"/>
<p:menuitem value="Consultas de Unidades Prisionais"
url="/consultas/consultaUnidadesPrisionais.jsf"/>
</p:submenu>
<p:submenu label="Relatórios" icon="ui-icon-gear">
</p:submenu>
<p:menuitem id="ajuda" value="Ajuda" url="/publico/ajuda.jsf" icon="ui-
icon-close" />
<p:menuitem id="sair" value="Sair" url="/publico/logout.jsf" icon="ui-icon-
close" />
</p:menubar>
</h:body>
</html>
X – Arquivos xhtml para o templade
<h:head>
<!-- Importação do arquivo de estilos -->
<h:outputStylesheet name="folha.css" library="css"></h:outputStylesheet>
<!-- Definição do titulo da aplicação, este também pode ser substuido para
cada pagina -->
<title>Sistema de Gestão Penitenciário</title>
</h:head>
<h:body>
<!-- Definição do div geral -->
<div id="geral">
<!-- Definições de um layout com um div geral e quatro internos, são
eles logo, topo, conteúdo e rodape -->
<div id="logo">
<ui:insert name="logo">
<h:graphicImage name="Sis-Gespen.png"
library="imagens"/><br />
<h:outputText value="Usuário Logado:
#{request.remoteUser}" />
</ui:insert>
</div>
<div id="topo">
<ui:include src="/publico/menu.xhtml"/>
</div>
<div id="conteudo">
<!-- Definição da parte a ser substituida as paginas -->
<ui:insert name="conteudo">Adicione aqui o conteudo</ui:insert>
</div>
<div style="clear: both;"></div>
<div id="rodape">
<ui:insert name="rodape">
<p:panel>Sistema de Gestão Penitenciário<br />Todos os
direitos reservados<br />Secretaria de Defesa Social</p:panel>
</ui:insert>
</div>
</div>
</h:body>
</html>
Y – Tela de cadastro dos Agentes