202
UNIVERSIDADE FEDERAL DE SANTA CATARINA Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral Baseado em Tecnologias de Código Aberto MARCELO DE ANDRADE MACHADO JUNHO/2004

Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos ... · UNIVERSIDADE FEDERAL DE SANTA CATARINA Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral

  • Upload
    lamphuc

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

UNIVERSIDADE FEDERAL DE SANTA CATARINA

Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral Baseado em Tecnologias de Código

Aberto

MARCELO DE ANDRADE MACHADO

JUNHO/2004

2

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA CURSO CIÊNCIAS DA COMPUTAÇÃO

MARCELO DE ANDRADE MACHADO

Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral Baseado em Tecnologias de Código

Aberto

Florianópolis, 15 de outubro de 2004.

____________________________________ Prof. Leandro J. Komosinski

Orientador

_____________________________________ José Leomar Todesco

Banca

_____________________________________ Maria Marta Leite

Banca

Sumário

Resumo ................................................................................................................................... 5

Capítulo 1 – Introdução .......................................................................................................... 6

1.1 Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral... 7 1.2 Solução ......................................................................................................................... 8 1.3 Objetivo Geral .............................................................................................................. 9 1.4 Objetivos Específicos ................................................................................................... 9

Capítulo 2 - Contextualização .............................................................................................. 10

2.1 Sobre a Solução .......................................................................................................... 10 2.2 Ferramentas Utilizadas ............................................................................................... 12

2.2.1 JSP (Java Server Pages)....................................................................................... 12 2.2.2 JasperReports....................................................................................................... 13 2.2.3 Hibernate ............................................................................................................. 14 2.2.4 MySQL ................................................................................................................ 16 2.2.5 Struts.................................................................................................................... 17 2.2.6 Microsoft Visio.................................................................................................... 17

2.3 Requisitos do Sistema................................................................................................. 17 Capítulo 3 – Base de Dados.................................................................................................. 19

3.1 Modelagem ................................................................................................................. 19 3.1.1 Tabela Pessoa ...................................................................................................... 21 3.1.2 Tabela Grupo ....................................................................................................... 21 3.1.3 Tabela Cantor ...................................................................................................... 22

3.2 Mapeamento ............................................................................................................... 22 3.2.1 Vantagens do Hibernate ...................................................................................... 23

Capítulo 4 - Desenvolvimento.............................................................................................. 24

4.1 Atores do Sistema....................................................................................................... 24 4.1.1 Maestro ................................................................................................................ 24 4.1.2 Professor .............................................................................................................. 24 4.1.3 Cantor .................................................................................................................. 24

4.2 Análise ........................................................................................................................ 25 4.2.1 Casos de Uso ....................................................................................................... 25

4.3 Projeto......................................................................................................................... 30 4.3.1 Pessoa .................................................................................................................. 31 4.3.2 Cantor .................................................................................................................. 31

4

4.3.3 Maestro ................................................................................................................ 31 4.3.4 Professor .............................................................................................................. 31 4.3.5 Administrador...................................................................................................... 32

4.4 Implementação............................................................................................................ 32 4.4.1 Camada de Apresentação..................................................................................... 32 4.4.2 Camada Lógica .................................................................................................... 35 4.4.3 Camada de Persistência ....................................................................................... 38

Capítulo 5 – Funcionamento da Aplicação .......................................................................... 42

5.1 Antes de Logado......................................................................................................... 42 5.2 Após Logado .............................................................................................................. 46

Conclusão ............................................................................................................................. 55

Referências Bibliográficas.................................................................................................... 56

5

MACHADO, Marcelo de Andrade. Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral Baseado em Tecnologias de Código Aberto. 2004. 57p. Trabalho de Conclusão de Curso – Centro de Informática e Estatística, Universidade Federal de Santa Catarina, 2004.

Resumo

Desenvolve uma aplicação WEB que realiza o gerenciamento de alunos em grupos

de canto, além de gerar relatórios dos alunos matriculados nesses grupos. São utilizadas tecnologias de código aberto construídas em Java com exceção do banco de dados. As ferramentas utilizadas para desenvolver essa aplicação foram: Java, JSP, JasperReports, MySQL, Hibernate e Struts. As funcionalidades que a aplicação deve satisfazer foram informadas por um cliente, pessoa ao qual o programa é destinado. Os resultados obtidos são de grande valia tanto para os usuários do sistema como para o desenvolvedor. Grandes conhecimentos foram adquiridos na pesquisa e na implementação das tecnologias, elas facilitam muito o trabalho e deixam mais simples a forma de programar.

6

Capítulo 1 – Introdução

Na década de 90, a Internet atraiu a atenção de todos, com a promessa de sistemas

revolucionários, de acesso e processamento de informações de qualquer lugar do planeta.

Vários sistemas passaram a ser desenvolvidos em plataformas distribuídas e de código

aberto, usufruindo das vantagens da velocidade, segurança e confiabilidade.

A WEB continuou se popularizando e a cada dia novos usuários descobrem o

emocionante prazer de navegar na Internet. Ela fornece uma vasta biblioteca de

informações e serviços que, muitos deles, podem ser usados gratuitamente.

Ao longo dos anos, o processo de desenvolvimento de sistemas tem mudado,

elevando significativamente a maturidade desta área. Novas tecnologias surgiram para

reduzir os custos e acelerar o desenvolvimento, dentre elas a Java 2 Plataform, Enterprise

Edition (J2EE) (Sun, 2004), que oferece um modelo de aplicação distribuída em

multicamada baseada em componentes.

As informações de uma aplicação são armazenadas normalmente em uma ou mais

base de dados. A integridade dos dados seria afetada se múltiplos programas pudessem

atualizar os dados simultaneamente. Uma falha de sistema durante o processamento de uma

transação causaria um afeto parcial dos dados, gerando problemas de consistência. As

transações do banco de dados precisam ser precisas, atuais e confiáveis. Deve prover o

controle de acesso concorrente aos dados por múltiplos programas e, em caso de falha do

sistema, devem certificar que após a recuperação os dados estarão em um estado

consistente.

7

Para se construir uma aplicação WEB existe uma série de ferramentas que podem

ser utilizadas. A escolha é baseada nos benefícios que cada uma pode trazer para o projeto e

se o “custo-benefício” vale a pena.

O cadastro de cantores nos grupos de canto ainda é feito a mão através de uma ficha

de inscrição. Além disso, surgiu a necessidade de emitir relatórios de alunos matriculados.

Com o intuito de facilitar a vida das pessoas e agilizar seu trabalho foi pensado em uma

aplicação WEB de apoio ao gerenciamento de grupos de Canto Coral.

Não foi possível encontrar nenhuma aplicação que correspondesse exatamente ao

problema proposto. O site de busca utilizado foi o Google.

Porém existem algumas ferramentas que, se utilizados em conjunto, podem ajudar a

resolvê-lo. Esses serão apresentados em seguida.

1.1 Uma Aplicação para WEB de Apoio ao Gerenciamento de

Grupos de Canto Coral.

Esse projeto pretende resolver basicamente 2 problemas.

1. Para se cadastrar num grupo Coral, o Cantor tem que preencher uma ficha e

entrega-la a pessoa responsável. Esse sistema não possui uma forma muito prática de

cadastramento, pelo fato dele ser feito a mão através de uma ficha de inscrição.

2. Muitas vezes é preciso fornecer listagens impressas com apenas algumas

informações dos membros. Por exemplo: num dia é necessário gerar uma listagem onde

apareça apenas nome, RG e número do passaporte dos integrantes. Noutro dia é preciso

8

gerar outra listagem com nome, RG e curso (caso ele esteja ingressado em uma faculdade).

Ás vezes a lista deve estar em ordem alfabética pelos nomes, outras vezes deve estar em

ordem alfabética pelo curso, etc.

1.2 Solução

Uma aplicação para a WEB seria de grande ajuda e apoio a todos os participantes do

grupo Coral e também àqueles que pretendem ingressar no grupo. O maestro, pessoa que

realiza o cadastro dos membros, encontraria nessa aplicação um ambiente favorável para a

administração dos mesmos, ganhando assim tempo para realizar atividades mais

importantes.

A solução para os problemas propostos segue respectivamente:

1. O cadastro de uma pessoa será realizado via WEB. O interessado em entrar no

grupo acessará uma página na Internet e preencherá seus dados cadastrais. Após isso,

receberá um e-mail para confirmar sua inscrição no grupo. Isso efetivaria o cadastro,

permitindo assim, o acesso ao sistema e o ingresso no grupo.

2. Os relatórios com informações dos membros também será obtida via Internet. O

professor (única pessoa autorizada a emitir relatórios) apenas informará o que a listagem

deve conter, por exemplo o nome, RG e idade do cantor. Após isso, bastaria clicar em um

botão para que o relatório fosse gerado e apresentado ao professor.

Para o armazenamento dos dados da pessoa(nome, endereço, curso, etc) será

utilizado um banco de dados que possa ser facilmente adaptado, ou seja, a medida que haja

9

necessidade de inserir novos registros, é possível definir novas tabelas (ou também excluí-

las) sem ter que mudar toda a base de dados nem a aplicação.

1.3 Objetivo Geral

Desenvolver uma aplicação WEB de apoio ao gerenciamento de grupos de canto

coral utilizando tecnologias de código aberto.

1.4 Objetivos Específicos

Estudar o funcionamento das tecnologias Java, em especial Struts, JasperReports e

Hibernate.

Desenvolver uma aplicação que facilite o trabalho das pessoas.

10

Capítulo 2 - Contextualização

Aplicações WEB são aplicações que usam a infra-estrutura da Internet, ou seja, a

interface de comunicação com o usuário é um programa cliente WEB (navegadores,

clienteftp, etc).

Para que uma aplicação seja bem sucedida, é necessário obter a requisição do cliente

através da Internet (o que o usuário quer fazer), como tratar e executar as ações que estes

dados demandam (o que fazer), garantir a segurança que as ações não possam comprometer

todo o sistema (o que não se pode fazer), tratar a resposta e formatar a saída de maneira que

o usuário possa ler (diagramação da saída em formato HTML).

2.1 Sobre a Solução

A fim de solucionar o problema acima mencionado, será desenvolvida uma

aplicação cujo principal intuito é de facilitar o trabalho das pessoas que fazem parte do

grupo de canto Coral.

Para resolver o problema do cadastro de pessoas será construído, portanto um

sistema gerenciador de cadastros. Essa aplicação funcionará da seguinte forma: um cantor

se cadastra via WEB no sistema. Nesse cadastro, além dos campos regulares, também

haverá um campo de login e um de senha. Para garantir que o login seja único, ele será o e-

mail da pessoa. Isso garante que o cantor que se cadastrou é o mesmo que possui o e-mail.

Caso o indivíduo não possua endereço de e-mail, ele não poderá mudar seus dados

11

cadastrais pessoalmente, pois as informações contidas nesses dois campos serão utilizadas

para validar o usuário no sistema.

Uma vez cadastrado, o cantor pode acessar o sistema informando seu login e sua

senha. Dentro do sistema, é possível mudar seus dados cadastrais bem como sua senha e se

excluir do grupo.

Caso a pessoa seja um professor, ela acessará uma tela diferente onde apenas

digitará seu nome, e-mail (que servirá como login) e senha. Após isso, receberá um e-mail

para confirmar sua inscrição que, depois de confirmado, poderá acessar automaticamente o

sistema sem necessidade de autorização do administrador. Lá dentro, ele poderá visualizar a

ficha de todos os integrantes.

A ferramenta que será utilizada para o desenvolvimento dessa aplicação será o JSP.

Para resolver o problema de emissão de relatórios, optou-se pela utilização de um

software desenvolvido também em JAVA, o JasperReports. Ele será utilizada da seguinte

forma: haverá uma página dentro do sistema em que o usuário selecionará os atributos que

o relatório irá apresentar. Por exemplo: o usuário informa que será um relatório de

integrantes, depois informa quais atributos desse integrantes (nome, sexo, endereço)

deverão ser apresentados e, para cada um, se existe alguma restrição. Caso ele deseje por

exemplo selecionar apenas aquelas pessoas cujo nome comece com a letra A ou aquelas

que se cadastraram no mês de Abril, etc.

O Banco de Dados utilizado será o MySQL e, para fazer a persistência dos dados,

será utilizado o Hibernate.

12

2.2 Ferramentas Utilizadas

As ferramentas utilizadas para desenvolver essa aplicação são todas gratuitas. São

elas: JSP, JasperReports, MySQL, Hibernate, Struts e Microsoft Visio.

2.2.1 JSP (Java Server Pages)

Os motivos para escolher JSP para desenvolver essa aplicação foram que Java

(linguagem base do JSP) é uma linguagem de programação multi-plataforma, ou seja, um

programa feito em Java pode rodar em qualquer sistema operacional. Isso é possível devido

a um componente chamado Java Virtual Machine (JVM). O JVM trabalha como um

tradutor Java que processa os bytecodes (código gerado após a compilação) nos arquivos

.class (classes compiladas) e os executa.

Java foi apresentado comercialmente em 1995. Desde então, o número de

programadores dessa linguagem vem crescendo consideravelmente.

JSP é uma tecnologia que permite criar páginas WEB dinamicamente. Por ser uma

tecnologia Java, uma página JSP pode ser acessada em qualquer plataforma não importando

o tipo de navegador utilizado. Além disso, Java possui uma vasta biblioteca de classes que

facilitam e agilizam o trabalho.

JSP é ainda ferramenta baseada em scripts, cuja sintaxe une Java e HTML. Dentre

as vantagens da tecnologia Java para a WEB, podemos citar:

• Portabilidade – Todas as aplicações Java seguem e adotam uma API bem

definida e aceita;

13

• Recursos de linguagem – A linguagem Java oferece uma grande variedade

de recursos prontos, por exemplo, acesso a rede, compactação de dados, uso

de aplicações distribuídas em servidores distintos;

• Uso simples e eficiente – Um servlet é carregado na memória como uma

única instância de objeto, que fica na memória, independente da quantidade

de requisições.

O JSP funciona da seguinte forma: o usuário faz uma requisição, através de seu

navegador, de uma página JSP. Essa requisição é interpretada por um servidor que, através

do JSP Engine, a página é compilada e transformada em um servlet. Servlets são classes

Java, que tem a propriedade especial de serem executadas em um servidor. Esse, por suas

vez, se encarrega de gerar o HTML que é retornado ao usuário.

2.2.2 JasperReports

JasperReports é uma ferramenta para geração de relatórios escrita inteiramente em

Java que recebe como entrada uma descrição estruturada do relatório. Essa descrição é

armazenada num arquivo XML que contém toda a descrição do relatório e, ao ser

compilado, gera um arquivo com extensão jasper. Ele possui, por exemplo, as definições da

página (altura, largura, margem, etc), possui também a definição dos parâmetros que são

utilizados no SQL de consulta, que também deve ficar nesse arquivo. Ele contém a

descrição de cada campo do banco de dados, ou seja, se o campo é do tipo String, Integer

ou Boolean, entre outras informações.

14

Os relatórios podem ser montados de duas formas: Através da criação de um

arquivo XML totalmente escrito por um editor de texto, ou através de uma ferramenta

conhecida como iReport que possui uma interface gráfica para construção de relatórios,

gerando automaticamente o arquivo XML.

Os relatórios podem ser impressos em vários formatos, incluindo PDF, HTML, XLS

ou CSV. Além disso, o JasperReport possui um formato padrão que, se nenhum dos outros

formatos tiver sido informado, o relatório é gerado no formato padrão.

2.2.3 Hibernate

Segundo o conteúdo da página http://www.hibernate.org.br, Hibernate é uma

ferramenta para aplicações Java que possibilita uma relação Objeto-Relacional com o

Banco de Dados. Ele proporciona o mapeamento do conjunto de dados de um banco de

dados para uma linguagem Orientada a Objetos.

Ao iniciar a aplicação, o Hibernate obtém todas as informações do Banco de Dados

e os “transforma” em objetos. Ao se fazer uma consulta basta apenas se referenciar ao

objeto específico. Dessa forma, as atualizações e inserções se tornam muito mais práticas.

O programador pode portanto escrever código em Java que, transparentemente,

acessa a base de dados sem utilizar SQL.

A Figura 1 possui um modelo da arquitetura do relacionamento do Hibernate com o

Banco de Dados e o mundo Orientado a Objetos.

15

Figura 1- “Arquitetura do Hibernate” - Extraída do arquivo hibernate.pdf [Peinado, pg 10]

O Hibernate pode ser utilizado com vários bancos de dados. No caso de MySQL,

por exemplo, basta apenas informar o usuário (user), a senha (password) e sua localização

(localhost) no arquivo de configuração do Hibernate “hibernate.properties”. Isso faz do

Hibernate uma ferramenta prática e fácil de se utilizar, permitindo um desenvolvimento

mais rápido e um processo de manutenção mais simples, mesmo para os desenvolvedores

que não tenham familiaridade com SQL.

Com o intuito de aprender o funcionamento do Hibernate foi utilizado 3

ferramentas: o Eclipse, que é uma IDE Java, o Ant, que é uma ferramenta Java para

construção de projetos (build) onde a configuração é feita em XML, e o XDoclet que é uma

ferramenta de geração de código. O que o XDoclet faz é gerar um arquivo XML para cada

classe da aplicação. Essa classe contém todos os campos de uma tabela no banco de dados.

O XML gerado é o arquivo que contém a descrição de cada campo da tabela.

16

2.2.4 MySQL

“Um banco de dados é uma coleção de dados estruturados. Ele pode ser qualquer

coisa desde uma simples lista de compras a uma galeria de imagens ou a uma grande

quantidade de informação da sua rede coorporativa. Para adicionar, acessar, e processar

dados armazenados em um banco de dados de um computador, você necessita de um

sistema de gerenciamento de bancos de dados como o Servidor MySQL. Como os

computadores são muito bons em lidar com grandes quantidades de dados, o gerenciamento

de bancos de dados funciona como a engrenagem central na computação, seja como

utilitários independentes ou como partes de outras aplicações.”( MySQL AB, 2004)

O MySQL é uma banco de dados relacional gratuito. Um banco de dados funciona

como um “armário” que armazena informações em tabelas. Essas tabelas normalmente

armazenam informações textuais, porém, também podem armazenar arquivos. Por

exemplo, em um banco de dados pode ser criada uma tabela nomeada Pessoa. Dentro desta

pode haver informações relacionadas a uma pessoa, como nome, idade, endereço, etc.

“Um banco de dados relacional armazena dados em tabelas separadas em vez de

colocar todos os dados um só local. Isso proporciona velocidade e flexibilidade. A parte

SQL do MySQL atende pela “Structured Query Language” - Linguagem Estrutural de

Consultas''. SQL é a linguagem padrão mais comum usada para acessar banco de dados e é

definida pelo Padrão ANSI/ISO SQL. .”( MySQL AB, 2004)

17

2.2.5 Struts O Struts é um framework Java baseada na arquitetura Modelo 2 (Model 2, 2004).

Ele possui um controlador que permite trabalhar tanto com a interface da aplicação (JSP),

quanto com tecnologias de acesso a dados como JDBC, EJB e Hibernate.

Struts permite a troca de informações entre a interface e a lógica da aplicação

através das suas classes Action e Form declarados em um arquivo XML.

2.2.6 Microsoft Visio O Visio é uma ferramenta de modelagem que utiliza notação UML. Ele pode ser

utilizado por exemplo para se modelar as tabelas de um banco de dados.

2.3 Requisitos do Sistema

Os requisitos do sistema são as funcionalidades que a aplicação deve ter. São eles:

Requisito 1: Cadastrar Cantor;

Requisito 2: Autenticar Pessoa;

Requisito 3: Editar Cantor;

Requisito 4: Alterar Senha;

Requisito 5: Excluir Cantor;

Requisito 6: Administrar Pessoa (Administrador);

18

Requisito 7: Emitir Relatórios;

Requisito 8: Cadastrar Grupo;

Requisito 9: Cadastrar Professor;

19

Capítulo 3 – Base de Dados

Toda aplicação deve conter uma base de dados para guardar as informações

relativas ao cliente que a usufrui. As transações do banco devem ser precisas, atuais e

confiáveis. Deve prover o controle de acesso concorrente aos dados por múltiplos

programas e, em caso de falha do sistema, devem certificar que após a recuperação os

dados estarão em um estado consistente.

Neste capítulo serão abordados os detalhes de mapeamento e modelagem das

tabelas da base de dados e a forma em que o Hibernate mapeia as informações contidas

numa base de dados relacional para um “mundo” orientado a objetos.

3.1 Modelagem

Para se desenhar a modelagem das tabelas de um banco, é necessário entender quais

informações serão relevantes e que devem ser armazenadas.

A Figura 3 apresenta a modelagem desenvolvida para o programa. Essa modelagem

foi feita com o auxílio da ferramenta Microsoft Visio.

20

Figura 3- Modelagem das Tabelas do Banco de Dados.

A sigla PK ao lado do nome do atributo da tabela significa “chave primária”

(Primary Key). Esse atributo é responsável por identificar uma única tupla na tabela. A

sigla FK significa “chave estrangeira” (Foreign Key). Esse atributo faz a ligação entre duas

tabelas. Por exemplo a tabela Idiomas possui a chave estrangeira id_cantor. Portanto, cada

21

cantor pode possuir 1 ou mais Idiomas. As flechas entre as tabelas representam o

relacionamento entre elas.

Como pode ser visto, o banco é dividido em 8 tabelas. As tabelas mais importantes e

seus relacionamentos serão explicados a seguir.

3.1.1 Tabela Pessoa

Nessa tabela são armazenadas todas as informações referentes a uma pessoa. Ela

ainda possui uma referência a tabela Endereço de 1 para 1, ou seja, uma pessoa pode ter

apenas um endereço e vice-versa, um endereço pode pertencer a apenas uma pessoa.

Ela possui relação com as demais tabelas Cantor, Professor, Administrador e

Maestro. Cada uma dessas tabelas é um tipo particular de pessoa. O atributo “tipo_pessoa”

(Veja a tabela Pessoa) identifica cada tipo de pessoa, Cantor, Professor, Administrador ou

Maestro. Sem ele, seria necessário realizar várias consultas no banco para saber a quem

pertencem o e-mail e a senha informados na autenticação, por exemplo.

3.1.2 Tabela Grupo

Nessa tabela são registrados os grupos de canto Coral. As únicas tabelas que

possuem relação com ela são o Cantor e o Maestro, pois são as únicas pessoas que podem

participar de um grupo.

22

3.1.3 Tabela Cantor

Essa tabela possui as informações específicas de um cantor, assim como o grupo em

que ele participa.

3.2 Mapeamento

Para que o mapeamento da base de dados através do Hibernate fosse possível, foi

necessário a realização de 3 procedimentos:

Primeiro: Criar uma classe Java para cada tabela do banco. No comentário de cada

método descrever as propriedades do atributo necessárias para o mapeamento.

Segundo: Criar os arquivos XML para cada classe contendo a descrição de cada

atributo, o tipo e a coluna relacionada, além de outras propriedades.

Terceiro: Geração da classe de persistência. Essa classe é quem faz a conexão entre

o mundo orientado a objetos e o mundo relacional. Isso funciona da seguinte forma: Ao se

fazer uma seleção na base de dados de uma pessoa por exemplo, a tupla referente a ela será

instanciada num objeto da classe Pessoa. Portanto, cada atributo da tabela será mapeado

para o atributo dessa classe. Caso haja alguma inconsistência entre as duas partes, por

exemplo na classe Pessoa foi esquecido de declarar o atributo nome, ocorrerá um erro e

nenhum registro do banco será mapeado.

23

Portanto, todas as informações contidas no banco devem ser declaradas

corretamente tanto na classe Java como no arquivo XML. Para que não ocorra um erro de

mapeamento.

3.2.1 Vantagens do Hibernate

O Hibernate trata todas as tabelas como objetos. Para alterar os dados de um

registro de uma tabela, basta apenas instanciar (pegar da base de dados) esse objeto,

modificá-lo e salvá-lo novamente no banco. Para salvar ou remover é ainda mais fácil. No

primeiro basta apenas criar um novo objeto, preenchê-lo e salvá-lo no banco. No segundo,

basta informar a sua chave primária e chamar o método que remove um registro do banco.

O Hibernate utiliza o HQL (Hibernate Query Language), uma linguagem de

consulta parecida com o SQL, porém orientado a objetos. Os atributos informados no HQL

não são os atributos da tabela, mas sim do objeto instanciado. Por utilizar uma linguagem

de consulta própria, o Banco de Dados pode ser alterado sem modificação do código fonte.

Basta apenas modificar o arquivo “hibernate.properties”, comentado no capítulo 2.

24

Capítulo 4 - Desenvolvimento

Neste capítulo serão relatado as etapas do desenvolvimento da aplicação: a Análise,

o Projeto e a Implementação.

4.1 Atores do Sistema

Ao analisar o funcionamento da aplicação pode-se perceber que existem três atores:

4.1.1 Maestro

Pessoa que ministra um curso.

4.1.2 Professor

Pessoa que pode emitir relatórios dos cantores do sistema.

4.1.3 Cantor

Pessoa que preenche um formulário de cadastro para ingressar num grupo.

25

4.2 Análise

Nesse sistema foram identificados os seguintes objetos: grupo de canto coral,

maestro, cantor e professor. O grupo de canto coral é o grupo em que o cantor entra quando

se cadastra no sistema. Além disso, o grupo de canto é ministrado por um maestro. O

maestro é o administrador do sistema, é quem decide se um cantor pode ou não entrar no

grupo. Ele também pode emitir relatórios e têm acesso as informações de todos os

integrantes do grupo. O cantor é o integrante do grupo, podendo apenas modificar seus

dados cadastrais e sua senha. O professor é um usuário que pode emitir relatórios e

visualizar as informações dos cantores.

4.2.1 Casos de Uso

Casos de Uso são as funções exercidas pelos atores do sistema. É uma descrição do

processo que o sistema pode executar. Um caso de uso pode possuir os atributos Ator, que é

quem executa a função do caso de uso, Descrição, que descreve o caso de uso e Tipo,

atributo que indica a importância do caso de uso.

A seguir serão definidos os casos de uso para os requisitos “Cadastrar Cantor”,

“Editar Cantor”, “Alterar Senha”, “Autenticar Pessoa”, “Excluir Cantor”, “Administrar

Pessoa”, “Emitir Relatório”, “Cadastrar Grupo”, “Cadastrar Professor”:

Caso de Uso: Cadastro no Sistema

26

Ator: Cantor

Descrição: O cantor, após preencher seus dados cadastrais e submeter o

formulário receberá um e-mail para confirmar sua inscrição.

Tipo: Primário

• Seqüência dos eventos:

1. O cantor acessa o sistema e em seguida acessa a página de cadastro.

2. O cantor informa seus dados cadastrais e submete o formulário.

3. O sistema processa os dados e verifica se há algum erro.

4. O sistema efetiva o cadastro do cantor.

Caso de Uso: Editar Dados Cadastrais

Ator: Cantor

Descrição: O cantor, após autenticado no sistema, pode alterar seus dados

cadastrais.

Tipo: Secundário

• Seqüência dos eventos:

1. O cantor acessa o formulário de alteração de dados cadastrais.

2. O cantor altera seus dados cadastrais.

3. O sistema verifica se não há erros nos dados alterados.

4. O sistema efetiva a alteração.

27

Caso de Uso: Alterar Senha

Ator: Cantor, Maestro e Professor

Descrição: A pessoa, após autenticada no sistema, pode alterar suasenha.

Tipo: Secundário

• Seqüência dos eventos:

1. A pessoa acessa o formulário de alteração senha.

2. A pessoa altera sua senha.

3. O sistema verifica se não há erros.

4. O sistema efetiva a alteração.

Caso de Uso: Autenticar Pessoa

Ator: Cantor, Maestro e Professor

Descrição: A pessoa é autenticada no sistema através de seu e-mail e de sua

senha.

Tipo: Primário

• Seqüência dos eventos:

1. A pessoa preenche os campos e-mail e senha e clica no botão entrar.

28

2. O sistema verifica se essa pessoa possui cadastro no sistema.

3. O sistema permite a entrada da pessoa apresentando a tela de entrada.

Caso de Uso: Excluir Cantor

Ator: Maestro

Descrição: O cantor é excluído do sistema pelo maestro.

Tipo: Secundário

• Seqüência dos eventos:

1. O maestro informa qual cantor ele deseja excluir.

2. O sistema exclui o cantor da base de dados.

Caso de Uso: Administrar Pessoa

Ator: Maestro

Descrição: O maestro tem permissão para executar as seguintes funções:

visualizar e excluir cantor, emitir relatórios, cadastrar Grupo e

cadastrar Professor.

Tipo: Primário

• Seqüência dos eventos:

1. O maestro se autentica no sistema.

29

2. O maestro clica no link cuja função ele deseja executar.

3. O sistema atende ao pedido.

Caso de Uso: Emitir Relatórios

Ator: Maestro e Professor

Descrição: O maestro ou o professor pode emitir relatórios dos alunos

cadastrados no sistema.

Tipo: Primário

• Seqüência dos eventos:

1. O maestro ou o professor se autentica no sistema.

2. O maestro ou o professor clica no link emitir relatório.

3. O sistema apresenta a tela para emissão de relatório.

4. O maestro ou o professor seleciona os parâmetros do relatório e clica no

botão Emitir.

5. O sistema emite o relatório apresentando-o na tela.

Caso de Uso: Cadastrar Grupo

Ator: Maestro

Descrição: O maestro pode cadastrar um grupo no sistema

Tipo: Secundário

30

• Seqüência dos eventos:

1. O maestro se autentica no sistema.

2. O maestro clica no link Cadastrar Grupo.

3. O sistema apresenta a tela de cadastramento de um novo grupo.

4. O maestro informa os dados do novo grupo e clica no botão Cadastrar.

5. O sistema salva o novo grupo no banco de dados.

Caso de Uso: Cadastrar Professor

Ator: Maestro

Descrição: O maestro pode cadastrar um professor no sistema

Tipo: Secundário

• Seqüência dos eventos:

1. O maestro se autentica no sistema.

2. O maestro clica no link Cadastrar Professor.

3. O maestro informa os dados do professor e clica no botão Cadastrar.

4. O sistema salva o professor no banco de dados.

4.3 Projeto

31

Feito a análise do sistema, a solução adotada foi à criação dos seguintes objetos:

4.3.1 Pessoa

Objeto principal do sistema. Dele é herdado o Cantor, Maestro, Professor e

Administrador. Esse objeto possui todas as informações relacionadas a uma Pessoa.

4.3.2 Cantor

Objeto que possui todas as informações relacionadas a um cantor. Todos os cantores

são uma pessoa.

4.3.3 Maestro

Objeto que possui apenas a identificação do maestro e da pessoa. As informações

necessárias de um maestro estão no objeto pessoa.

4.3.4 Professor

Objeto que possui apenas a identificação do professor e da pessoa. As informações

necessárias de um professor estão no objeto pessoa.

32

4.3.5 Administrador

Objeto que possui apenas a identificação do administrador e da pessoa. As

informações necessárias de um administrador estão no objeto pessoa.

4.4 Implementação

A implementação do projeto foi feita em três camadas: Camada de Apresentação,

Camada Lógica e Camada de Persistência.

4.4.1 Camada de Apresentação

A camada de apresentação é formada pelas páginas dinâmicas do sistema (arquivos

com extensão jsp). Os principais arquivos estão listados abaixo.

4.4.1.1 index.jsp

O index.jsp é o arquivo de entrada no sistema. Ele é um frame que divide a página

em três outros arquivos: login.jsp, paginaNordeste.jsp e paginaSudeste.jsp.

33

4.4.1.2 login.jsp

O login.jsp é a página de entrada do sistema. Onde se é informado o email e a

senha.

4.4.1.3 paginaNordeste.jsp

A paginaNordeste.jsp é uma página fixa em que apresenta um texto representativo

da aplicação, “Sistema de Apoio aos Grupos do Movimento Coral”.

4.4.1.4 paginaSudeste.jsp

A paginaSudeste.jsp é onde apresenta as telas de cadastro do sistema.

4.4.1.5 cadastroParte1.jsp

Essa é a página que contém a primeira parte do cadastro de um cantor.

4.4.1.6 cadastroParte2.jsp

Essa é a página que contém a segunda parte do cadastro de um cantor.

4.4.1.7 cadastroParte3.jsp

34

Essa é a página que contém a terceira e última parte do cadastro de um cantor.

4.4.1.8 alteraSenha.jsp

A página alteraSenha.jsp possui os campos para alteração de senha.

4.4.1.9 atualizaDados.jsp

O atializaDados.jsp possui o formulário de alteração de dados de uma pessoa. 4.4.1.10 cadastraGrupo.jsp

A página cadastraGrupo.jsp possui os campos para criação de um novo grupo

4.4.1.11 cadastraProfessor.jsp

A página cadastraProfessor.jsp possui os campos para cadastro de professor.

4.4.1.12 gerarRelatorio.jsp

A página gerarRelatorio.jsp possui os campos para se gerar um relatório.

4.4.1.13 funcoesJavaScript.js

O arquivo funcoesJavaScript.js possui o código JavaScript utilizado na aplicação.

4.4.1.14 estiloCoral.css

O arquivo estiloCoral.css possui as propriedades de um campo ou texto da

aplicação. Como por exemplo cor, tamanho, fonte, entre outros.

35

4.4.2 Camada Lógica

A Camada Lógica é formada pelos arquivos que tratam da lógica da aplicação. Os

principais estão listados abaixo.

4.4.2.1 Pessoa.java

Classe que possui as informações relacionadas a uma pessoa.

4.4.2.2 Cantor.java

Classe que possui as informações relacionadas a um cantor.

4.4.2.3 Professor.java

Classe que possui as informações relacionadas a um professor.

4.4.2.4 Maestro.java

Classe que possui as informações relacionadas a um maestro.

4.4.2.5 Administrador.java

Classe que possui as informações relacionadas a um administrador.

4.4.2.6 Endereco.java

36

Classe que possui o endereço de uma pessoa

4.4.2.7 Idiomas.java

Classe que possui as os idiomas falados por um cantor.

4.4.2.8 Grupo.java

Classe que possui as informações relacionadas a um grupo.

4.4.2.9 ConstantesCoral.java

Classe que possui as constantes da aplicação.

4.4.2.10 Principal.java

Classe que possui os principais algoritmos do programa.

4.4.2.11 LoginAction.java

Classe que estende a classe Action do Struts, responsável por efetivar a autenticação

da pessoa.

4.4.2.12 LoginActionForm.java

Classe que estende a classe ActionForm do Struts, responsável por trazer da página

login.jsp os valores dos campos e-mail e senha.

37

4.4.2.13 AlteraSenha.java

Classe que estende a classe Action do Struts, responsável por alterar a senha da

pessoa.

4.4.2.14 CadastroParte1Action.java

Classe que estende a classe Action do Struts, responsável por armazenar as

informações da primeira parte do formulário de cadastro.

4.4.2.15 CadastroParte2.java

Classe que estende a classe Action do Struts, responsável por armazenar as

informações da segunda parte do formulário de cadastro.

4.4.2.16 CadastroParte3.java

Classe que estende a classe Action do Struts, responsável por armazenar as

informações da terceira parte do formulário de cadastro e efetiva-lo.

4.4.2.17 AtualizaDadosAction.java

Classe que estende a classe Action do Struts, responsável por efetivar a atualização

dos dados da pessoa.

38

4.4.2.18 Mensagens.propesties

Arquivo que contém as mensagens do programa. Como por exemplo, a mensagem

mostrada na figura 6.

4.4.2.19 GerarRelatorioAction.java

Gera o relatório e apresenta na tela.

4.4.2.20 nome_email.jasper

Arquivo utilizado pelo JasperReports para geração do relatório.

4.4.2.21 struts-config.xml

Arquivo onde se configura o mapeamento das classes Action e ActionForm do

Struts.

4.4.3 Camada de Persistência

Na camada de persistência encontram-se os arquivos que interagem com a base de

dados. Os principais estão listados abaixo.

39

4.4.3.1 Pessoa.hbm.xml

Arquivo em que se declara o mapeamento da tabela Pessoa para a classe Pessoa.

4.4.3.2 Cantor.hbm.xml

Arquivo em que se declara o mapeamento da tabela Cantor para a classe Cantor.

4.4.3.3 Professor.hbm.xml

Arquivo em que se declara o mapeamento da tabela Professor para a classe

Professor.

4.4.3.4 Maestro.hbm.xml

Arquivo em que se declara o mapeamento da tabela Maestro para a classe Maestro.

4.4.3.5 Administrador.hbm.xml

Arquivo em que se declara o mapeamento da tabela Administrador para a classe

Administrador.

4.4.3.6 Endereco.hbm.xml

40

Arquivo em que se declara o mapeamento da tabela Endereco para a classe

Endereco.

4.4.3.7 Idiomas.hbm.xml

Arquivo em que se declara o mapeamento da tabela Idiomas para a classe Idiomas.

4.4.3.8 Grupo.hbm.xml

Arquivo em que se declara o mapeamento da tabela Grupo para a classe Grupo.

4.4.3.9 BaseDAO.java

Arquivo que interage com o banco de dados, inserindo, atualizando, removendo e

buscando registros.

4.4.3.10 HibernateSession.java

Arquivo que abre a conexão com o banco de dados.

4.4.3.11 DAOPessoa.java

Classe que estende a BaseDAO. Ela obtém e salva os dados de uma pessoa.

41

4.4.3.12 DAOCantor.java

Classe que estende a BaseDAO. Ela obtém e salva os dados de um cantor.

4.4.3.13 DAOMaestro.java

Classe que estende a BaseDAO. Ela obtém e salva os dados de um maestro.

4.4.3.14 HQL.java

Interface que contém os HQLs do hibernate já declarados.

4.4.3.15 hibernate.properties

Arquivo que contém a configuração de acesso ao banco de dados.

42

Capítulo 5 – Funcionamento da Aplicação

Todo programa desenvolvido para um cliente, possui uma interface amigável de

fácil compreensão. Não basta apenas ser eficiente, deve também ser prática. Nesse capítulo

será descrito todo o funcionamento do programa do ponto de vista do usuário.

5.1 Antes de Logado

A Figura 4 representa a tela de “boas vindas” da aplicação. O frame inferior direito

possui uma breve explicação do que se trata o Movimento Coral.

Figura 4- “Tela de Entrada da Aplicação”.

43

Essa tela ainda possui o link “Não sou cadastrado”. Esse link direciona para a tela

de cadastro de alluno (Figura 5).

O cadastro de aluno é dividido em 3 partes para uma melhor visualização e

compreensão do formulário. Na primeira parte, Figura 5, o cantor deve informar seus dados

para login (Email e Senha), seus dados pessoais (Nome, Data de Nascimento, Rg,

Endereço, Telefone, etc) e clicar no botão enviar.

Figura 5- “Tela de Cadastro de Aluno. Passo 1/3”.

Caso o campo e-mail ou senha, fundamentais para efetuar o login após o cadastro,

não tenham sido informados ou o e-mail for inválido, uma mensagem de erro aparecerá

impedindo que o usuário avance para o próximo passo. Veja Figura 6.

44

Figura 6- “Tela de Cadastro de Aluno apresentando erro no e-mail”.

Após os campos serem preenchidos corretamente, o usuário passará para o próximo

passo. O segundo formulário (Figura 7) contém informações referentes a um aluno, como

seu naipe, empresa que trabalha, grau de instrução, etc. Essa tela não possui nenhum campo

obrigatório. Dessa forma o aluno pode clicar em enviar sem preencher nenhum campo.

45

Figura 7- “Tela de Cadastro de Aluno. Passo 2/3”.

E finalmente, para se efetivar o cadastro o aluno deve responder três perguntas e

informar seu conhecimento em outras línguas, se tiver. Além disso, ele pode informar a

qual grupo ele pertence, caso ele saiba. Se não souber, basta selecionar a opção “Não sei”

que depois o maestro o colocará em algum grupo. Veja Figura 8.

46

Figura 8- “Tela de Cadastro de Aluno. Passo 3/3”.

Após clicar em enviar, o aluno efetiva seu cadastro e já está apto a entrar no sistema.

Figura 9.

5.2 Após Logado

Para se logar, o usuário deve informar seu e-mail e senha, seja ele cantor, professor,

maestro ou administrador. Caso ambos estejam informados corretamente ele entra no

sistema. As funcionalidades que uma pessoa pode exercer dentro do sistema depende do

47

tipo de pessoa que ela é. Se ela for um cantor, ele terá permissão apenas para Atualizar seus

dados cadastrais e atualizar sua senha. Veja Figura 10.

Figura 9- “Tela Cadastro Realizado com Sucesso”.

48

Figura 10- “Tela de Entrada do cantor após sua autenticação”.

Ao clicar no link Alterar Dados, o sistema abrirá o formulário de alteração de dados.

Nele aparecerão todas as informações do cadastro do aluno. Assim, basta alterar os campos

desejados e clicar em alterar. Veja Figuras 11, 12 e 13.

Figura 11- “Tela de Alteração de Dados”.

49

Figura 12- “Tela de Alteração de Dados (Continuação)”.

Figura 13- “Tela de Alteração de Dados (Continuação)”.

50

Além disso, o aluno ainda pode alterar sua senha clicando no link Alterar Senha. Ele

deve informar sua senha antiga, a nova senha, a confirmação da nova senha e clicar em

alterar. Veja Figura 14.

Figura 14- “Tela de Alteração de Senha”.

Caso a pessoa entre no sistema sendo um administrador, aparecerão novas

funcionalidades: Cadastro de Professor e Cadastro de Grupo.

No Cadastro de Professor, o administrador pode cadastrar um novo professor ao

sistema informando os parâmetros de entrada: e-mail e senha. Veja Figura 15.

No Cadastro de Grupo, o administrador pode cadastrar um novo grupo informando

o nome e a descrição do grupo. Veja Figura 16.

51

Figura 15- “Tela de Cadastro de Professor”.

Figura 16- “Tela de Cadastro de Grupo”.

52

Caso alguma pessoa tente acessar alguma página digitando o caminho por extenso

no navegador e ela não tiver permissão para acessá-la, o sistema apresentará uma

mensagem de erro e em 4 segundos a página será redirecionada para a página inicial. Veja

figura 17.

Figura 17- “Tela de Página de Erro”.

Caso a pessoa logada seja um professor ela pode gerar relatórios dos cantores

cadastrados no sistema. Para isso, ela deve acessar o link “Gerar Relatório”, escolher qual

conjunto de parâmetros ele quer que apareça no relatório e clicar no botão “Gerar” (Figura

18).

Nessa primeira versão foram criados 5 tipos de relatórios contendo diferentes

atributos de um cantor. Os dados nome, email e data de inclusão (como no exemplo da

53

figura 19) são colhidos do banco de dados e representam todos os cantores cadastrados sem

restrição, pois não é possível escolher a quantidade de cantores que devem ser

apresentados.

Após o professor clicar no botão “Gerar”, o relatório vai aparecer no JasperViewer,

um tipo de visualizador de relatório do JasperReports (Figura 19). Nesse visualizador o

professor pode imprimir o relatório ou salvá-lo no seu computador.

Figura 18- “Tela de Geração de Relatório”.

54

Figura 19- “Tela Relatório de Cantores”.

Essa é a funcionalidade dessa versão do sistema de gerenciamento de grupos de

canto coral.

55

Conclusão

A Internet vem crescendo cada vez mais e a cada dia novas páginas são anexadas a

esse mundo. O desenvolvimento de aplicativos para Web implementadas em Java é

relativamente novo. Novas tecnologias foram e estão sendo lançadas em um período de

tempo bastante curto, o que torna essa área ainda mais interessante, pois propicia um campo

amplo para novos estudos.

A realização do presente trabalho proporcionou um grande aprendizado na área de

desenvolvimento de uma aplicação utilizando ferramentas de código aberto. Entre elas,

Java/Jsp, Struts, Hibernate e JasperReports.

É importante ressaltar que a aplicação desenvolvida vem a facilitar a vida de

professores, maestros alunos e também outras pessoas que pretendam utilizar esse

programa.

Na aplicação desenvolvida, novas funcionalidades podem ser implementadas, ou

aquelas que já foram implementadas, podem ser aprimoradas.

56

Referências Bibliográficas

1. Peinado, Fernando Kasten. Hibernate. Disponível em

<http://www.ime.usp.br/~reverbel/SMA/trabalhos/seminarios/hibernate.pdf>

Acessado em 08 mar 2004.

2. Java. Disponível em <http://java.sun.com/>. Acessado em 08 mar 2004.

3. Sun Microsystems. Java 2 Platform, Enterprise Edition (J2EE).

Disponível em <http://java.sun.com/j2ee/>. Acessado em 05 out 2004.

4. JSP. Disponível em <http://java.sun.com/products/jsp/>. Acessado em 08

mar 2004.

5. Danciu , Teodor. JasperReports. Disponível em

<http://jasperreports.sourceforge.net/>. Acessado em 08 mar 2004.

6. Hibernate. Disponível em <http://www.hibernate.org/>. Acessado em 08

mar 2004.

7. Heudecker, Nick. Introduction to Hibernate. Disponível em

<http://www.systemmobile.com/articles/IntroductionToHibernate.html#How

%20Hibernate%20Works>. Acessado em 08 mar 2004.

8. Chapter 1. Quickstart with Tomcat. Disponível em

<http://www.hibernate.org/hib_docs/reference/en/html/quickstart.html>.

Acessado em 08 mar 2004.

9. Castor, Opening A JDO Database. Disponível em

<http://www.castor.org/jdo.html>. Acessado em 08 mar 2004.

57

10. Jakarta Tomcat: Guia Rápido de Instalação e Configuração. Revista

MundoJava, no. 02, ano1, pp - 07;

11. Alur, Deepak; Crupi, John; Malks,Dan. CORE J2EE PATTERNS AS

MELHORES PRÁTICAS E ESTRATÉGIAS DE DESIGN. Pág.5;

12. Bodoff, Stephanie; Green, Dale; Haase, Kim; Jendrock, Eric; Pawlan,

Monica; Stearns, Beth. TUTORIAL DO J2EE;

13. MySQL AB. Visão Geral do Sistema de Gerenciamento de Banco de

Dados MySQL. Disponível em <http://dev.mysql.com/doc/mysql/pt/What-

is.html>. Acessado em 08 mar 2004.

14. Google. Disponível em <http://www.google.com.br/>. Acessado em 08 mar

2004.

15. Agrorede. Disponível em <http://www.agrorede.org.br>. Acessado em 08

mar 2004.

16. Struts. Disponível em <http://struts.apache.org>. Acessado em 16 out 2004.

17. Model 2. Disponível em <http://www.javaworld.com/javaworld/jw-12-

1999/jw-12-ssj-jspmvc.html>. Acessado em 16 out 2004.

58

Apêndice – A: Artigo

Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral Baseado em Tecnologias de Código

Aberto

Marcelo de Andrade Machado

Curso de Bacharelado em Ciências da Computação Departamento de Informática e Estatística

Universidade Federal de Santa Catarina (UFSC), Brasil, 88040-900 Fone (0XX48)333-9999, Fax (0XX48)333-9999

[email protected]

RESUMO

Desenvolve uma aplicação WEB que realiza o gerenciamento de alunos em grupos de canto, além de gerar relatórios dos alunos matriculados nesses grupos. São utilizadas tecnologias de código aberto construídas em Java com exceção do banco de dados. As ferramentas utilizadas para desenvolver essa aplicação foram: Java, JSP, JasperReports, MySQL, Hibernate e Struts. As funcionalidades que a aplicação deve satisfazer foram informadas por um cliente, pessoa ao qual o programa é destinado. Os resultados obtidos são de grande valia tanto para os usuários do sistema como para o desenvolvedor. Grandes conhecimentos foram adquiridos na pesquisa e na implementação das tecnologias, elas facilitam muito o trabalho e deixam mais simples a forma de programar.

59

Introdução

Na década de 90, a Internet atraiu a atenção de todos, com a promessa de sistemas revolucionários, de acesso e processamento de informações de qualquer lugar do planeta. Vários sistemas passaram a ser desenvolvidos em plataformas distribuídas e de código aberto, usufruindo das vantagens da velocidade, segurança e confiabilidade.

Ao longo dos anos, o processo de desenvolvimento de sistemas tem mudado, elevando significativamente a maturidade desta área. Novas tecnologias surgiram para reduzir os custos e acelerar o desenvolvimento, dentre elas a Java 2 Plataform, Enterprise Edition (J2EE) (Sun, 2004), que oferece um modelo de aplicação distribuída em multicamada baseada em componentes.

Para se construir uma aplicação WEB existe uma série de ferramentas que podem ser utilizadas. A escolha é baseada nos benefícios que cada uma pode trazer para o projeto e se o “custo-benefício” vale a pena.

O cadastro de cantores nos grupos de canto ainda é feito a mão através de uma ficha de inscrição. Além disso, surgiu a necessidade de emitir relatórios de alunos matriculados. Com o intuito de facilitar a vida das pessoas e agilizar seu trabalho foi pensado em uma aplicação WEB de apoio ao gerenciamento de grupos de Canto Coral. Não foi possível encontrar nenhuma aplicação que correspondesse exatamente ao problema proposto. O site de busca utilizado foi o Google.

Porém existem algumas ferramentas que, se utilizados em conjunto, podem ajudar a resolvê-lo.

Uma Aplicação para WEB de Apoio ao Gerenciamento de Grupos de Canto Coral.

Esse projeto pretende resolver

basicamente 2 problemas. 3. Para se cadastrar num grupo

Coral, o Cantor tem que preencher uma ficha e entrega-la a pessoa responsável. Esse sistema não possui uma forma muito prática de cadastramento, pelo fato dele ser feito a mão através de uma ficha de inscrição.

4. Muitas vezes é preciso fornecer listagens impressas com apenas algumas informações dos membros. Por exemplo: num dia é necessário gerar uma listagem onde apareça apenas nome, RG e número do passaporte dos integrantes. Noutro dia é preciso gerar outra listagem com nome, RG e curso (caso ele esteja ingressado em uma faculdade). Ás vezes a lista deve estar em ordem alfabética pelos nomes, outras vezes deve estar em ordem alfabética pelo curso, etc.

Solução

Uma aplicação para a WEB seria de grande ajuda e apoio a todos os participantes do grupo Coral e também àqueles que pretendem ingressar no grupo. O maestro, pessoa que realiza o cadastro dos membros, encontraria nessa aplicação um ambiente favorável para a administração dos mesmos, ganhando assim tempo para realizar atividades mais importantes.

60

A solução para os problemas propostos segue respectivamente:

3. O cadastro de uma pessoa será realizado via.

4. Os relatórios com informações dos membros também será obtida via Internet.

Para o armazenamento dos dados da pessoa(nome, endereço, curso, etc) será utilizado um banco de dados que possa ser facilmente adaptado, ou seja, a medida que haja necessidade de inserir novos registros, é possível definir novas tabelas (ou também excluí-las) sem ter que mudar toda a base de dados nem a aplicação.

Objetivo Geral Desenvolver uma aplicação WEB de apoio ao gerenciamento de grupos de canto coral utilizando tecnologias de código aberto.

Objetivos Específicos Estudar o funcionamento das tecnologias Java, em especial Struts, JasperReports e Hibernate. Desenvolver uma aplicação que facilite o trabalho das pessoas.

Sobre a Solução

A fim de solucionar o problema acima mencionado, será desenvolvida uma aplicação cujo principal intuito é de facilitar o trabalho das pessoas que fazem parte do grupo de canto Coral. Para resolver o problema do cadastro de pessoas será construído, portanto um sistema gerenciador de cadastros. Essa aplicação funcionará da seguinte forma: um cantor se cadastra via WEB no sistema. Nesse cadastro, além dos campos regulares, também haverá um campo de login e um de senha. Para garantir que o login seja único, ele será o e-mail da pessoa. Isso garante que o cantor que se cadastrou é o mesmo que possui o e-mail. Caso o indivíduo não possua endereço de e-mail, ele não poderá mudar seus dados cadastrais pessoalmente, pois as informações contidas nesses dois campos serão utilizadas para validar o usuário no sistema. Uma vez cadastrado, o cantor pode acessar o sistema informando seu login e sua senha. Dentro do sistema, é possível mudar seus dados cadastrais bem como sua senha e se excluir do grupo. Caso a pessoa seja um professor, ela acessará uma tela diferente onde apenas digitará seu nome, e-mail (que servirá como login) e senha. Após isso, receberá um e-mail para confirmar sua inscrição que, depois de confirmado, poderá acessar automaticamente o sistema sem necessidade de autorização do administrador. Lá dentro, ele poderá visualizar a ficha de todos os integrantes.

A ferramenta que será utilizada para o desenvolvimento dessa aplicação será o JSP.

Para resolver o problema de emissão de relatórios, optou-se pela utilização de um software desenvolvido também em JAVA, o JasperReports. Ele será utilizada da seguinte forma: haverá uma página dentro do sistema em que o

61

usuário selecionará os atributos que o relatório irá apresentar. Por exemplo: o usuário informa que será um relatório de integrantes, depois informa quais atributos desse integrantes (nome, sexo, endereço) deverão ser apresentados e, para cada um, se existe alguma restrição. Caso ele deseje por exemplo selecionar apenas aquelas pessoas cujo nome comece com a letra A ou aquelas que se cadastraram no mês de Abril, etc.

O Banco de Dados utilizado será o MySQL e, para fazer a persistência dos dados, será utilizado o Hibernate.

Ferramentas Utilizadas

As ferramentas utilizadas para desenvolver essa aplicação são todas gratuitas. São elas: JSP, JasperReports, MySQL, Hibernate, Struts e Microsoft Visio.

Conclusão

A Internet vem crescendo cada vez mais e a cada dia novas páginas são anexadas a esse mundo. O desenvolvimento de aplicativos para Web implementadas em Java é relativamente novo. Novas tecnologias foram e estão sendo lançadas em um período de tempo bastante curto, o que torna essa área ainda mais interessante, pois propicia um campo amplo para novos estudos.

A realização do presente trabalho proporcionou um grande aprendizado na área de desenvolvimento de uma aplicação utilizando ferramentas de

código aberto. Entre elas, Java/Jsp, Struts, Hibernate e JasperReports.

É importante ressaltar que a aplicação desenvolvida vem a facilitar a vida de professores, maestros alunos e também outras pessoas que pretendam utilizar esse programa.

Referências Bibliográficas

[1] Java. Disponível em <http://java.sun.com/>. Acessado em 08 mar 2004. [2] Sun Microsystems. Java 2 Platform, Enterprise Edition (J2EE). Disponível em <http://java.sun.com/j2ee/>. Acessado em 05 out 2004. [3] JSP. Disponível em <http://java.sun.com/products/jsp/>. Acessado em 08 mar 2004. [4] Danciu , Teodor. JasperReports. Disponível em <http://jasperreports.sourceforge.net/>. Acessado em 08 mar 2004. [5] Alur, Deepak; Crupi, John; Malks,Dan. CORE J2EE PATTERNS AS MELHORES PRÁTICAS E ESTRATÉGIAS DE DESIGN. Pág.5; [6] Bodoff, Stephanie; Green, Dale; Haase, Kim; Jendrock, Eric; Pawlan, Monica; Stearns, Beth. TUTORIAL DO J2EE;

Apêndice – B: Código Fonte Classe BaseDAO.java: package banco; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import net.sf.hibernate.Hibernate; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import util.Principal; public abstract class BaseDAO { /** Removes the object from the database with with specified class type and <code>id</code>. @param c the class type to remove @param id the id of the class type @throws DAOException */ protected void removeObj(Class c, Integer id) throws DAOException { try { Session session = HibernateSession.currentSession(); Object obj = session.load(c, id); session.delete(obj); session.flush(); session.connection().commit(); } catch (Exception e) { rollback(); throw new DAOException(e); } finally { closeSession(); } } /** Retrieves and <code>Object</code> of the class type specified by <code>c</code>, and having the given <code>id</code>. @param c the class to load @param id @return Object may be null if object with ID doesn't exist @throws DAOException */

63

protected Object retrieveObj(Class c, Integer id) throws DAOException { Object obj = null; try { Session session = HibernateSession.currentSession(); obj = session.load(c, id); } catch (HibernateException he) { he.printStackTrace(); throw new DAOException(he); } finally { closeSession(); } return obj; } /** Retrieves an <code>Object</code> from the database. @param key the key used to lookup the query in the resource bundle @param value the value that is inserted into the query. May be null if the desired query does not take a parameter. @return Object @throws DAOException */ protected Object retrieveObj(String key, String value) throws DAOException { List objects = retrieveObjs(key, value); if (objects != null) { if (objects.size() == 0) { return null; } else { return objects.get(0); } } else { return null; } } /** Retrieves a <code>List</code> of <code>Object</code>s from the database. @param key the key used to lookup the query in the resource bundle @param value the value that is inserted into the query. May be null if the desired query does not take a parameter. @return List will be null if no objects are retrieved @throws DAOException */ protected List retrieveObjs(String key, String value) throws DAOException { List results = null;

64

try { Session session = HibernateSession.currentSession(); if (value != null) { results = (List)session.find(getQuery(key), value, Hibernate.STRING); } else { results = (List)session.find(getQuery(key)); } } catch (HibernateException he) { he.printStackTrace(); throw new DAOException(he); } finally { closeSession(); } return results; } public List findByEmail(String email) throws HibernateException { List pessoas = new ArrayList(); Session sessao = null; try { sessao = HibernateSession.currentSession(); pessoas = sessao.find(HQL.SELECT_PESSOAS_POR_EMAIL, email, Hibernate.STRING); } catch (HibernateException e) { throw new HibernateException(e); } catch (DAOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally { } return pessoas; } public List findAll(String hql) throws HibernateException { List objetos = new ArrayList(); Session sessao = null; try { sessao = HibernateSession.currentSession(); objetos = sessao.find(hql); } catch (HibernateException e) { throw new HibernateException(e); } catch (DAOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally { } return objetos; } public List findByString(String hql, String param) throws HibernateException { List objetos = new ArrayList();

65

Session sessao = null; try { sessao = HibernateSession.currentSession(); objetos = sessao.find(hql, param, Hibernate.STRING); } catch (HibernateException e) { throw new HibernateException(e); } catch (DAOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally { } return objetos; } public Object findById(String hql, Integer id) throws HibernateException { List objetoList = new ArrayList(); Object objeto = new Object(); Session sessao = null; try { sessao = HibernateSession.currentSession(); objetoList = (List)sessao.find(hql, id.toString(), Hibernate.STRING); objeto = objetoList.get(0); } catch (HibernateException e) { throw new HibernateException(e); } catch (DAOException e1) { e1.printStackTrace(); } finally { } return objeto; } /** Stores <code>obj</code>, making it persistent. @param obj @throws DAOException */ protected void storeObj(Object obj) throws DAOException { try { Session session = HibernateSession.currentSession(); session.saveOrUpdate(obj); session.flush(); session.connection().commit(); } catch (HibernateException he) { rollback(); throw new DAOException(he); } catch (SQLException sqle) { rollback(); throw new DAOException(sqle); } finally { closeSession(); } }

66

/** Closes the current session. */ protected void closeSession() { try { HibernateSession.closeSession(); } catch (DAOException de) { System.err.println(de.getMessage()); } } /** Performs a rollback on the current session. Exceptions are logged. @throws DAOException if the current session can't be retrieved or an exception is thrown while performing the rollback. */ protected void rollback() throws DAOException { try { Session session = HibernateSession.currentSession(); if (session != null) { session.connection().rollback(); } } catch (HibernateException he) { throw new DAOException(he); } catch (SQLException sqle) { throw new DAOException(sqle); } } /** Retrieves the HQL query from the resource bundle. @param key the HQL query to lookup */ protected String getQuery(String key) { return Principal.getQuery(key); } } Classe DAOAdministrador.Java: package banco; import java.util.List; import coral.Administrador; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true"

67

*/ public class DAOAdministrador extends BaseDAO { public Administrador saveAdministrador(Administrador p) throws DAOException { storeObj(p); return (Administrador) retrieveObj(Administrador.class, p.getIdAdministrador()); } public Administrador getAdministrador(Integer id) throws DAOException { return (Administrador) retrieveObj(Administrador.class, id); } public void removeAdministrador(Administrador p) throws DAOException { removeAdministrador(p.getIdAdministrador()); } public void removeAdministrador(Integer id) throws DAOException { removeObj(Administrador.class, id); } /** Returns a list of <code>Administrador</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchAdministradores(String query, String value) throws DAOException { return retrieveObjs(query, value); } }

Classe DAOCantor.Java: package banco; import java.util.List; import net.sf.hibernate.HibernateException; import coral.Cantor;

68

/** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOCantor extends BaseDAO { public Cantor saveCantor(Cantor p) throws DAOException { storeObj(p); return (Cantor)retrieveObj(Cantor.class, p.getIdCantor()); } public Cantor findById(Integer id) throws DAOException, HibernateException { return (Cantor)findById(HQL.SELECT_CANTOR_POR_ID, id); } public Cantor findByIdPessoa(Integer id) throws DAOException, HibernateException { return (Cantor)findById(HQL.SELECT_CANTOR_POR_ID_PESSOA, id); } public Cantor getCantor(Integer id) throws DAOException { return (Cantor)retrieveObj(Cantor.class, id); } public void removeCantor(Cantor p) throws DAOException { removeCantor(p.getIdCantor()); } public void removeCantor(Integer id) throws DAOException { removeObj(Cantor.class, id); } public List findAllCantores() throws DAOException, HibernateException { return findAll(HQL.SELECT_ALL_CANTORES); } /** Returns a list of <code>Cantor</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchCantors(String query, String value) throws DAOException { return retrieveObjs(query, value); } }

69

Classe DAOEndereco.java: package banco; import java.util.List; import net.sf.hibernate.HibernateException; import coral.Endereco; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOEndereco extends BaseDAO { public Endereco saveEndereco(Endereco p) throws DAOException { storeObj(p); return (Endereco)retrieveObj(Endereco.class, p.getIdEndereco()); } public Endereco getEndereco(Integer id) throws DAOException { return (Endereco)retrieveObj(Endereco.class, id); } public Endereco findById(Integer id) throws DAOException, HibernateException { return (Endereco)findById(HQL.SELECT_ENDERECO_POR_ID, id); } public void removeEndereco(Endereco p) throws DAOException { removeEndereco(p.getIdEndereco()); } public void removeEndereco(Integer id) throws DAOException { removeObj(Endereco.class, id); } /** Returns a list of <code>Endereco</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchEnderecos(String query, String value) throws DAOException { return retrieveObjs(query, value); }

70

} Classe DAOException.Java: package banco; import java.io.PrintStream; public class DAOException extends Exception { public DAOException() { super(); } public DAOException(String message) { super(message); } public DAOException(Exception e) { this(e, e.getMessage()); } public DAOException(Exception e, String message) { super(message); this.exception = e; } public DAOException(Exception e, String message, boolean fatal) { this(e, message); setFatal(fatal); } public boolean isFatal() { return this.fatal; } public void setFatal(boolean fatal) { this.fatal = fatal; } public void printStackTrace() { super.printStackTrace(); if (this.exception != null) { System.out.print("%%%% wrapped exception: "); this.exception.printStackTrace(); } } public void printStackTrace(PrintStream printStream) { super.printStackTrace(printStream); if (this.exception != null) { System.out.print("%%%% wrapped exception: "); this.exception.printStackTrace(printStream);

71

} } public String toString() { if (exception != null) { return super.toString()+" wraps: ["+exception.toString()+"]"; } else { return super.toString(); } } protected Exception exception; protected boolean fatal; }

Classe DAOGrupo.java: package banco; import java.util.List; import net.sf.hibernate.HibernateException; import coral.Grupo; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOGrupo extends BaseDAO { public Grupo saveGrupo(Grupo p) throws DAOException { storeObj(p); return (Grupo)retrieveObj(Grupo.class, p.getIdGrupo()); } public Grupo getGrupo(Integer id) throws DAOException { return (Grupo)retrieveObj(Grupo.class, id); } public Grupo findById(Integer id) throws DAOException, HibernateException { return (Grupo)findById(HQL.SELECT_GRUPO_POR_ID, id); } public void removeGrupo(Grupo p) throws DAOException { removeGrupo(p.getIdGrupo()); } public void removeGrupo(Integer id) throws DAOException { removeObj(Grupo.class, id);

72

} /** Returns a list of <code>Grupo</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchGrupos(String query, String value) throws DAOException { return retrieveObjs(query, value); } public List findAllGrupos() throws DAOException, HibernateException { return findAll(HQL.SELECT_ALL_GRUPOS); } } Classe DAOIdiomas.java: package banco; import java.util.List; import net.sf.hibernate.HibernateException; import coral.Idiomas; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOIdiomas extends BaseDAO { public Idiomas saveIdiomas(Idiomas p) throws DAOException { storeObj(p); return (Idiomas)retrieveObj(Idiomas.class, p.getIdIdioma()); } public Idiomas getIdiomas(Integer id) throws DAOException { return (Idiomas)retrieveObj(Idiomas.class, id); } public void removeIdiomas(Idiomas p) throws DAOException { removeIdiomas(p.getIdIdioma()); } public void removeIdiomas(Integer id) throws DAOException {

73

removeObj(Idiomas.class, id); } public List findByString(Integer id) throws HibernateException { return findByString(HQL.SELECT_IDIOMAS_POR_ID_CANTOR, id.toString()); } /** Returns a list of <code>Idiomas</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchIdiomas(String query, String value) throws DAOException { return retrieveObjs(query, value); } } Classe DAOMaestro.java: package banco; import java.util.List; import coral.Maestro; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOMaestro extends BaseDAO { public Maestro saveMaestro(Maestro p) throws DAOException { storeObj(p); return (Maestro) retrieveObj(Maestro.class, p.getIdMaestro()); } public Maestro getMaestro(Integer id) throws DAOException { return (Maestro) retrieveObj(Maestro.class, id); } public void removeMaestro(Maestro p) throws DAOException { removeMaestro(p.getIdMaestro()); }

74

public void removeMaestro(Integer id) throws DAOException { removeObj(Maestro.class, id); } /** Returns a list of <code>Maestro</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchMaestros(String query, String value) throws DAOException { return retrieveObjs(query, value); } }

Classe DAOPessoa.java: package banco; import java.util.List; import net.sf.hibernate.HibernateException; import coral.Pessoa; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOPessoa extends BaseDAO { public Pessoa savePessoa(Pessoa p) throws DAOException { storeObj(p); return (Pessoa)retrieveObj(Pessoa.class, p.getIdPessoa()); } public Pessoa findById(Integer id) throws DAOException, HibernateException { return (Pessoa)findById(HQL.SELECT_PESSOA_POR_ID, id); } public Pessoa getPessoa(Integer id) throws DAOException { return (Pessoa)retrieveObj(Pessoa.class, id); }

75

public void removePessoa(Pessoa p) throws DAOException { removePessoa(p.getIdPessoa()); } public void removePessoa(Integer id) throws DAOException { removeObj(Pessoa.class, id); } public List findAllPessoas(String tipoPessoa) throws DAOException, HibernateException { return findByString(HQL.SELECT_ALL_PESSOAS, tipoPessoa); } /** Returns a list of <code>Pessoa</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchPessoas(String query, String value) throws DAOException { return retrieveObjs(query, value); } public List findByEmail(String email) throws HibernateException { return super.findByEmail(email); } } Classe DAOProfessor.java: package banco; import java.util.List; import coral.Professor; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class DAOProfessor extends BaseDAO { public Professor saveProfessor(Professor p) throws DAOException { storeObj(p); return (Professor) retrieveObj(Professor.class, p.getIdProfessor());

76

} public Professor getProfessor(Integer id) throws DAOException { return (Professor) retrieveObj(Professor.class, id); } public void removeProfessor(Professor p) throws DAOException { removeProfessor(p.getIdProfessor()); } public void removeProfessor(Integer id) throws DAOException { removeObj(Professor.class, id); } /** Returns a list of <code>Professor</code>s using the query specified by the <code>query</code> key. @param query the query key @param value the value to put into the query statement. May be null @return List @throws DAOException */ public List searchProfessors(String query, String value) throws DAOException { return retrieveObjs(query, value); } } Classe HibernateSession.java: package banco; import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import coral.Administrador; import coral.Cantor; import coral.Endereco; import coral.Grupo; import coral.Idiomas; import coral.Maestro; import coral.Professor;

77

public class HibernateSession { public static final ThreadLocal session = new ThreadLocal(); private static final Configuration cfg = new Configuration(); private static SessionFactory sf; /** Returns the ThreadLocal Session instance. This method will initialize the <code>SessionFactory</code> if necessary. @return Session @throws DAOException */ public static Session currentSession() throws DAOException { Session s = (Session)session.get(); try { if (s == null) { if (sf == null) { try { // loadClasses(); sf = cfg.configure().buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } s = sf.openSession(); session.set(s); } } catch (HibernateException he) { throw new DAOException(he); } return s; } /** Closes the session object. @throws DAOException */ public static void closeSession() throws DAOException { Session s = (Session)session.get(); session.set(null); if (s != null) { try { s.close(); } catch (HibernateException he) { throw new DAOException(he); } } }

78

/** Loads the mapping documents for the persistent classes. @throws DAOException if there is a problem with the mapping docs */ private static void loadClasses() throws DAOException { Class[] classes = new Class[] { Administrador.class, Cantor.class, Endereco.class, Grupo.class, Idiomas.class, Maestro.class, Professor.class }; for (int i = 0; i < classes.length; i++) { try { cfg.addClass(classes[i]); } catch (MappingException me) { throw new DAOException(me); } } } }

Classe HQL.java: package banco; public interface HQL { // retorna todos os objetos da classe Noticia final String SELECT_TODAS_PESSOAS = "from Pessoa"; // retorna todas as Pessoas que possuem a palavra chave final String SELECT_PESSOAS_POR_EMAIL = "from Pessoa n where n.email = ?"; // retorna o ENDERECO pelo id final String SELECT_ENDERECO_POR_ID = "from Endereco n where n.idEndereco = ?"; // retorna o Cantor pelo id final String SELECT_CANTOR_POR_ID = "from Cantor n where n.idCantor = ?"; // retorna o Cantor pelo id final String SELECT_CANTOR_POR_ID_PESSOA = "from Cantor n where n.idPessoa = ?"; // retorna a Pessoa pelo id final String SELECT_PESSOA_POR_ID = "from Pessoa n where n.idPessoa = ?"; // retorna a Grupo pelo id Cantor final String SELECT_GRUPO_POR_ID = "from Grupo n where n.idGrupo = ?";

79

// retorna todas as Pessoas que possuem a palavra chave final String SELECT_IDIOMAS_POR_ID_CANTOR = "from Idiomas n where n.idCantor = ?"; // retorna todos os grupos final String SELECT_ALL_GRUPOS = "from Grupo"; // retorna todos os cantores final String SELECT_ALL_CANTORES = "from Cantor"; // retorna todos os cantores final String SELECT_ALL_PESSOAS = "from Pessoa n where n.tipoPessoa = ?"; }

Classe AlteraSenhaAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.*; import coral.Pessoa; import util.*; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AlteraSenhaAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { Pessoa pessoa; if (request.getSession().getAttribute("pessoaAutenticada") != null) { System.out.println("Pessoa foi autenticada"); AlteraSenhaActionForm form = (AlteraSenhaActionForm)actionForm; pessoa = (Pessoa)request.getSession().getAttribute("pessoaAutenticada");

80

System.out.println("senhanova: "+form.getValue("senhaNova")); pessoa.setSenha((String)form.getValue("senhaNova")); pessoa = Principal.salvaPessoa(pessoa); request.getSession().setAttribute("pessoaAutenticada", pessoa); return mapping.findForward("senhaAlterada"); } return mapping.findForward("paginaErro"); } }

Classe AlteraSenhaActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AlteraSenhaActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); }

81

public HashMap getDadosForm() { HashMap dadosForm = new HashMap(); dadosForm.put("senhaAntiga", getValue("senhaAntiga")); dadosForm.put("senhaNova", getValue("senhaNova")); dadosForm.put("senhaConfirmacao", getValue("senhaConfirmacao")); return dadosForm; } }

Classe AtualizaDadosAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; import banco.DAOEndereco; import banco.DAOException; import banco.DAOIdiomas; import coral.Cantor; import coral.Endereco; import coral.Idiomas; import coral.Pessoa; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AtualizaDadosAction extends Action { HashMap pessoaAtualizada; HashMap tabelas;

82

public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { Pessoa pessoa; AtualizaDadosActionForm form = (AtualizaDadosActionForm)actionForm; if (form.getValue("atualizar") != null) { return executeAtualizarDados(mapping, actionForm, request); } else if (request.getSession().getAttribute("pessoaAutenticada") != null) { System.out.println("Pessoa foi autenticada"); pessoa = (Pessoa)request.getSession().getAttribute("pessoaAutenticada"); tabelas = form.setDadosForm(pessoa); request.getSession().setAttribute("tabelas", tabelas); return mapping.findForward("atualizaDados"); } return mapping.findForward("paginaErro"); } public ActionForward executeAtualizarDados(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request) { //System.out.println("email: "+pessoa.getEmail()); setDadosForm(actionForm, (Pessoa)request.getSession().getAttribute("pessoaAutenticada"), request); // Principal.AtualizaPessoa(pessoa, getServlet()); return mapping.findForward("dadosAlterados"); } private void setDadosForm(ActionForm actionForm, Pessoa pessoa, HttpServletRequest request) { System.out.println("setDadosForm"); AtualizaDadosActionForm form = (AtualizaDadosActionForm)actionForm; HashMap dadosForm = form.getDadosForm(); pessoa.setNome(dadosForm.get("nome").toString()); pessoa.setDataNascimento((Date)dadosForm.get("dataNascimento")); pessoa.setNaturalidade(dadosForm.get("naturalidade").toString()); pessoa.setRg(dadosForm.get("rg").toString()); pessoa.setEstadoCivil(dadosForm.get("estadoCivil").toString()); pessoa.setOrgaoExpedidor(dadosForm.get("orgaoExpedidor").toString()); pessoa.setDataEmissao((Date)dadosForm.get("dataEmissao")); pessoa.setCpf(dadosForm.get("cpf").toString()); pessoa.setPassaporte(dadosForm.get("passaporte").toString()); pessoa.setDataAtualizacao(Principal.getDataHoje()); //ENDERECO DAOEndereco daoEndereco = new DAOEndereco();

83

System.out.println("Pegando Endereco"); tabelas = (HashMap)request.getSession().getAttribute("tabelas"); Endereco endereco = (Endereco)tabelas.get("endereco"); endereco.setRua(dadosForm.get("rua").toString()); endereco.setBairro(dadosForm.get("bairro").toString()); endereco.setCep(dadosForm.get("cep").toString()); if (!dadosForm.get("numero").equals("")) endereco.setNumero(new Long(dadosForm.get("numero").toString())); endereco.setCidade(dadosForm.get("cidade").toString()); endereco.setEstado(dadosForm.get("estado").toString()); if (!dadosForm.get("telResidencial").equals("")) endereco.setTelResidencial(new Long(dadosForm.get("telResidencial").toString())); if (!dadosForm.get("telComercial").equals("")) endereco.setTelComercial(new Long(dadosForm.get("telComercial").toString())); endereco.setTelOutros(dadosForm.get("telOutros").toString()); if (!pessoa.getTipoPessoa().equals("cantor")) { pessoaAtualizada = new HashMap(); pessoaAtualizada.put("pessoa", pessoa); pessoaAtualizada.put("endereco", endereco); Principal.salvaPessoaEEndereco(pessoaAtualizada); } else { //CANTOR Cantor cantor = (Cantor)tabelas.get("cantor"); cantor.setNaipe((String)dadosForm.get("naipe")); cantor.setCantandoNo(dadosForm.get("cantandoNo").toString()); /*****************PARTE 2********************/ cantor.setEmpresaQueTrabalha(dadosForm.get("empresaQueTrabalha").toString()); cantor.setNomeArtistico(dadosForm.get("nomeArtistico").toString()); cantor.setPlacaCarro(dadosForm.get("placaCarro").toString()); cantor.setModeloCarro(dadosForm.get("modeloCarro").toString()); cantor.setCorCarro(dadosForm.get("corCarro").toString()); System.out.println("grauInstrucao " + dadosForm.get("grauInstrucao")); cantor.setGrauInstrucao(dadosForm.get("grauInstrucao").toString()); if (dadosForm.get("cursoFeevale").toString().equals("")) { cantor.setCurso(dadosForm.get("cursoOutraInst").toString()); cantor.setSemestre(dadosForm.get("semestreFeevale").toString());

84

} else { cantor.setCurso(dadosForm.get("cursoFeevale").toString()); cantor.setSemestre(dadosForm.get("semestreOutraInst").toString()); cantor.setInstituicao(dadosForm.get("instituicao").toString()); } /*****************PARTE 3********************/ cantor.setTextCantaAtualmente(dadosForm.get("textCantaAtualmente").toString()); cantor.setTextJaCantou(dadosForm.get("textJaCantou").toString()); cantor.setTextInstrumentosMusicais(dadosForm.get("textInstrumentosMusicais").toString()); pessoaAtualizada = new HashMap(); pessoaAtualizada.put("pessoa", pessoa); pessoaAtualizada.put("endereco", endereco); pessoaAtualizada.put("cantor", cantor); Integer idCantor = Principal.salvaDadosCantor(pessoaAtualizada); //for (int i = 1 i < 5; i++) List idiomas = (List)tabelas.get("idiomas"); Iterator iterator = idiomas.iterator(); try { if (!dadosForm.get("idioma1").equals("")) { Idiomas idioma; if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); } else { idioma = new Idiomas(); idioma.setIdCantor(idCantor); } idioma.setNome(dadosForm.get("idioma1").toString()); idioma.setConhecimento(dadosForm.get("idioma1Radio").toString()); Principal.salvaIdioma(idioma); if (!dadosForm.get("idioma2").equals("")) { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); } else { idioma = new Idiomas(); idioma.setIdCantor(idCantor); } idioma.setNome(dadosForm.get("idioma2").toString()); idioma.setConhecimento(dadosForm.get("idioma2Radio").toString()); Principal.salvaIdioma(idioma); } else { if (iterator.hasNext()) {

85

idioma = (Idiomas)iterator.next(); DAOIdiomas daoIdiomas = new DAOIdiomas(); daoIdiomas.removeIdiomas(idioma); } } if (!dadosForm.get("idioma3").equals("")) { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); } else { idioma = new Idiomas(); idioma.setIdCantor(idCantor); } idioma.setNome(dadosForm.get("idioma3").toString()); idioma.setConhecimento(dadosForm.get("idioma3Radio").toString()); Principal.salvaIdioma(idioma); } else { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); DAOIdiomas daoIdiomas = new DAOIdiomas(); daoIdiomas.removeIdiomas(idioma); } } if (!dadosForm.get("idioma4").equals("")) { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); } else { idioma = new Idiomas(); idioma.setIdCantor(idCantor); } idioma.setNome(dadosForm.get("idioma4").toString()); idioma.setConhecimento(dadosForm.get("idioma4Radio").toString()); Principal.salvaIdioma(idioma); } else { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); DAOIdiomas daoIdiomas = new DAOIdiomas(); daoIdiomas.removeIdiomas(idioma); } } if (!dadosForm.get("idioma5").equals("")) { if (iterator.hasNext()) {

86

idioma = (Idiomas)iterator.next(); } else { idioma = new Idiomas(); idioma.setIdCantor(idCantor); } idioma.setNome(dadosForm.get("idioma5").toString()); idioma.setConhecimento(dadosForm.get("idioma5Radio").toString()); Principal.salvaIdioma(idioma); } else { if (iterator.hasNext()) { idioma = (Idiomas)iterator.next(); DAOIdiomas daoIdiomas = new DAOIdiomas(); daoIdiomas.removeIdiomas(idioma); } } } else { if (iterator.hasNext()) { Idiomas idioma = (Idiomas)iterator.next(); DAOIdiomas daoIdiomas = new DAOIdiomas(); daoIdiomas.removeIdiomas(idioma); } } } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

Classe AtualizaDadosActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;

87

import javax.servlet.http.HttpServletRequest; import net.sf.hibernate.HibernateException; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import util.Principal; import banco.DAOCantor; import banco.DAOEndereco; import banco.DAOException; import banco.DAOIdiomas; import coral.Cantor; import coral.Endereco; import coral.Idiomas; import coral.Pessoa; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AtualizaDadosActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm() { HashMap dadosForm = new HashMap(); dadosForm.put("nome", getValue("nome")); dadosForm.put("dataNascimento", Principal.parseDate(getValue("dataNascimento").toString())); dadosForm.put("naturalidade", getValue("naturalidade")); dadosForm.put("rg", getValue("rg")); dadosForm.put("estadoCivil", getValue("estadoCivil")); dadosForm.put("orgaoExpedidor", getValue("orgaoExpedidor")); dadosForm.put("dataEmissao", Principal.parseDate(getValue("dataEmissao").toString())); dadosForm.put("cpf", getValue("cpf")); dadosForm.put("passaporte", getValue("passaporte"));

88

dadosForm.put("rua", getValue("rua")); dadosForm.put("bairro", getValue("bairro")); dadosForm.put("cep", getValue("cep")); dadosForm.put("numero", getValue("numero")); dadosForm.put("cidade", getValue("cidade")); dadosForm.put("estado", getValue("estado")); dadosForm.put("telResidencial", getValue("telResidencial")); dadosForm.put("telComercial", getValue("telComercial")); dadosForm.put("telOutros", getValue("telOutros")); /*****************PARTE 2********************/ dadosForm.put("naipe", getValue("naipe")); dadosForm.put("cantandoNo", getValue("cantandoNo")); dadosForm.put("empresaQueTrabalha", getValue("empresaQueTrabalha")); dadosForm.put("nomeArtistico", getValue("nomeArtistico")); dadosForm.put("placaCarro", getValue("placaCarro")); dadosForm.put("modeloCarro", getValue("modeloCarro")); dadosForm.put("corCarro", getValue("corCarro")); dadosForm.put("grauInstrucao", getValue("grauInstrucao")); dadosForm.put("cursoFeevale", getValue("cursoFeevale")); dadosForm.put("semestreFeevale", getValue("semestreFeevale")); dadosForm.put("matricula", getValue("matricula")); dadosForm.put("cursoOutraInst", getValue("cursoOutraInst")); dadosForm.put("semestreOutraInst", getValue("semestreOutraInst")); dadosForm.put("instituicao", getValue("instituicao")); /*****************PARTE 3********************/ dadosForm.put("textCantaAtualmente", getValue("textCantaAtualmente")); dadosForm.put("textJaCantou", getValue("textJaCantou")); dadosForm.put("textInstrumentosMusicais", getValue("textInstrumentosMusicais")); dadosForm.put("idioma1", getValue("idioma1")); dadosForm.put("idioma1Radio", getValue("idioma1Radio")); dadosForm.put("idioma2", getValue("idioma2")); dadosForm.put("idioma2Radio", getValue("idioma2Radio")); dadosForm.put("idioma3", getValue("idioma3")); dadosForm.put("idioma3Radio", getValue("idioma3Radio")); dadosForm.put("idioma4", getValue("idioma4")); dadosForm.put("idioma4Radio", getValue("idioma4Radio")); dadosForm.put("idioma5", getValue("idioma5")); dadosForm.put("idioma5Radio", getValue("idioma5Radio")); return dadosForm; } public HashMap setDadosForm(Pessoa pessoa) {

89

setValue("nome", pessoa.getNome()); Date data = pessoa.getDataNascimento(); if (data != null){ System.out.println("data "+data); System.out.println("getDate "+String.valueOf(data.getDate())); System.out.println("getDay "+String.valueOf(data.getDay())); System.out.println("getMonth "+data.getMonth()); System.out.println("getYear "+data.getYear()); String dataStr = String.valueOf(data.getDate()) + "/" + String.valueOf(data.getMonth() + 1) + "/" +String.valueOf(data.getYear()); setValue("dataNascimento", dataStr); } data = pessoa.getDataEmissao(); if (data != null){ String dataStr = String.valueOf(data.getDate()) + "/" + String.valueOf(data.getMonth()+1) + "/" +String.valueOf(data.getYear()); setValue("dataEmissao", dataStr); } setValue("naturalidade", pessoa.getNaturalidade()); setValue("rg", pessoa.getRg()); setValue("estadoCivil", pessoa.getEstadoCivil()); setValue("orgaoExpedidor", pessoa.getOrgaoExpedidor()); setValue("cpf", pessoa.getCpf()); setValue("passaporte", pessoa.getPassaporte()); //ENDERECO try { DAOEndereco daoEndereco = new DAOEndereco(); System.out.println("Pegando Endereco"); Endereco endereco = daoEndereco.findById(pessoa.getIdEndereco()); setValue("rua", endereco.getRua()); setValue("bairro", endereco.getBairro()); setValue("cep", endereco.getCep()); setValue("numero", endereco.getNumero()); setValue("cidade", endereco.getCidade()); setValue("estado", endereco.getEstado()); setValue("telResidencial", endereco.getTelResidencial()); setValue("telComercial", endereco.getTelComercial()); setValue("telOutros", endereco.getTelOutros()); /*****************PARTE 2********************/ //CANTOR DAOCantor daoCantor = new DAOCantor(); Cantor cantor = daoCantor.findByIdPessoa(pessoa.getIdPessoa()); setValue("naipe", cantor.getNaipe()); setValue("cantandoNo", cantor.getCantandoNo());

90

setValue("empresaQueTrabalha", cantor.getEmpresaQueTrabalha()); setValue("nomeArtistico", cantor.getNomeArtistico()); setValue("placaCarro", cantor.getPlacaCarro()); setValue("modeloCarro", cantor.getModeloCarro()); setValue("corCarro", cantor.getCorCarro()); if (cantor.getInstituicao() != null) { setValue("cursoOutraInst", cantor.getCurso()); setValue("semestreOutraInst", cantor.getSemestre()); setValue("instituicao", cantor.getInstituicao()); } else { setValue("cursoFeevale", cantor.getCurso()); setValue("semestreFeevale", cantor.getSemestre()); } setValue("matricula", cantor.getMatricula()); setValue("grauInstrucao", cantor.getGrauInstrucao()); /*****************PARTE 3********************/ setValue("textCantaAtualmente", cantor.getTextCantaAtualmente()); setValue("textJaCantou", cantor.getTextJaCantou()); setValue("textInstrumentosMusicais", cantor.getTextInstrumentosMusicais()); DAOIdiomas daoIdiomas = new DAOIdiomas(); System.out.println("PEGANDO IDIOMAS"); List idiomas = daoIdiomas.findByString(cantor.getIdCantor()); Iterator iterator = idiomas.iterator(); int i = 1; while (iterator.hasNext()){ Idiomas idioma = (Idiomas)iterator.next(); System.out.println("idioma.getNome() "+idioma.getNome()); setValue("idioma"+i, idioma.getNome()); setValue("idioma"+ i++ + "Radio", idioma.getConhecimento()); } HashMap tabelas = new HashMap(); tabelas.put("endereco", endereco); tabelas.put("cantor", cantor); tabelas.put("idiomas", idiomas); return tabelas; } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }

91

Classe CadastraGrupoAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; import coral.Grupo; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastraGrupoAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (request.getSession().getAttribute("pessoaAutenticada") != null) { CadastraGrupoActionForm form = (CadastraGrupoActionForm)actionForm; Grupo grupo = new Grupo(); grupo.setNome((String)form.getValue("nome")); grupo.setDescricao((String)form.getValue("descricao")); grupo.setDataInclusao(Principal.getDataHoje()); Principal.salvaGrupo(grupo); return mapping.findForward("grupoCadastrado"); } return mapping.findForward("paginaErro"); } }

Classe CadastraGrupoActionForm.java:

92

/* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastraGrupoActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { HashMap dadosForm = getDadosForm(); ActionErrors erros = new ActionErrors(); if (dadosForm.get("nome").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_nome")); } if (dadosForm.get("descricao").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_descricao")); } return erros; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm() { HashMap dadosForm = new HashMap(); dadosForm.put("nome", getValue("nome")); dadosForm.put("descricao", getValue("descricao")); return dadosForm;

93

} }

Classe CadastraProfessorAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.ConstantesCoral; import util.Principal; import coral.Pessoa; import coral.Professor; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastraProfessorAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (request.getSession().getAttribute("pessoaAutenticada") != null) { CadastraProfessorActionForm form = (CadastraProfessorActionForm)actionForm; Pessoa pessoa = new Pessoa(); pessoa.setSenha((String)form.getValue("senha")); pessoa.setEmail((String)form.getValue("email")); pessoa.setTipoPessoa(ConstantesCoral.TIPO_PESSOA_PROFESSOR); pessoa.setDataInclusao(Principal.getDataHoje()); pessoa = Principal.salvaPessoa(pessoa); Professor professor = new Professor(); professor.setIdPessoa(pessoa.getIdPessoa()); Principal.salvaProfessor(professor); return mapping.findForward("professorCadastrado"); } return mapping.findForward("paginaErro"); }

94

}

Classe CadastraProfessorActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import util.Principal; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastraProfessorActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { HashMap dadosForm = getDadosForm(); ActionErrors erros = new ActionErrors(); if (dadosForm.get("email").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_email")); }else{ if (!Principal.emailEhValido((String)dadosForm.get("email"))) erros.add("", new ActionError("erro.email_invalido")); } if (dadosForm.get("senha").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_senha")); } return erros;

95

} public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm() { HashMap dadosForm = new HashMap(); dadosForm.put("email", getValue("email")); dadosForm.put("senha", getValue("senha")); return dadosForm; } }

Classe CadastroParte1Action.java /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; import coral.Endereco; import coral.Pessoa; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastroParte1Action extends Action {

96

public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { request.getSession().removeAttribute("pessoaCadastro"); HashMap pessoaCadastro = setDadosForm(actionForm); request.getSession().setAttribute("pessoaCadastro", pessoaCadastro); return mapping.findForward("parte2"); } private HashMap setDadosForm(ActionForm actionForm) { CadastroParte1ActionForm form = (CadastroParte1ActionForm)actionForm; HashMap dadosForm = form.getDadosForm(); Pessoa pessoa = new Pessoa(dadosForm); pessoa.setDataInclusao(Principal.getDataHoje()); pessoa.setTipoPessoa("cantor"); Endereco endereco = new Endereco(dadosForm); HashMap pessoaCadastro = new HashMap(); pessoaCadastro.put("pessoa",pessoa); pessoaCadastro.put("endereco",endereco); return pessoaCadastro; } }

Classe CadastroParte1ActionForm.java /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import util.Principal; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastroParte1ActionForm extends ActionForm{

97

private final Map values = new HashMap(); public ActionErrors validate( ActionMapping mapping, HttpServletRequest request){ HashMap dadosForm = getDadosForm(); ActionErrors erros = new ActionErrors(); if (dadosForm.get("email").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_email")); }else{ if (!Principal.emailEhValido((String)dadosForm.get("email"))) erros.add("", new ActionError("erro.email_invalido")); } if (dadosForm.get("senha").equals("")){ erros.add("campo_vazio", new ActionError("erro.campo_senha")); } return erros; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm(){ HashMap dadosForm = new HashMap(); dadosForm.put("email", getValue("email")); dadosForm.put("senha", getValue("senha").toString()); dadosForm.put("nome", getValue("nome")); dadosForm.put("dataNascimento", Principal.parseDate(getValue("dataNascimento").toString())); dadosForm.put("naturalidade", getValue("naturalidade")); dadosForm.put("rg", getValue("rg")); dadosForm.put("estadoCivil", getValue("estadoCivil")); dadosForm.put("orgaoExpedidor", getValue("orgaoExpedidor")); dadosForm.put("dataEmissao", Principal.parseDate(getValue("dataEmissao").toString())); dadosForm.put("cpf", getValue("cpf")); dadosForm.put("passaporte", getValue("passaporte")); dadosForm.put("rua", getValue("rua")); dadosForm.put("bairro", getValue("bairro")); dadosForm.put("cep", getValue("cep")); dadosForm.put("numero", getValue("numero")); dadosForm.put("cidade", getValue("cidade")); dadosForm.put("estado", getValue("estado")); dadosForm.put("telResidencial", getValue("telResidencial"));

98

dadosForm.put("telComercial", getValue("telComercial")); dadosForm.put("telOutros", getValue("telOutros")); return dadosForm; } }

Classe CadastroParte2Action.java: package cadastro; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; public class CadastroParte2Action extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (request.getSession().getAttribute("pessoaCadastro") != null) { HashMap pessoaCadastro = (HashMap)request.getSession().getAttribute("pessoaCadastro"); pessoaCadastro = setDadosForm(actionForm, pessoaCadastro); request.getSession().setAttribute("pessoaCadastro", pessoaCadastro); } else { return mapping.findForward("paginaErro"); } Principal.montaComboBoxGrupo(request); return mapping.findForward("parte3"); } private HashMap setDadosForm(ActionForm actionForm, HashMap pessoaCadastro){ CadastroParte2ActionForm form = (CadastroParte2ActionForm)actionForm; HashMap dadosForm = form.getDadosForm(); pessoaCadastro.put("dadosForm2",dadosForm); return pessoaCadastro; } }

99

Classe CadastroParte2ActionForm.java: package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * CadastroParte2ActionForm.java created by EasyStruts - XsltGen. * http://easystruts.sf.net * created on 08-13-2004 * * XDoclet definition: * @struts:form name="CadastroParte2ActionForm" */ public class CadastroParte2ActionForm extends ActionForm { // --------------------------------------------------------- Instance Variables /** nome property */ private String nome; // --------------------------------------------------------- Methods private final Map values = new HashMap(); public ActionErrors validate(ActionMapping map, HttpServletRequest request){ ActionErrors erros = new ActionErrors(); return erros; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm(){ HashMap dadosForm = new HashMap(); dadosForm.put("naipe", getValue("naipe")); dadosForm.put("cantandoNo", getValue("cantandoNo")); dadosForm.put("empresaQueTrabalha", getValue("empresaQueTrabalha"));

100

dadosForm.put("nomeArtistico", getValue("nomeArtistico")); dadosForm.put("placaCarro", getValue("placaCarro")); dadosForm.put("modeloCarro", getValue("modeloCarro")); dadosForm.put("corCarro", getValue("corCarro")); dadosForm.put("grauInstrucao", getValue("grauInstrucao")); dadosForm.put("cursoFeevale", getValue("cursoFeevale")); dadosForm.put("semestreFeevale", getValue("semestreFeevale")); dadosForm.put("matricula", getValue("matricula")); dadosForm.put("cursoOutraInst", getValue("cursoOutraInst")); dadosForm.put("semestreOutraInst", getValue("semestreOutraInst")); dadosForm.put("instituicao", getValue("instituicao")); return dadosForm; } }

Classe CadastroParte3Action.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; import coral.Cantor; import coral.Idiomas; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates

101

*/ public class CadastroParte3Action extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (request.getSession().getAttribute("pessoaCadastro") != null) { HashMap pessoaCadastro = (HashMap)request.getSession().getAttribute("pessoaCadastro"); setDadosForm(actionForm, pessoaCadastro); return mapping.findForward("cadastroRealizado"); } else { return mapping.findForward("paginaErro"); } } private void setDadosForm(ActionForm actionForm, HashMap pessoaCadastro) { CadastroParte3ActionForm form = (CadastroParte3ActionForm)actionForm; Cantor cantor = new Cantor(); HashMap dadosForm = form.getDadosForm(); setDadosForm2((HashMap)pessoaCadastro.get("dadosForm2"), cantor); cantor.setIdGrupo(new Integer(dadosForm.get("idGrupo").toString())); cantor.setTextCantaAtualmente(dadosForm.get("textCantaAtualmente").toString()); cantor.setTextJaCantou(dadosForm.get("textJaCantou").toString()); cantor.setTextInstrumentosMusicais(dadosForm.get("textInstrumentosMusicais").toString()); pessoaCadastro.put("cantor",cantor); Integer idCantor = Principal.salvaDadosCantor(pessoaCadastro); //for (int i = 1 i < 5; i++) if (!dadosForm.get("idioma1").equals("")) { Idiomas idioma = new Idiomas(); idioma.setNome(dadosForm.get("idioma1").toString()); idioma.setConhecimento(dadosForm.get("idioma1Radio").toString()); idioma.setIdCantor(idCantor); Principal.salvaIdioma(idioma); if (!dadosForm.get("idioma2").equals("")) { idioma = new Idiomas(); idioma.setNome(dadosForm.get("idioma2").toString()); idioma.setConhecimento(dadosForm.get("idioma2Radio").toString()); idioma.setIdCantor(idCantor); Principal.salvaIdioma(idioma); }

102

if (!dadosForm.get("idioma3").equals("")) { idioma = new Idiomas(); idioma.setNome(dadosForm.get("idioma3").toString()); idioma.setConhecimento(dadosForm.get("idioma3Radio").toString()); idioma.setIdCantor(idCantor); Principal.salvaIdioma(idioma); } if (!dadosForm.get("idioma4").equals("")) { idioma = new Idiomas(); idioma.setNome(dadosForm.get("idioma4").toString()); idioma.setConhecimento(dadosForm.get("idioma4Radio").toString()); idioma.setIdCantor(idCantor); Principal.salvaIdioma(idioma); } if (!dadosForm.get("idioma5").equals("")) { idioma = new Idiomas(); idioma.setNome(dadosForm.get("idioma5").toString()); idioma.setConhecimento(dadosForm.get("idioma5Radio").toString()); idioma.setIdCantor(idCantor); Principal.salvaIdioma(idioma); } } } private void setDadosForm2(HashMap dadosForm, Cantor cantor){ cantor.setNaipe((String)dadosForm.get("naipe")); cantor.setCantandoNo(dadosForm.get("cantandoNo").toString()); cantor.setEmpresaQueTrabalha(dadosForm.get("empresaQueTrabalha").toString()); cantor.setNomeArtistico(dadosForm.get("nomeArtistico").toString()); cantor.setPlacaCarro(dadosForm.get("placaCarro").toString()); cantor.setModeloCarro(dadosForm.get("modeloCarro").toString()); cantor.setCorCarro(dadosForm.get("corCarro").toString()); if(dadosForm.get("grauInstrucao") != null) cantor.setGrauInstrucao(dadosForm.get("grauInstrucao").toString()); cantor.setMatricula(dadosForm.get("matricula").toString()); if (dadosForm.get("cursoFeevale").toString().equals("")){ cantor.setCurso(dadosForm.get("cursoOutraInst").toString()); cantor.setSemestre(dadosForm.get("semestreFeevale").toString()); }else{

103

cantor.setCurso(dadosForm.get("cursoFeevale").toString()); cantor.setSemestre(dadosForm.get("semestreOutraInst").toString()); cantor.setInstituicao(dadosForm.get("instituicao").toString()); } } }

Classe CadastroParte3ActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CadastroParte3ActionForm extends ActionForm{ private final Map values = new HashMap(); public ActionErrors validate( ActionMapping mapping, HttpServletRequest request){ return null; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm(){ HashMap dadosForm = new HashMap();

104

dadosForm.put("idGrupo", getValue("idGrupo")); dadosForm.put("textCantaAtualmente", getValue("textCantaAtualmente")); dadosForm.put("textJaCantou", getValue("textJaCantou")); dadosForm.put("textInstrumentosMusicais", getValue("textInstrumentosMusicais")); dadosForm.put("idioma1", getValue("idioma1")); dadosForm.put("idioma1Radio", getValue("idioma1Radio")); dadosForm.put("idioma2", getValue("idioma2")); dadosForm.put("idioma2Radio", getValue("idioma2Radio")); dadosForm.put("idioma3", getValue("idioma3")); dadosForm.put("idioma3Radio", getValue("idioma3Radio")); dadosForm.put("idioma4", getValue("idioma4")); dadosForm.put("idioma4Radio", getValue("idioma4Radio")); dadosForm.put("idioma5", getValue("idioma5")); dadosForm.put("idioma5Radio", getValue("idioma5Radio")); return dadosForm; } }

Classe ExcluirCantorAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.hibernate.HibernateException; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.Principal; import banco.DAOCantor; import banco.DAOException; import banco.DAOGrupo; import banco.DAOPessoa; import coral.Cantor; import coral.Grupo; import coral.Pessoa; /**

105

* @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ExcluiCantorAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ExcluiCantorActionForm form = (ExcluiCantorActionForm)actionForm; Pessoa pessoa; if (request.getSession().getAttribute("pessoaAutenticada") != null) { if (form.getValue("auxiliarHidden") != null) { if (form.getValue("auxiliarHidden").equals("visualizar")) { montaCantor(form); request.getSession().setAttribute("estado", "visualizar"); return mapping.findForward("excluirCantor"); } else if (form.getValue("auxiliarHidden").equals("excluir")) { excluiCantor(form); return mapping.findForward("cantorExcluido"); } } else{ Principal.montaComboBoxPessoa(request); return mapping.findForward("excluirCantor"); } } return mapping.findForward("paginaErro"); } /** * @param form */ private void excluiCantor(ExcluiCantorActionForm form) { DAOCantor daoCantor = new DAOCantor(); DAOPessoa daoPessoa = new DAOPessoa(); try { Pessoa pessoa = daoPessoa.getPessoa(new Integer(form.getValue("idPessoa").toString())); Integer idPessoa = pessoa.getIdPessoa(); daoCantor.removeCantor(daoCantor.findByIdPessoa(idPessoa)); daoPessoa.removePessoa(idPessoa); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); }

106

} /** * @param form */ private void montaCantor(ExcluiCantorActionForm form) { DAOCantor daoCantor = new DAOCantor(); DAOPessoa daoPessoa = new DAOPessoa(); DAOGrupo daoGrupo = new DAOGrupo(); try { Pessoa pessoa = daoPessoa.getPessoa(new Integer(form.getValue("idPessoa").toString())); Cantor cantor = daoCantor.findByIdPessoa(pessoa.getIdPessoa()); Grupo grupo = daoGrupo.findById(cantor.getIdGrupo()); form.setDadosForm(cantor, pessoa, grupo.getNome()); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

Classe ExcluirCantorActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cadastro; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import net.sf.hibernate.HibernateException; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import banco.DAOEndereco; import banco.DAOException; import coral.Cantor;

107

import coral.Endereco; import coral.Pessoa; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ExcluiCantorActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } /** * @param cantor * @param pessoa * @param string */ public void setDadosForm(Cantor cantor, Pessoa pessoa, String nomeGrupo) { setValue("email", pessoa.getEmail()); setValue("nome", pessoa.getNome()); Date data = pessoa.getDataNascimento(); if (data != null) { String dataStr = String.valueOf(data.getDate()) + "/" + String.valueOf(data.getMonth() + 1) + "/" + String.valueOf(data.getYear()); setValue("dataNascimento", dataStr); } data = pessoa.getDataEmissao(); if (data != null) { String dataStr = String.valueOf(data.getDate()) + "/" + String.valueOf(data.getMonth() + 1) + "/" + String.valueOf(data.getYear()); setValue("dataEmissao", dataStr); } setValue("naturalidade", pessoa.getNaturalidade()); setValue("rg", pessoa.getRg()); setValue("estadoCivil", pessoa.getEstadoCivil()); setValue("orgaoExpedidor", pessoa.getOrgaoExpedidor()); setValue("cpf", pessoa.getCpf()); setValue("passaporte", pessoa.getPassaporte());

108

//ENDERECO try { DAOEndereco daoEndereco = new DAOEndereco(); System.out.println("Pegando Endereco"); Endereco endereco = daoEndereco.findById(pessoa.getIdEndereco()); setValue("rua", endereco.getRua()); setValue("bairro", endereco.getBairro()); setValue("cep", endereco.getCep()); setValue("numero", endereco.getNumero()); setValue("cidade", endereco.getCidade()); setValue("estado", endereco.getEstado()); setValue("telResidencial", endereco.getTelResidencial()); setValue("telComercial", endereco.getTelComercial()); setValue("telOutros", endereco.getTelOutros()); setValue("nomeArtistico", cantor.getNomeArtistico()); setValue("grupo", nomeGrupo); // TODO Auto-generated method stub } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

Classe Administrador.java package coral; /** * @author Marcelo * @hibernate.class table="Administrador" dynamic-update="true" */ public class Administrador { private Integer idAdministrador; private Integer idPessoa; /** * @hibernate.id generator-class="native" */ public Integer getIdAdministrador() { return idAdministrador; }

109

/** * @param integer */ public void setIdAdministrador(Integer integer) { idAdministrador = integer; } /** * @hibernate.property @return */ public Integer getIdPessoa() { return idPessoa; } /** * @param integer */ public void setIdPessoa(Integer integer) { idPessoa = integer; } } Classe Cantor.java: package coral; import java.util.HashMap; /** * @author Marcelo * @hibernate.class table="cantor" dynamic-update="true" */ public class Cantor { private Integer idCantor; private Integer idPessoa; private Integer idGrupo; private String empresaQueTrabalha; private String cantandoNo; private String naipe; private String NomeArtistico; //AUTOMÓVEL private String placaCarro; private String modeloCarro;

110

private String corCarro; private String grauInstrucao; //ALUNO FEEVALE private String curso; private String semestre; private String instituicao; private String matricula; //PERGUNTAS: private String textCantaAtualmente; private String textJaCantou; private String textInstrumentosMusicais; public Cantor(){ } public Cantor(HashMap dadosCantor){ setNaipe((String)dadosCantor.get("naipe")); setCantandoNo(dadosCantor.get("cantandoNo").toString()); } /** * @hibernate.id generator-class="native" */ public Integer getIdCantor() { return idCantor; } /** * @param integer */ public void setIdCantor(Integer integer) { idCantor = integer; } /** * @hibernate.property @return */ public String getCantandoNo() { return cantandoNo; } /** * @hibernate.property @return */ public String getCorCarro() { return corCarro; }

111

/** * @hibernate.property @return */ public String getCurso() { return curso; } /** * @hibernate.property @return */ public String getEmpresaQueTrabalha() { return empresaQueTrabalha; } /** * @hibernate.property @return */ public String getGrauInstrucao() { return grauInstrucao; } /** * @hibernate.property @return */ public Integer getIdPessoa() { return idPessoa; } /** * @hibernate.property @return */ public String getInstituicao() { return instituicao; } /** * @hibernate.property @return */ public String getModeloCarro() { return modeloCarro; } /** * @hibernate.property @return */ public String getNaipe() { return naipe; } /** * @hibernate.property @return */ public String getNomeArtistico() { return NomeArtistico; }

112

/** * @hibernate.property @return */ public String getPlacaCarro() { return placaCarro; } /** * @hibernate.property @return */ public String getSemestre() { return semestre; } /** * @hibernate.property @return */ public String getTextCantaAtualmente() { return textCantaAtualmente; } /** * @hibernate.property @return */ public String getTextInstrumentosMusicais() { return textInstrumentosMusicais; } /** * @hibernate.property @return */ public String getTextJaCantou() { return textJaCantou; } /** * @param string */ public void setCantandoNo(String string) { cantandoNo = string; } /** * @param string */ public void setCorCarro(String string) { corCarro = string; } /** * @param string */ public void setCurso(String string) { curso = string; } /**

113

* @param string */ public void setEmpresaQueTrabalha(String string) { empresaQueTrabalha = string; } /** * @param string */ public void setGrauInstrucao(String string) { grauInstrucao = string; } /** * @param integer */ public void setIdPessoa(Integer integer) { idPessoa = integer; } /** * @param string */ public void setInstituicao(String string) { instituicao = string; } /** * @param string */ public void setModeloCarro(String string) { modeloCarro = string; } /** * @param string */ public void setNaipe(String string) { naipe = string; } /** * @param string */ public void setNomeArtistico(String string) { NomeArtistico = string; } /** * @param string */ public void setPlacaCarro(String string) { placaCarro = string; } /** * @param string

114

*/ public void setSemestre(String string) { semestre = string; } /** * @param string */ public void setTextCantaAtualmente(String string) { textCantaAtualmente = string; } /** * @param string */ public void setTextInstrumentosMusicais(String string) { textInstrumentosMusicais = string; } /** * @param string */ public void setTextJaCantou(String string) { textJaCantou = string; } /** * @hibernate.property @return */ public String getMatricula() { return matricula; } /** * @param string */ public void setMatricula(String string) { matricula = string; } /** * @hibernate.property @return */ public Integer getIdGrupo() { return idGrupo; } /** * @param integer */ public void setIdGrupo(Integer integer) { idGrupo = integer; } }

115

Classe Endereço.java: package coral; import java.util.HashMap; /** * @author Marcelo * @hibernate.class table="endereco" dynamic-update="true" */ public class Endereco { private Integer idEndereco; //ENDEREÇO: private String rua; private String bairro; private String cidade; private String estado; private Long numero; private String cep; //TELEFONES: private Long telResidencial; private Long telComercial; private String telOutros; public Endereco(){ } public Endereco(HashMap dadosEndereco){ setRua(dadosEndereco.get("rua").toString()); setBairro(dadosEndereco.get("bairro").toString()); setCep(dadosEndereco.get("cep").toString()); if (!dadosEndereco.get("numero").equals("")) setNumero(new Long(dadosEndereco.get("numero").toString())); setCidade(dadosEndereco.get("cidade").toString()); setEstado(dadosEndereco.get("estado").toString()); if (!dadosEndereco.get("telResidencial").equals("")) setTelResidencial(new Long(dadosEndereco.get("telResidencial").toString())); if (!dadosEndereco.get("telComercial").equals("")) setTelComercial(new Long(dadosEndereco.get("telComercial").toString())); setTelOutros(dadosEndereco.get("telOutros").toString());

116

} /** * @hibernate.id generator-class="native" */ public Integer getIdEndereco() { return idEndereco; } /** * @param integer */ public void setIdEndereco(Integer integer) { idEndereco = integer; } /** * @hibernate.property @return */ public String getCep() { return cep; } /** * @hibernate.property @return */ public String getCidade() { return cidade; } /** * @hibernate.property @return */ public Long getNumero() { return numero; } /** * @hibernate.property @return */ public String getRua() { return rua; } /** * @hibernate.property @return */ public Long getTelComercial() { return telComercial; } /** * @hibernate.property @return */ public String getTelOutros() { return telOutros; }

117

/** * @hibernate.property @return */ public Long getTelResidencial() { return telResidencial; } /** * @param string */ public void setBairro(String string) { bairro = string; } /** * @param string */ public void setCep(String string) { cep = string; } /** * @param string */ public void setCidade(String string) { cidade = string; } /** * @param long1 */ public void setNumero(Long long1) { numero = long1; } /** * @param string */ public void setRua(String string) { rua = string; } /** * @param long1 */ public void setTelComercial(Long long1) { telComercial = long1; } /** * @param string */ public void setTelOutros(String string) { telOutros = string; }

118

/** * @param long1 */ public void setTelResidencial(Long long1) { telResidencial = long1; } /** * @hibernate.property @return */ public String getEstado() { return estado; } /** * @param string */ public void setEstado(String string) { estado = string; } /** * @hibernate.property @return */ public String getBairro() { return bairro; } } Classe Grupo.java: package coral; import java.util.Date; /** * @author Marcelo * @hibernate.class table="grupo" dynamic-update="true" */ public class Grupo { private Integer idGrupo; private String nome; private String descricao; private Date dataInclusao; /** * @hibernate.id generator-class="native" */ public Integer getIdGrupo() {

119

return idGrupo; } /** * @param integer */ public void setIdGrupo(Integer integer) { idGrupo = integer; } /** * @hibernate.property @return */ public Date getDataInclusao() { return dataInclusao; } /** * @hibernate.property @return */ public String getNome() { return nome; } /** * @param string */ public void setDataInclusao(Date data) { dataInclusao = data; } /** * @param string */ public void setNome(String string) { nome = string; } /** * @hibernate.property @return */ public String getDescricao() { return descricao; } /** * @param string */ public void setDescricao(String string) { descricao = string; } }

Classe Idiomas.java:

120

package coral; /** * @author Marcelo * @hibernate.class table="idiomas" dynamic-update="true" */ public class Idiomas { private Integer idIdioma; private String nome; private String conhecimento; private Integer idCantor; /** * @hibernate.id generator-class="native" */ public Integer getIdIdioma() { return idIdioma; } /** * @param integer */ public void setIdIdioma(Integer integer) { idIdioma = integer; } /** * @hibernate.property @return */ public String getNome() { return nome; } /** * @param string */ public void setNome(String string) { nome = string; } /** * @hibernate.property @return */ public String getConhecimento() { return conhecimento; } /** * @hibernate.property @return */ public Integer getIdCantor() {

121

return idCantor; } /** * @param string */ public void setConhecimento(String string) { conhecimento = string; } /** * @param integer */ public void setIdCantor(Integer integer) { idCantor = integer; } } Classe Maestro.java: package coral; /** * @author Marcelo * @hibernate.class table="Maestro" dynamic-update="true" */ public class Maestro { private Integer idMaestro; private Integer idPessoa; private Integer idGrupo; /** * @hibernate.id generator-class="native" */ public Integer getIdMaestro() { return idMaestro; } /** * @param integer */ public void setIdMaestro(Integer integer) { idMaestro = integer; } /** * @hibernate.property @return */ public Integer getIdPessoa() { return idPessoa; }

122

/** * @param integer */ public void setIdPessoa(Integer integer) { idPessoa = integer; } /** * @hibernate.property @return */ public Integer getIdGrupo() { return idGrupo; } /** * @param integer */ public void setIdGrupo(Integer integer) { idGrupo = integer; } }

Classe Pessoa.java: package coral; import java.util.Date; import java.util.HashMap; /** * @author Marcelo * @hibernate.class table="pessoa" dynamic-update="true" */ public class Pessoa { private Integer idPessoa; private String nome; private String email; private String senha; private String naturalidade; private String rg; private String orgaoExpedidor; private String cpf; private String passaporte;

123

private String estadoCivil; private Date dataNascimento; private Date dataEmissao; private Date dataAtualizacao; private Date dataInclusao; private String tipoPessoa; private Integer idEndereco; public Pessoa (){ } public Pessoa (HashMap dadosPessoa){ setEmail(dadosPessoa.get("email").toString()); setSenha(dadosPessoa.get("senha").toString()); setNome(dadosPessoa.get("nome").toString()); setDataNascimento((Date)dadosPessoa.get("dataNascimento")); setNaturalidade(dadosPessoa.get("naturalidade").toString()); setRg(dadosPessoa.get("rg").toString()); setOrgaoExpedidor(dadosPessoa.get("orgaoExpedidor").toString()); setEstadoCivil(dadosPessoa.get("estadoCivil").toString()); setDataEmissao((Date)dadosPessoa.get("dataEmissao")); setCpf(dadosPessoa.get("cpf").toString()); setPassaporte(dadosPessoa.get("passaporte").toString()); } /** * @hibernate.id generator-class="native" */ public Integer getIdPessoa() { return idPessoa; } /** * @param integer */ public void setIdPessoa(Integer integer) { idPessoa = integer; } /** * @hibernate.property @return */ public String getNome() { return nome; } /** * @param string */ public void setNome(String string) {

124

nome = string; } /** * @hibernate.property @return */ public String getCpf() { return cpf; } /** * @hibernate.property @return */ public String getEmail() { return email; } /** * @hibernate.property @return */ public String getEstadoCivil() { return estadoCivil; } /** * @hibernate.property @return */ public String getNaturalidade() { return naturalidade; } /** * @hibernate.property @return */ public String getOrgaoExpedidor() { return orgaoExpedidor; } /** * @hibernate.property @return */ public String getPassaporte() { return passaporte; } /** * @hibernate.property @return */ public String getRg() { return rg; } /** * @hibernate.property @return */ public String getSenha() {

125

return senha; } /** * @param string */ public void setCpf(String string) { cpf = string; } /** * @param string */ public void setEmail(String string) { email = string; } /** * @param string */ public void setEstadoCivil(String string) { estadoCivil = string; } /** * @param string */ public void setNaturalidade(String string) { naturalidade = string; } /** * @param string */ public void setOrgaoExpedidor(String string) { orgaoExpedidor = string; } /** * @param string */ public void setPassaporte(String string) { passaporte = string; } /** * @param string */ public void setRg(String string) { rg = string; } /** * @param string */ public void setSenha(String string) { senha = string;

126

} /** * @param Date */ public void setDataEmissao(Date data) { dataEmissao = data; } /** * @param Date */ public void setDataNascimento(Date data) { dataNascimento = data; } /** * @hibernate.property @return */ public Date getDataEmissao() { return dataEmissao; } /** * @hibernate.property @return */ public Date getDataNascimento() { return dataNascimento; } /** * @hibernate.property @return */ public Integer getIdEndereco() { return idEndereco; } /** * @param integer */ public void setIdEndereco(Integer integer) { idEndereco = integer; } /** * @hibernate.property @return */ public Date getDataInclusao() { return dataInclusao; } /** * @hibernate.property @return */ public String getTipoPessoa() { return tipoPessoa; }

127

/** * @hibernate.property @return */ public Date getDataAtualizacao() { return dataAtualizacao; } /** * @param date */ public void setDataAtualizacao(Date date) { dataAtualizacao = date; } /** * @param date */ public void setDataInclusao(Date date) { dataInclusao = date; } /** * @param string */ public void setTipoPessoa(String string) { tipoPessoa = string; } } Classe Professor.java: package coral; /** * @author Marcelo * @hibernate.class table="Professor" dynamic-update="true" */ public class Professor { private Integer idProfessor; private Integer idPessoa; /** * @hibernate.id generator-class="native" */ public Integer getIdProfessor() { return idProfessor; } /** * @param integer */

128

public void setIdProfessor(Integer integer) { idProfessor = integer; } /** * @hibernate.property @return */ public Integer getIdPessoa() { return idPessoa; } /** * @param integer */ public void setIdPessoa(Integer integer) { idPessoa = integer; } } Arquivo Administrador.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Administrador" table="administrador" dynamic-update="true" dynamic-insert="false" > <id name="idAdministrador" column="id_administrador" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="idPessoa" type="java.lang.Integer" update="true" insert="true" column="id_pessoa" /> <!--

129

To add non XDoclet property mappings, create a file named hibernate-properties-Administrador.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Cantor.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Cantor" table="cantor" dynamic-update="true" dynamic-insert="false" > <id name="idCantor" column="id_cantor" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="cantandoNo" type="java.lang.String" update="true" insert="true" column="cantando_no" /> <property name="corCarro" type="java.lang.String" update="true" insert="true" column="cor_carro" /> <property name="curso" type="java.lang.String"

130

update="true" insert="true" column="curso" /> <property name="empresaQueTrabalha" type="java.lang.String" update="true" insert="true" column="empresa_que_trabalha" /> <property name="grauInstrucao" type="java.lang.String" update="true" insert="true" column="grau_instrucao" /> <property name="idPessoa" type="java.lang.Integer" update="true" insert="true" column="id_pessoa" /> <property name="idGrupo" type="java.lang.Integer" update="true" insert="true" column="id_grupo" /> <property name="instituicao" type="java.lang.String" update="true" insert="true" column="instituicao" /> <property name="modeloCarro" type="java.lang.String" update="true" insert="true" column="modelo_carro" /> <property name="naipe" type="java.lang.String" update="true"

131

insert="true" column="naipe" /> <property name="nomeArtistico" type="java.lang.String" update="true" insert="true" column="nome_artistico" /> <property name="placaCarro" type="java.lang.String" update="true" insert="true" column="placa_carro" /> <property name="semestre" type="java.lang.String" update="true" insert="true" column="semestre" /> <property name="textCantaAtualmente" type="java.lang.String" update="true" insert="true" column="couros_que_canta" /> <property name="textInstrumentosMusicais" type="java.lang.String" update="true" insert="true" column="instrumentos_musicais" /> <property name="textJaCantou" type="java.lang.String" update="true" insert="true" column="couros_que_cantou" /> <property name="matricula" type="java.lang.String" update="true" insert="true"

132

column="matricula" /> <!-- To add non XDoclet property mappings, create a file named hibernate-properties-Cantor.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Endereco.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Endereco" table="endereco" dynamic-update="true" dynamic-insert="false" > <id name="idEndereco" column="id_endereco" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="cep" type="java.lang.String" update="true" insert="true" column="cep" /> <property name="bairro" type="java.lang.String" update="true" insert="true" column="bairro" />

133

<property name="cidade" type="java.lang.String" update="true" insert="true" column="cidade" /> <property name="numero" type="java.lang.Long" update="true" insert="true" column="numero" /> <property name="rua" type="java.lang.String" update="true" insert="true" column="rua" /> <property name="telComercial" type="java.lang.Long" update="true" insert="true" column="telefone_comercial" /> <property name="telOutros" type="java.lang.String" update="true" insert="true" column="telefone_outros" /> <property name="telResidencial" type="java.lang.Long" update="true" insert="true" column="telefone_residencial" /> <property name="estado" type="java.lang.String" update="true" insert="true" column="estado" />

134

<!-- To add non XDoclet property mappings, create a file named hibernate-properties-Endereco.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Grupo.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Grupo" table="grupo" dynamic-update="true" dynamic-insert="false" > <id name="idGrupo" column="id_grupo" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="dataInclusao" type="java.util.Date" update="true" insert="true" column="data_inclusao" /> <property name="nome" type="java.lang.String" update="true" insert="true" column="nome" /> <property name="descricao"

135

type="java.lang.String" update="true" insert="true" column="descricao" /> <!-- To add non XDoclet property mappings, create a file named hibernate-properties-Grupo.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Idiomas.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Idiomas" table="idiomas" dynamic-update="true" dynamic-insert="false" > <id name="idIdioma" column="id_idioma" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="nome" type="java.lang.String" update="true" insert="true" column="nome" /> <property name="conhecimento" type="java.lang.String" update="true"

136

insert="true" column="conhecimento" /> <property name="idCantor" type="java.lang.Integer" update="true" insert="true" column="id_cantor" /> <!-- To add non XDoclet property mappings, create a file named hibernate-properties-Idiomas.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Maestro.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Maestro" table="Maestro" dynamic-update="true" dynamic-insert="false" > <id name="idMaestro" column="id_maestro" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="idPessoa" type="java.lang.Integer" update="true" insert="true" column="id_pessoa"

137

/> <property name="idGrupo" type="java.lang.Integer" update="true" insert="true" column="id_grupo" /> <!-- To add non XDoclet property mappings, create a file named hibernate-properties-Maestro.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Pessoa.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Pessoa" table="pessoa" dynamic-update="true" dynamic-insert="false" > <id name="idPessoa" column="id_pessoa" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="nome" type="java.lang.String" update="true" insert="true" column="nome" />

138

<property name="cpf" type="java.lang.String" update="true" insert="true" column="cpf" /> <property name="email" type="java.lang.String" update="true" insert="true" column="email" /> <property name="estadoCivil" type="java.lang.String" update="true" insert="true" column="estado_civil" /> <property name="naturalidade" type="java.lang.String" update="true" insert="true" column="naturalidade" /> <property name="orgaoExpedidor" type="java.lang.String" update="true" insert="true" column="orgao_expedidor" /> <property name="passaporte" type="java.lang.String" update="true" insert="true" column="passaporte" /> <property name="rg" type="java.lang.String" update="true" insert="true" column="rg" /> <property

139

name="senha" type="java.lang.String" update="true" insert="true" column="senha" /> <property name="dataEmissao" type="java.util.Date" update="true" insert="true" column="data_emissao" /> <property name="dataNascimento" type="java.util.Date" update="true" insert="true" column="data_nascimento" /> <property name="dataAtualizacao" type="java.util.Date" update="true" insert="true" column="data_atualizacao" /> <property name="dataInclusao" type="java.util.Date" update="true" insert="true" column="data_inclusao" /> <property name="tipoPessoa" type="java.lang.String" update="true" insert="true" column="tipo_pessoa" /> <property name="idEndereco" type="java.lang.Integer" update="true" insert="true" column="id_endereco" /> <!-- To add non XDoclet property mappings, create a file named

140

hibernate-properties-Pessoa.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

Arquivo Professor.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="coral.Professor" table="professor" dynamic-update="true" dynamic-insert="false" > <id name="idProfessor" column="id_professor" type="java.lang.Integer" > <generator class="native"> </generator> </id> <property name="idPessoa" type="java.lang.Integer" update="true" insert="true" column="id_pessoa" /> <!-- To add non XDoclet property mappings, create a file named hibernate-properties-Professor.xml containing the additional properties and place it in your merge dir. --> </class> </hibernate-mapping>

141

Classe GerarRelatorioAction.java /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package ferramentas; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import util.ConstantesCoral; import util.Principal; import coral.Pessoa; import dori.jasper.engine.JRException; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GerarRelatorioAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { Pessoa pessoa; if (request.getSession().getAttribute("pessoaAutenticada") != null) { Principal geraReport = new Principal(); try { GerarRelatorioActionForm form = (GerarRelatorioActionForm)actionForm; HashMap dadosForm = form.getDadosForm(); String relatorio = ""; String query = ""; if (dadosForm.get("relatorio").equals("1")){ relatorio = ConstantesCoral.RELATORIO_NOME_EMAIL_DATA_IN; query = ConstantesCoral.RELATORIO_NOME_EMAIL_DATA_IN_QUERY; }else if (dadosForm.get("relatorio").equals("2")){ relatorio = ConstantesCoral.RELATORIO_NOME_CURSO_NATRICULA_DATA_IN;

142

query = ConstantesCoral.RELATORIO_NOME_CURSO_NATRICULA_DATA_IN_QUERY; }else if (dadosForm.get("relatorio").equals("3")){ relatorio = ConstantesCoral.RELATORIO_NOME_GRUPO_NOME_ARTISTICO_DATA_IN; query = ConstantesCoral.RELATORIO_NOME_GRUPO_NOME_ARTISTICO_DATA_IN_QUERY; }else if (dadosForm.get("relatorio").equals("4")){ relatorio = ConstantesCoral.RELATORIO_NOME_NAIPE_CANTANDO_NO_DATA_IN; query = ConstantesCoral.RELATORIO_NOME_NAIPE_CANTANDO_NO_DATA_IN_QUERY; }else{ relatorio = ConstantesCoral.RELATORIO_NOME_EMAIL_NATURALIDADE_RG_DATA_IN; query = ConstantesCoral.RELATORIO_NOME_EMAIL_NATURALIDADE_RG_DATA_IN_QUERY; } geraReport.geraRelatorio(relatorio,query); } catch (JRException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return mapping.findForward("relatorioGerado"); } return mapping.findForward("paginaErro"); } }

Classe GerarRelatorioActionForm.java /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package ferramentas; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping;

143

/** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GerarRelatorioActionForm extends ActionForm { private final Map values = new HashMap(); public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void setValue(String key, Object value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm() { HashMap dadosForm = new HashMap(); dadosForm.put("relatorio", getValue("relatorio")); return dadosForm; } }

Classe LoginAction.java: /* * Created on 03/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package login; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * @author Marcelo * * TODO To change the template for this generated type comment go to

144

* Window - Preferences - Java - Code Style - Code Templates */ public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { /* LoginActionForm form = (LoginActionForm)actionForm; HashMap dadosForm = form.getDadosForm(); DAOPessoa daoPessoa = new DAOPessoa(); try { Pessoa pessoa = null; ArrayList pessoas = (ArrayList)daoPessoa.findByEmail((String)dadosForm.get("email")); if (pessoas!= null){ pessoa = (Pessoa)pessoas.get(0); } if (pessoa != null) { if (pessoa.getSenha().equals(dadosForm.get("senha"))) { request.getSession().setAttribute("pessoaAutenticada", pessoa);*/ return mapping.findForward("paginaSudoeste");/* } else //erro System.out.print("Senha incorreta"); } else //erro System.out.print("Pessoa não existente."); } catch (HibernateException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println(1); System.out.println("PASSOU LOGIN******"); return mapping.findForward("formLogin");*/ } }

Classe LoginActionForm.java: /* * Created on 06/08/2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package login; import java.util.ArrayList; import java.util.HashMap;

145

import java.util.Map; import javax.servlet.http.HttpServletRequest; import net.sf.hibernate.HibernateException; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import banco.DAOPessoa; import coral.Pessoa; /** * @author Marcelo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class LoginActionForm extends ActionForm{ private final Map values = new HashMap(); public ActionErrors validate( ActionMapping mapping, HttpServletRequest request){ HashMap dadosForm = getDadosForm(); DAOPessoa daoPessoa = new DAOPessoa(); ActionErrors erros = new ActionErrors(); try { Pessoa pessoa = null; ArrayList pessoas = (ArrayList)daoPessoa.findByEmail((String)dadosForm.get("email")); if (pessoas!= null){ pessoa = (Pessoa)pessoas.get(0); } if (pessoa != null) { if (pessoa.getSenha().equals(dadosForm.get("senha"))) { request.getSession().setAttribute("pessoaAutenticada", pessoa); } else erros.add("campo_vazio", new ActionError("erro.senha_incorreta")); } else erros.add("campo_vazio", new ActionError("erro.email_inexistente")); } catch (HibernateException e1) { e1.printStackTrace(); } return null; } public void setValue(String key, Object value) { values.put(key, value); }

146

public void setValue(String key, Boolean value) { values.put(key, value); } public Object getValue(String key) { return values.get(key); } public HashMap getDadosForm(){ HashMap dadosForm = new HashMap(); dadosForm.put("email", getValue("email")); dadosForm.put("senha", getValue("senha")); return dadosForm; } }

Classe ConstantesCoral.java: package util; /** * @author Marcelo * * To change the template for this generated type comment go to * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */ public final class ConstantesCoral { static final public String EMAIL_ADMINISTRADOR = "[email protected]"; static final public String ASSUNTO_EMAIL_CADASTRO = "Confirmação de Cadastro"; static final public String FORMAT_DATA_STRING = "dd/MM/yyyy"; static final public String LINK_CONFIRMACAO_CADASTRO = "http://127.0.0.1:8080/coral/confirmaCadastro.do"; static final public String RELATORIO_NOME_EMAIL_DATA_IN = "nome_email.jasper"; static final public String RELATORIO_NOME_CURSO_NATRICULA_DATA_IN = "nome_curso_matricula.jasper"; static final public String RELATORIO_NOME_GRUPO_NOME_ARTISTICO_DATA_IN = "nome_grupo_nomeArtistico.jasper"; static final public String RELATORIO_NOME_NAIPE_CANTANDO_NO_DATA_IN = "nome_naipe_cantandoNo.jasper"; static final public String RELATORIO_NOME_EMAIL_NATURALIDADE_RG_DATA_IN = "nome_email_naturalidade_rg.jasper";

147

static final public String RELATORIO_NOME_EMAIL_DATA_IN_QUERY = "Select * from Pessoa"; static final public String RELATORIO_NOME_CURSO_NATRICULA_DATA_IN_QUERY = "select nome,curso,matricula,data_inclusao from Pessoa p, Cantor c where p.id_pessoa = c.id_pessoa"; static final public String RELATORIO_NOME_GRUPO_NOME_ARTISTICO_DATA_IN_QUERY = "select p.nome,g.nome as nomeGrupo,c.nome_artistico,p.data_inclusao from Pessoa p, Cantor c, Grupo g where p.id_pessoa = c.id_pessoa AND c.id_grupo = g.id_grupo"; static final public String RELATORIO_NOME_NAIPE_CANTANDO_NO_DATA_IN_QUERY = "select p.nome,c.naipe,c.cantando_no,p.data_inclusao from Pessoa p, Cantor c where p.id_pessoa = c.id_pessoa"; static final public String RELATORIO_NOME_EMAIL_NATURALIDADE_RG_DATA_IN_QUERY = "select p.nome,p.email,p.naturalidade,p.rg, p.data_inclusao from Pessoa p"; static final public String TIPO_PESSOA_PROFESSOR = "professor"; static final public String TIPO_PESSOA_ADMINISTRADOR = "administrador"; static final public String TIPO_PESSOA_CANTOR = "cantor"; static final public String TIPO_PESSOA_MAESTRO = "maestro"; }

Classe Principal.java: /* * Created on 01/06/2004 * * To change the template for this generated file go to * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */ package util; import java.io.InputStream; import java.security.Key; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey;

148

import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.http.HttpServletRequest; import javax.sql.DataSource; import net.sf.hibernate.HibernateException; import banco.DAOCantor; import banco.DAOEndereco; import banco.DAOException; import banco.DAOGrupo; import banco.DAOIdiomas; import banco.DAOPessoa; import banco.DAOProfessor; import coral.Cantor; import coral.Endereco; import coral.Grupo; import coral.Idiomas; import coral.Pessoa; import coral.Professor; import dori.jasper.engine.JRException; import dori.jasper.engine.JRResultSetDataSource; import dori.jasper.engine.JasperExportManager; import dori.jasper.engine.JasperFillManager; import dori.jasper.engine.JasperPrint; import dori.jasper.view.JasperViewer; /** * @author Marcelo * * To change the template for this generated type comment go to * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */ public class Principal { public static String HTML = "H"; public static String PDF = "P"; public static String REPORT = "report"; public static String IMAGE_MAP = "imageMap"; //Formata a data informada para o padrão ConstantesCoral.FORMAT_DATA_STRING. public static String getDataFormatada() { SimpleDateFormat format = new SimpleDateFormat(ConstantesCoral.FORMAT_DATA_STRING); java.util.Calendar c = java.util.Calendar.getInstance(); java.util.Date d = c.getTime(); // data do servidor return format.format(d); } public static Date getDataHoje() { java.util.Calendar c = java.util.Calendar.getInstance(); java.util.Date d = c.getTime(); // data do servidor return d; }

149

public static Date getDataFormatada(String data) { SimpleDateFormat format = new SimpleDateFormat(ConstantesCoral.FORMAT_DATA_STRING); format = new SimpleDateFormat("MM/dd/yyyy"); try { return format.parse(data); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } //Atualiza ou insere uma pessoa no banco. public static Pessoa salvaPessoa(Pessoa pessoa) { DAOPessoa daoPessoa = new DAOPessoa(); try { return daoPessoa.savePessoa(pessoa); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } // Verifica se o email é sintaticamente correto. public static boolean emailEhValido(String email) { String regex = "^[a-zA-Z0-9._-]+@([a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+){1,3}$"; return email.matches(regex); } private Connection getConnection(String dataSourceName) { Context ctx; try { ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(dataSourceName); return ds.getConnection(); } catch (NamingException e) { //e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block //e.printStackTrace(); } return null; } /* Real za con tornan i exão com o banco de dados, re do o objeto Connection */ private static Connection getConnection() throws ClassNotFoundException, SQLException { String driver = "org.gjt.mm.mysql.Driver"; String url = "jdbc:mysql://localhost/coral"; String user = "root"; String password = "coral"; Class.forName(driver);

150

Connection con = DriverManager.getConnection(url, user, password); return con; } /* Gera Relatorio e visualiza-o */ public void geraRelatorio(String relatorio, String strQuery) throws JRException, Exception { Connection con = getConnection(); Statement stm = con.createStatement(); String query = strQuery; ResultSet rs = stm.executeQuery(query); /* implementação da interface JRDataSource para DataSource ResultSet */ JRResultSetDataSource jrRS = new JRResultSetDataSource(rs); /* HashMap de parametros utilizados no relatório. Sempre instanciados */ Map parameters = new HashMap(); // parameters.put("COLUNA", valor); /* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint */ InputStream stream = this.getClass().getResourceAsStream("/util/relatorios/" + relatorio); JasperPrint print = JasperFillManager.fillReport(stream, parameters, jrRS); /* Exporta para o formato PDF */ JasperExportManager.exportReportToPdf(print); /* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem a necessidade do .jrprint */ /* Visualiza o relatório em formato PDF */ JasperViewer.viewReport(print, false); } /** Returns an HQL query from the resource bundle. @param key the resource key @return String */ public static String getQuery(String key) { ResourceBundle bundle = getResourceBundle(); return bundle.getString(key); } /** Utility method to create a <code>Date</code> class from <code>dateString</code>. @param dateString @return Date @throws RuntimeException is dateString is invalid */ public static Date parseDate(String dateString) { try { if (dateString.equals("")) return null;

151

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); return sdf.parse(dateString); } catch (ParseException pe) { throw new RuntimeException("Not a valid date: " + dateString + ". Must be of dd-MM-yyyy format."); } } private static ResourceBundle getResourceBundle() { if (bundle == null) { bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE, Locale.ENGLISH, Thread.currentThread().getContextClassLoader()); } return bundle; } private static ResourceBundle bundle; public static final String RESOURCE_BUNDLE = "example_app"; /** * @param pessoaCadastro * @return */ public static Integer salvaDadosCantor(HashMap pessoaCadastro) { Pessoa pessoa = (Pessoa)pessoaCadastro.get("pessoa"); Endereco endereco = (Endereco)pessoaCadastro.get("endereco"); Cantor cantor = (Cantor)pessoaCadastro.get("cantor"); DAOPessoa daoPessoa = new DAOPessoa(); DAOCantor daoCantor = new DAOCantor(); DAOEndereco daoEndereco = new DAOEndereco(); try { Endereco enderecoSalvo = daoEndereco.saveEndereco(endereco); pessoa.setIdEndereco(enderecoSalvo.getIdEndereco()); Pessoa pessoaSalva = daoPessoa.savePessoa(pessoa); cantor.setIdPessoa(pessoa.getIdPessoa()); Cantor cantorSalvo = daoCantor.saveCantor(cantor); return cantorSalvo.getIdCantor(); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } public static void salvaIdioma(Idiomas idioma) { DAOIdiomas daoIdiomas = new DAOIdiomas(); try { daoIdiomas.saveIdiomas(idioma); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param request

152

*/ public static void montaComboBoxGrupo(HttpServletRequest request) { DAOGrupo daoGrupo = new DAOGrupo(); try { Collection gruposList = daoGrupo.findAllGrupos(); request.getSession().setAttribute("gruposList", gruposList); } catch (DAOException e) { e.printStackTrace(); } catch (HibernateException e) { e.printStackTrace(); } } public static void montaComboBoxPessoa(HttpServletRequest request) { DAOPessoa daoPessoa = new DAOPessoa(); try { Collection pessoasList = daoPessoa.findAllPessoas("cantor"); request.getSession().setAttribute("pessoasList", pessoasList); } catch (DAOException e) { e.printStackTrace(); } catch (HibernateException e) { e.printStackTrace(); } } //Atualiza ou insere um grupo no banco. public static Grupo salvaGrupo(Grupo grupo) { DAOGrupo daoGrupo = new DAOGrupo(); try { return daoGrupo.saveGrupo(grupo); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //Atualiza ou insere um professor no banco. public static Professor salvaProfessor(Professor professor) { DAOProfessor daoProfessor = new DAOProfessor(); try { return daoProfessor.saveProfessor(professor); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } static Cipher ecipher; static Cipher dcipher; public static String encrypt(String str) { try {

153

Key d = null; SecretKey key = KeyGenerator.getInstance("DES").generateKey(); ecipher = Cipher.getInstance("DES"); dcipher = Cipher.getInstance("DES"); ecipher.init(Cipher.ENCRYPT_MODE, key); dcipher.init(Cipher.DECRYPT_MODE, key); // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (Exception e) { e.printStackTrace(); } return null; } //public static String decrypt(String str) { public static String decrypt(String str) { try { SecretKey key = KeyGenerator.getInstance("DES").generateKey(); ecipher = Cipher.getInstance("DES"); dcipher = Cipher.getInstance("DES"); ecipher.init(Cipher.ENCRYPT_MODE, key); dcipher.init(Cipher.DECRYPT_MODE, key); // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8"); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param pessoaAtualizada */ public static void salvaPessoaEEndereco(HashMap pessoaAtualizada) { Pessoa pessoa = (Pessoa)pessoaAtualizada.get("pessoa");

154

Endereco endereco = (Endereco)pessoaAtualizada.get("endereco"); DAOPessoa daoPessoa = new DAOPessoa(); DAOEndereco daoEndereco = new DAOEndereco(); try { Endereco enderecoSalvo = daoEndereco.saveEndereco(endereco); pessoa.setIdEndereco(enderecoSalvo.getIdEndereco()); Pessoa pessoaSalva = daoPessoa.savePessoa(pessoa); } catch (DAOException e) { e.printStackTrace(); } } }

Arquivo Mensagens.properties: erro.campo_email=O campo Email é obrigatório.<br> erro.campo_senha=O campo Senha é obrigatório.<br> erro.campo_nome=O campo Nome é obrigatório.<br> erro.campo_descricao=O campo Descrição é obrigatório.<br> erro.email_invalido=Email mal formado.<br> erro.email_inexistente=Email inexistente.<br> erro.senha_incorreta=Senha incorreta.<br> Arquivo Hibernate.cfg.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost/coral</property> <property name="connection.username">root</property> <property name="connection.password">coral</property> <property name="connection.pool_size">10</property> <property name="show_sql">false</property> <property name="use_outer_join">true</property> <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> <mapping resource="coral/Pessoa.hbm.xml"/> <mapping resource="coral/Administrador.hbm.xml"/> <mapping resource="coral/Cantor.hbm.xml"/> <mapping resource="coral/Endereco.hbm.xml"/>

155

<mapping resource="coral/Grupo.hbm.xml"/> <mapping resource="coral/Idiomas.hbm.xml"/> <mapping resource="coral/Maestro.hbm.xml"/> <mapping resource="coral/Professor.hbm.xml"/> </session-factory> </hibernate-configuration> Arquivo Hibernate.properties: ################################### ### MySQL Database ################################### hibernate.connection.driver_class=org.gjt.mm.mysql.Driver hibernate.connection.url=jdbc:mysql://localhost/coral hibernate.connection.username=root hibernate.connection.password=coral hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect hibernate.show_sql=true ################################### ### Apache DBCP Connection Pool ################################### hibernate.dbcp.maxActive 100 hibernate.dbcp.whenExhaustedAction 1 hibernate.dbcp.maxWait 120000 hibernate.dbcp.maxIdle 10 ## prepared statement cache hibernate.dbcp.ps.maxActive 100 hibernate.dbcp.ps.whenExhaustedAction 1 hibernate.dbcp.ps.maxWait 120000 hibernate.dbcp.ps.maxIdle 100 Arquivo struts-config.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="cadastroParte1Action" type="cadastro.CadastroParte1ActionForm" /> <form-bean name="cadastroParte2Action" type="cadastro.CadastroParte2ActionForm" /> <form-bean name="cadastroParte3Action" type="cadastro.CadastroParte3ActionForm" /> <form-bean name="atualizaDadosAction" type="cadastro.AtualizaDadosActionForm" /> <form-bean name="alteraSenhaAction" type="cadastro.AlteraSenhaActionForm" />

156

<form-bean name="cadastraProfessorAction" type="cadastro.CadastraProfessorActionForm" /> <form-bean name="excluiCantorAction" type="cadastro.ExcluiCantorActionForm" /> <form-bean name="cadastraGrupoAction" type="cadastro.CadastraGrupoActionForm" /> <form-bean name="loginAction" type="login.LoginActionForm" /> <form-bean name="gerarRelatorioAction" type="ferramentas.GerarRelatorioActionForm" /> </form-beans> <global-forwards> <forward name="paginaErro" path="/paginaDeErro.jsp" redirect="true"/> </global-forwards> <action-mappings> <action path="/formCadastroParte1Action" forward="/cadastroParte1.jsp"/> <action path="/cadastroParte1Action" name="cadastroParte1Action" type="cadastro.CadastroParte1Action" scope="request" input="/cadastroParte1.jsp"> <forward name="parte2" path="/formCadastroParte2Action.do" /> </action> <action path="/formCadastroParte2Action" forward="/cadastroParte2.jsp"/> <action path="/cadastroParte2Action" name="cadastroParte2Action" type="cadastro.CadastroParte2Action" scope="request" input="/cadastroParte2.jsp"> <forward name="parte3" path="/cadastroParte3.jsp" /> </action> <action path="/formCadastroParte3Action" forward="/cadastroParte3.jsp"/> <action path="/cadastroParte3Action" name="cadastroParte3Action" type="cadastro.CadastroParte3Action" scope="request" input="/cadastroParte3.jsp"> <forward name="cadastroRealizado" path="/cadastroRealizado.jsp" /> <forward name="dadosAlterados" path="/dadosAlterados.jsp" /> </action> <action path="/atualizaDadosAction" name="atualizaDadosAction" type="cadastro.AtualizaDadosAction" scope="request" input="/atualizaDados.jsp"> <forward name="atualizaDados" path="/atualizaDados.jsp" /> <forward name="dadosAlterados" path="/dadosAlterados.jsp" /> </action> <action path="/formAlteraSenhaAction" forward="/alteraSenha.jsp"/> <action path="/alteraSenhaAction" name="alteraSenhaAction" type="cadastro.AlteraSenhaAction" scope="request" input="/alteraSenha.jsp"> <forward name="senhaAlterada" path="/senhaAlterada.jsp" /> </action>

157

<action path="/formCadastraProfessorAction" forward="/cadastraProfessor.jsp"/> <action path="/cadastraProfessorAction" name="cadastraProfessorAction" type="cadastro.CadastraProfessorAction" scope="request" input="/cadastraProfessor.jsp"> <forward name="professorCadastrado" path="/cadastroProfessorRealizado.jsp" /> </action> <action path="/excluiCantorAction" name="excluiCantorAction" type="cadastro.ExcluiCantorAction" scope="request" input="/excluiCantor.jsp"> <forward name="excluirCantor" path="/excluiCantor.jsp" /> <forward name="cantorExcluido" path="/cantorExcluido.jsp" /> </action> <action path="/formCadastraGrupoAction" forward="/cadastraGrupo.jsp"/> <action path="/cadastraGrupoAction" name="cadastraGrupoAction" type="cadastro.CadastraGrupoAction" scope="request" input="/cadastraGrupo.jsp"> <forward name="grupoCadastrado" path="/cadastroGrupoRealizado.jsp" /> </action> <action path="/formLoginAction" forward="/principal/login.jsp"/> <action path="/loginAction" name="loginAction" type="login.LoginAction" scope="request" input="/principal/login.jsp"> <forward name="paginaSudoeste" path="/principal/paginaSudoeste.jsp" /> <forward name="formLogin" path="/principal/login.jsp" /> </action> <action path="/formGerarRelatorioAction" forward="/gerarRelatorio.jsp"/> <action path="/gerarRelatorioAction" name="gerarRelatorioAction" type="ferramentas.GerarRelatorioAction" scope="request" input="/gerarRelatorio.jsp"> <forward name="relatorioGerado" path="/relatorioGerado.jsp" /> </action> </action-mappings> <message-resources parameter="Mensagens" /> </struts-config> Arquivo web.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

158

version="2.4"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>aplicacao</param-name> <param-value>coral</param-value> </init-param> </servlet> <!-- Define servlets that are included in the example application --> <taglib> <taglib-uri>/WEB-INF/struts/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts/struts-logic.tld</taglib-location> </taglib> <!-- JSPC servlet mappings start --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- JSPC servlet mappings end --> </web-app>

Arquivo estiloCoral.css: .rotuloCampo { font-family: Verdana, Arial, Helvetica, sans-serif; /*font-weight:bold;*/ font-size: 11px; text-align: right;

159

} .rotuloErro { font-family: Verdana, Arial, Helvetica, sans-serif; font-weight:bold; color:#FF0000; font-size: 13px; text-align: center; } .apresentacao { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; text-align: center; } /*------------------------Campos---------------------*/ .campo_select { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; text-align: left; vertical-align: bottom; SCROLLBAR-FACE-COLOR: #FFFFFF; SCROLLBAR-HIGHLIGHT-COLOR: #FFFFFF; SCROLLBAR-SHADOW-COLOR: #FFFFFF; SCROLLBAR-3DLIGHT-COLOR: #FFFFFF; SCROLLBAR-ARROW-COLOR: #FFFFFF; SCROLLBAR-TRACK-COLOR: #FFFFFF; SCROLLBAR-DARKSHADOW-COLOR: #FFFFFF; border: 1px solid #333333; width: 192px; color: #000000; z-index:-1; } .campo_select_maior { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; text-align: left; vertical-align: bottom; SCROLLBAR-FACE-COLOR: #FFFFFF; SCROLLBAR-HIGHLIGHT-COLOR: #FFFFFF; SCROLLBAR-SHADOW-COLOR: #FFFFFF; SCROLLBAR-3DLIGHT-COLOR: #FFFFFF; SCROLLBAR-ARROW-COLOR: #FFFFFF; SCROLLBAR-TRACK-COLOR: #FFFFFF; SCROLLBAR-DARKSHADOW-COLOR: #FFFFFF; border: 1px solid #333333;

160

width: 252px; color: #000000; z-index:-1; } .campoLogin { font-family: Verdana, Arial, Helvetica, sans-serif; width: 155px; font-size: 11px; border: 1px solid #666666; } .campoTextoPadrao { font-family: Verdana, Arial, Helvetica, sans-serif; width: 190px; font-size: 11px; border: 1px solid #666666; } .campoTextoGrande { font-family: Verdana, Arial, Helvetica, sans-serif; width: 340px; font-size: 11px; border: 1px solid #666666; } .mensagem_erro { font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-weight: bold; } .campoTextoPequeno { font-family: Verdana, Arial, Helvetica, sans-serif; width: 90px; font-size: 11px; border: 1px solid #666666; } .campoTextoNumero { font-family: Verdana, Arial, Helvetica, sans-serif; width: 50px; font-size: 11px; border: 1px solid #666666; } .campoData { font-family: Verdana, Arial, Helvetica, sans-serif; width: 68px; font-size: 11px; border: 1px solid #666666; }

161

.campoAreaDeTexto { font-family: Verdana, Arial, Helvetica, sans-serif; width: 385px; height:75px; font-size: 11px; border: 1px solid #666666; } /*------------------------scrollbar---------------------*/ .barraDeRolagem{position: absolute; top: 82px; left: 48px; height: 150px; width: 150px; z-index: 3; font-family: "Arial"; font-size: 0pt; line-height: 120%; background-color: rgb(255,255,255); overflow: hidden} body{ scrollbar-face-color: rgb(51, 62, 102); scrollbar-arrow-color: rgb(0, 0, 0); scrollbar-highlight-color: rgb(102, 51, 255); scrollbar-3dlight-color: rgb(102, 255, 102); scrollbar-shadow-color: rgb(102, 255, 102); scrollbar-darkshadow-color: rgb(255, 255, 204); scrollbar-track-color: rgb(22, 181, 54) } /*------------------------link---------------------*/ a:link{color: rgb(171,0,219); font-weight: normal; font-style: normal; text-decoration: underline} a:visited{color: rgb(51,51,102); font-weight: normal; font-style: italic; text-decoration: none}

162

a:hover{color: rgb(255,255,0); font-weight: bold; font-style: normal; text-decoration: none} Arquivo funcoesJavaScript.js: function verificaCampos(){ var email = document.formCadastro.email.value; var nome = document.formCadastro.nome.value; var senha = document.formCadastro.senha.value; if (email == "" || nome == "" || senha == "") { alert('Os campos com * (asterisco) são obrigatórios.'); return false; }else{ return true; } } function verificaCamposSenha(){ var senhaAntiga = document.formAlterarSenha.senhaAntiga.value; var senhaNova = document.formAlterarSenha.senhaNova.value; var senhaConfirmacao = document.formAlterarSenha.senhaConfirmacao.value; if (senhaAntiga == "" || senhaNova == "" || senhaConfirmacao == "") { alert('Todos os campos devem ser preenchidos.'); return false; }else if (senhaNova != senhaConfirmacao) { alert('A senha Nova difere da Confirmação.'); return false; }else{ return true; } } function mask_date(campo,event) { var kCode; if(navigator.appName.indexOf("Netscape")!= -1) kCode = event.which; else kCode = event.keyCode; var validControlKeys = new Array(0,8,16,20,36,47); var validNumericKeys = new Array(48,49,50,51,52,53,54,55,56,57);

163

var validKeys = validNumericKeys.concat(validControlKeys); if(campo.value.length >= 10) return false; if(campo.value.length == 2 && kCode != 47) campo.value = campo.value + '/'; if(campo.value.length == 5 && kCode != 47) campo.value = campo.value + '/'; for(i=0;i<validKeys.length;i++){ if(validKeys[i] == kCode) return true; } return false; } // Using in Dinamic Search function mask_numeric(campo,event) { var kCode; if(navigator.appName.indexOf("Netscape")!= -1) kCode = event.which; else kCode = event.keyCode; var validControlKeys = new Array(0,8,16,20,36,45); var validNumericKeys = new Array(44,45,46,48,49,50,51,52,53,54,55,56,57); var validKeys = validNumericKeys.concat(validControlKeys); if(campo.value.length > 0 && (kCode == 45)){ return false; } for(i=0;i<validKeys.length;i++){ if(validKeys[i] == kCode) return true; } return false; } function isNum( caractere ) { var strValidos = "0123456789" if ( strValidos.indexOf( caractere ) == -1 ) return false; return true; } function isValid(valor) { var LEFT = 37; var RIGHT = 39; var HOM = 36;

164

var END = 35; var DEL = 46; var INS = 45; var CAPS = 20; var SHIFT = 16; var BACKSPACE = 8; var TAB = 0; if ((valor == LEFT) || (valor == RIGHT) || (valor == HOM) || (valor == END) || (valor == DEL) || (valor == INS) || (valor == CAPS) || (valor == SHIFT) || (valor == BACKSPACE) || (valor == TAB)) return(true); return(false); } function limpa_campoNum(valor) { t = valor.length; novovalor=''; for(i=0; i<=t-1; i++) { if (isNum(valor.charAt(i))) { novovalor += valor.charAt(i); } } return(novovalor); } function mascara_data(campo, event) { var key; var tecla; if(navigator.appName.indexOf("Netscape")!= -1) tecla= event.which; else tecla= event.keyCode; key = String.fromCharCode(tecla); if ( (isNum(key)) || (isValid(tecla)) ) { data = limpa_campoNum(campo.value); t = data.length; if (t > 8) t = 8; novodata = ""; for(i=0; i<=t-1; i++) { if (i==2)

165

novodata+="/"; if (i==4) novodata+="/"; novodata+=data.charAt(i); } campo.value = novodata; return(true); } else { return(false); } } function mascara_numero(campo, event){ var key; var tecla; if(navigator.appName.indexOf("Netscape")!= -1) tecla= event.which; else tecla= event.keyCode; key = String.fromCharCode(tecla); if ( (isNum(key)) || (isValid(tecla)) ) { return(true); } else { return(false); } } Arquivo login.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT>

166

<HTML> <BODY bgcolor="#00CC00"> <% if (application.getAttribute("arrayPessoa")!= null){ request.getSession().setAttribute("arrayPessoa",application.getAttribute("arrayPessoa")); } %> <html:form action="/loginAction.do" method="post"> <table border="0" cellspacing="5"> <tr> <td><div align="right"><span class="rotuloCampo">Email:</span> </div></td> <td><html:text property="value(email)" alt="Digite seu email" styleClass="campoLogin" /></td> </tr> <tr> <!--html:hidden property="value(arrayPessoa)" value="2"/--> <p> <td><div align="right"><span class="rotuloCampo">Senha:</span> </div></td> <td><html:password property="value(senha)" alt="Digite seu email" styleClass="campoLogin" /></td> <p> </tr> <tr> <td></td> <td><html:submit value="Entrar"/></td> </tr> </table> <p align="center"><a TARGET="paginaSudeste.jsp" href="/coral/formCadastroParte1Action.do">Não sou cadastrado!</a></p> <p> </html:form> </BODY> </html> Arquivo paginaNordeste.jsp: <link href="../folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <HTML> <BODY bgcolor="#009966"> <center>

167

<h1><font color="#0000FF">Sistema de Apoio aos Grupos do Movimento Coral</font></h1> <p align="right"><a href="../sair.jsp" target="_parent">página inicial</a></p> </center> </BODY> </html> Arquivo paginaSudeste.jsp: <HTML> <BODY bgcolor="#009900"> <link href="../folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <center> <h1><strong>Bem vindo ao Movimento Coral</strong></h1> <span class="apresentacao"> O Movimento Coral Feevale foi criado em agosto de 2000 a partir de dois coros que já existiam em nosso estabelecimento e conta hoje com aproximadamente 120 cantores e cantoras distribuídos em cinco diferentes grupos corais: O Coro Universitário Feevale, o Coral Canto e Vida da 3ª Idade, o Grupo Vocal Feevale, o Coro Preparatório e o Coro Preparatório da 3ª idade. <p> Mais informações em <a href="" onClick="window.open('http://www.feevale.br/coral')">www.feevale.br/coral</a>. </span> </center> </BODY> </html> Arquivo paginaSudoeste.jsp: <%@page import="coral.Pessoa" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <HTML> <BODY bgcolor="#00CC00"> <br><br><br><br> <table width="100%" border="0" cellspacing="5"> <tr>

168

<td colspan="2"><hr color="#006633"></td> </tr> <tr> <td align="left">Cadastro</td> <td>&nbsp;</td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/atualizaDadosAction.do" target="paginaSudeste.jsp">Alterar Dados</a> </p></td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/formAlteraSenhaAction.do" target="paginaSudeste.jsp">Alterar Senha</a> </p></td> </tr> <% Pessoa pessoa = null; if (request.getSession().getAttribute("pessoaAutenticada") != null){ pessoa = (Pessoa)request.getSession().getAttribute("pessoaAutenticada"); String tipoPessoa = pessoa.getTipoPessoa(); if (tipoPessoa.equals("professor")){ %> <tr> <td colspan="2"><hr color="#006633"></td> </tr> <tr> <td align="left">Ferramentas</td> <td>&nbsp;</td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/formGerarRelatorioAction.do" target="paginaSudeste.jsp" >Gerar Relatório</a> </p></td> </tr> <tr> <td></td> <td></td> </tr> <%}else if (tipoPessoa.equals("administrador")){ %> <tr> <td colspan="2"><hr color="#006633"></td> </tr> <tr>

169

<td align="left">Ferramentas</td> <td></td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/formGerarRelatorioAction.do" target="paginaSudeste.jsp" >Gerar Relatório</a> </p></td> </tr> <tr> <td></td> <td></td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/formCadastraProfessorAction.do" target="paginaSudeste.jsp">Cadastrar Professor</a> </p></td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/formCadastraGrupoAction.do" target="paginaSudeste.jsp">Cadastrar Grupo</a> </p></td> </tr> <tr> <td colspan="2"><p align="right"> <a href="/coral/excluiCantorAction.do" target="paginaSudeste.jsp">Excluir Cantor</a> </p></td> </tr> <% } }%> <tr> <td colspan="2"><hr color="#006633"></td> </tr> <tr><td colspan="2">&nbsp;</td></tr> <tr><td colspan="2">&nbsp;</td></tr> <tr> <td colspan="2"><p align="center"> <a href="/coral/sair.jsp" target="_parent">Sair</a> </p></td> </tr> </table> </BODY> </html>

170

Arquivo alteraSenha.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/alteraSenhaAction.do" method="post"> <center> <h2><font color="#0000FF">Alteração de Senha</font> </h2> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <tr> <td><div align="right"><span class="rotuloCampo">Senha Antiga:</span></div></td> <td><html:password property="value(senhaAntiga)" styleClass="campoTextoPequeno"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Senha Nova:</span></div></td> <td><html:password property="value(senhaNova)" styleClass="campoTextoPequeno"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Confirmação:</span></div></td> <td><html:password property="value(senhaConfirmacao)" styleClass="campoTextoPequeno"/></td> </tr> <tr> <td></td> <td><center><html:submit value="Alterar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html>

171

Arquivo atualizaDados.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <%@page import="coral.Pessoa" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/atualizaDadosAction.do" method="post" onsubmit="atualizarDados"> <center> <h2><font color="#0000FF">Alteração de Dados</font> </h2> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <html:hidden property="value(atualizar)" value="true"/> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Nome Completo: </span> </div></td> <td colspan="3"><html:text property="value(nome)" styleClass="campoTextoGrande" /></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Data de Nascimento: </span> </div></td> <td><html:text property="value(dataNascimento)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" /></td> <td><div align="right"><span class="rotuloCampo">Naturalidade:</span> </div></td> <td><html:text property="value(naturalidade)" styleClass="campoTextoPadrao" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do RG:</span> </div></td> <td><html:text property="value(rg)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" /></td>

172

<td><div align="right"><span class="rotuloCampo">&Oacute;rg&atilde;o Expedidor: </span> </div></td> <td><html:text property="value(orgaoExpedidor)" styleClass="campoTextoPadrao" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado Civil: </span> </div></td> <td><html:text property="value(estadoCivil)" styleClass="campoTextoPequeno" /></td> <td><div align="right"><span class="rotuloCampo">Data de Emiss&atilde;o:</span> </div></td> <td><html:text property="value(dataEmissao)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do CPF:</span> </div></td> <td><html:text property="value(cpf)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" /></td> <td><div align="right"><span class="rotuloCampo">N&deg; do Passaporte:</span> </div></td> <td><html:text property="value(passaporte)" styleClass="campoTextoPequeno" /></td> <td colspan="5"></td> </tr> <tr> <td colspan="5"><span class="rotuloCampo">Endereço: </span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Rua:</span> </div></td> <td colspan="5"><html:text property="value(rua)" styleClass="campoTextoGrande" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Bairro: </span> </div></td> <td><html:text property="value(bairro)" styleClass="campoTextoPadrao" /></td> <td><div align="right"><span class="rotuloCampo">Número:</span> </div></td> <td><html:text property="value(numero)" styleClass="campoTextoNumero" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">CEP: </span> </div></td>

173

<td><html:text property="value(cep)" styleClass="campoTextoPequeno" /></td> <td ><div align="right"><span class="rotuloCampo">Cidade: </span> </div></td> <td><html:text property="value(cidade)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado: </span> </div></td> <td><html:text property="value(estado)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Telefones:</span></td> </tr> <tr> <td ><div align="right"><span class="rotuloCampo">Residencial: </span> </div></td> <td ><html:text property="value(telResidencial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Comercial:</span> </div></td> <td><html:text property="value(telComercial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Outros:</span> </div></td> <td><html:text property="value(telOutros)" styleClass="campoTextoPadrao" /></td> <td colspan="7"></td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr> </table> <% Pessoa pessoa = null; if (request.getSession().getAttribute("pessoaAutenticada") != null){ pessoa = (Pessoa)request.getSession().getAttribute("pessoaAutenticada"); String tipoPessoa = pessoa.getTipoPessoa(); if (tipoPessoa.equals("cantor")){ %> <br> <hr color="#006633"> <br>

174

<table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr><td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Naipe:</span></span> </div></td> <td><html:text property="value(naipe)" styleClass="campoTextoPadrao" /></td> <td width="100"><div align="right"><span class="rotuloCampo">Cantando no: </span> </div></td> <td width="144"><html:text property="value(cantandoNo)" styleClass="campoTextoPadrao" /></td> <td width="0" colspan="3"></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td><div align="right"><div align="right"><span class="rotuloCampo">Empresa ou Institui&ccedil;&atilde;o onde trabalha: </span></div></td> <td colspan="6"><html:text property="value(empresaQueTrabalha)" styleClass="campoTextoGrande" /></td> <td colspan="7"></td> </tr> <tr> <td colspan="2" width="335"><span class="rotuloCampo">Em caso de grava&ccedil;&otilde;es ou publica&ccedil;&otilde;es do Movimento Coral Feevale, como voc&ecirc; deseja que seu nome apare&ccedil;a?</span> </td> <td colspan="6"><html:text property="value(nomeArtistico)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se você utilizar automóvel ou motocicleta para vir aos ensaios ou outras atividades do Movimento Coral:</span>&nbsp;</td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; da Placa: </span></div></td> <td colspan="7"><html:text property="value(placaCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Modelo: </span></div></td>

175

<td colspan="7"><html:text property="value(modeloCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Cor:</span></div></td> <td colspan="7"><html:text property="value(corCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Grau de Instrução:</span></td> </tr> <tr> <td width="145"><html:radio property="value(grauInstrucao)" value="1" /> <span class="rotuloCampo">1&deg; Grau Incompleto</span> </td> <td><html:radio property="value(grauInstrucao)" value="2" /> <span class="rotuloCampo">1&deg; Grau Completo</span></td> <td width="120"><html:radio property="value(grauInstrucao)" value="3" /> <span class="rotuloCampo">2 &deg; Grau Incompleto</span> </td> <td width="110"><html:radio property="value(grauInstrucao)" value="4" /> <span class="rotuloCampo">2&deg; Grau Completo</span> </td> <td colspan="2"><html:radio property="value(grauInstrucao)" value="5" /> <span class="rotuloCampo">3&deg; Grau Incompleto</span> </td> </tr> <tr> <td><html:radio property="value(grauInstrucao)" value="6" /> <span class="rotuloCampo">3&deg; Grau Completo</span> </td> <td><html:radio property="value(grauInstrucao)" value="7" /> <span class="rotuloCampo"> Especializa&ccedil;&atilde;o</span></td> <td><html:radio property="value(grauInstrucao)" value="8" /> <span class="rotuloCampo">Mestrado</span></td> <td><html:radio property="value(grauInstrucao)" value="9" /> <span class="rotuloCampo">Doutorado</span></td> <td colspan="2"><html:radio property="value(grauInstrucao)" value="10" /> <span class="rotuloCampo">P&oacute;s-doutorado</span></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se voc&ecirc; &eacute; aluno da Feevale :</span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Curso: </span></div></td> <td><html:text property="value(cursoFeevale)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Semestre:</span></div></td>

176

<td><html:text property="value(semestreFeevale)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; de Matr&iacute;cula: </span></div></td> <td><html:text property="value(matricula)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se voc&ecirc; &eacute; estudante em outra Institui&ccedil;&atilde;o:</span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Curso:</span></div></td> <td><html:text property="value(cursoOutraInst)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Semestre:</span></div></td> <td><html:text property="value(semestreOutraInst)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Institui&ccedil;&atilde;o: </span></div></td> <td><html:text property="value(instituicao)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr> </table> <br> <hr color="#006633"> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Outros couros nos quais canta atualmente(coro, em que naipe, h&aacute; quanto tempo):</span> </td> </tr> <tr>

177

<td colspan="7"><html:textarea property="value(textCantaAtualmente)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Outros couros nos quais já cantou(coro, em que naipe, quando, h&aacute; quanto tempo):</span> </td> </tr> <tr> <td colspan="7"><html:textarea property="value(textJaCantou)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Estudos em m&uacute;sica e dom&iacute;nio de instrumentos musicais(o qu&ecirc;, quanto tempo):</span> </td> </tr> <tr> <td colspan="7"><html:textarea property="value(textInstrumentosMusicais)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Conhecimentos de idiomas estrangeiros( principalmente pron&uacute;ncia):</td> </tr> <tr> <td>1. <html:text property="value(idioma1)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma1Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma1Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma1Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma1Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>2. <html:text property="value(idioma2)" styleClass="campoTextoPadrao" /></td>

178

<td><html:radio property="value(idioma2Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma2Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma2Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma2Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>3. <html:text property="value(idioma3)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma3Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma3Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma3Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma3Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>4. <html:text property="value(idioma4)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma4Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma4Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma4Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma4Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>5. <html:text property="value(idioma5)" styleClass="campoTextoPadrao" /></td> <td width="135"><html:radio property="value(idioma5Radio)" value="1" /> Elementar</td> <td width="135"><html:radio property="value(idioma5Radio)" value="2" /> Razo&aacute;vel</td> <td width="135"><html:radio property="value(idioma5Radio)" value="3" /> Bom</td> <td width="135" colspan="2"><html:radio property="value(idioma5Radio)" value="4" /> Muito bom </td> </tr> <tr>

179

<td colspan="9">&nbsp;</td> </tr> </table> <% } }%> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr> <td colspan="9"><center><html:submit value="Atualizar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo cadastraGrupo.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/cadastraGrupoAction.do" method="post"> <center> <h2><font color="#0000FF">Cadastro de Grupo</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <tr> <td><div align="right"><span class="rotuloCampo">Nome:</span></div></td> <td><html:text property="value(nome)" styleClass="campoTextoPadrao"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Descrição:</span></div></td> <td><html:textarea property="value(descricao)" styleClass="campoAreaDeTexto"/></td>

180

</tr> <tr> <td></td> <td><center><html:submit value="Cadastrar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo cadastraProfessor.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/cadastraProfessorAction.do" method="post"> <center> <h2><font color="#0000FF">Cadastro de Professor</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <tr> <td><div align="right"><span class="rotuloCampo">Email:</span></div></td> <td><html:text property="value(email)" styleClass="campoTextoPadrao"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Senha:</span></div></td> <td><html:password property="value(senha)" styleClass="campoTextoPadrao"/></td> </tr> <tr> <td></td> <td><center><html:submit value="Cadastrar"/></center></td> </tr> </table> </center>

181

</html:form> </BODY> </html:html> Arquivo cadastroGrupoRealizado.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <%@page import="cadastro.*" %> <%@page import="java.util.HashMap" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Cadastro Realizado</title> </head> <BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Cadastro de Grupo Realizado com Sucesso.</font> </h2> <BR> </body> </html> Arquivo cadastroParte1.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/cadastroParte1Action.do" method="post"> <center> <h2><font color="#0000FF">Cadastro de Aluno. Passo 1/3</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br>

182

<table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <tr> <td><div align="right"><span class="rotuloCampo"><!--font color="#FF0000">*</font-->Email:</span> </div></td> <td><html:text property="value(email)" alt="Digite seu email" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Senha:</span> </div></td> <td><html:password property="value(senha)" alt="Digite sua senha" styleClass="campoTextoPadrao" /></td> </tr> </table> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Nome Completo: </span> </div></td> <td colspan="3"><html:text property="value(nome)" styleClass="campoTextoGrande" /></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Data de Nascimento: </span> </div></td> <td><html:text property="value(dataNascimento)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" /></td> <td><div align="right"><span class="rotuloCampo">Naturalidade:</span> </div></td> <td><html:text property="value(naturalidade)" styleClass="campoTextoPadrao" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do RG:</span> </div></td> <td><html:text property="value(rg)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" /></td> <td><div align="right"><span class="rotuloCampo">&Oacute;rg&atilde;o Expedidor: </span> </div></td>

183

<td><html:text property="value(orgaoExpedidor)" styleClass="campoTextoPadrao" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado Civil: </span> </div></td> <td><html:text property="value(estadoCivil)" styleClass="campoTextoPequeno" /></td> <td><div align="right"><span class="rotuloCampo">Data de Emiss&atilde;o:</span> </div></td> <td><html:text property="value(dataEmissao)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" /></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do CPF:</span> </div></td> <td><html:text property="value(cpf)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" /></td> <td><div align="right"><span class="rotuloCampo">N&deg; do Passaporte:</span> </div></td> <td><html:text property="value(passaporte)" styleClass="campoTextoPequeno" /></td> <td colspan="5"></td> </tr> <tr> <td colspan="5"><span class="rotuloCampo">Endereço: </span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Rua:</span> </div></td> <td colspan="5"><html:text property="value(rua)" styleClass="campoTextoGrande" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Bairro: </span> </div></td> <td><html:text property="value(bairro)" styleClass="campoTextoPadrao" /></td> <td><div align="right"><span class="rotuloCampo">Número:</span> </div></td> <td><html:text property="value(numero)" styleClass="campoTextoNumero" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">CEP: </span> </div></td> <td><html:text property="value(cep)" styleClass="campoTextoPequeno" /></td> <td ><div align="right"><span class="rotuloCampo">Cidade: </span> </div></td>

184

<td><html:text property="value(cidade)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado: </span> </div></td> <td><html:text property="value(estado)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Telefones:</span></td> </tr> <tr> <td ><div align="right"><span class="rotuloCampo">Residencial: </span> </div></td> <td ><html:text property="value(telResidencial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Comercial:</span> </div></td> <td><html:text property="value(telComercial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Outros:</span> </div></td> <td><html:text property="value(telOutros)" styleClass="campoTextoPadrao" /></td> <td colspan="7"></td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr> <tr> <td colspan="9"><center><html:submit value="Enviar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo cadastroParte2.jsp:

185

<%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/cadastroParte2Action.do" method="post"> <center> <h2><font color="#0000FF">Cadastro de Aluno. Passo 2/3</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr><td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Naipe:</span></span> </div></td> <td><html:text property="value(naipe)" styleClass="campoTextoPadrao" /></td> <td width="100"><div align="right"><span class="rotuloCampo">Cantando no: </span> </div></td> <td width="144"><html:text property="value(cantandoNo)" styleClass="campoTextoPadrao" /></td> <td width="0" colspan="3"></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td><div align="right"><div align="right"><span class="rotuloCampo">Empresa ou Institui&ccedil;&atilde;o onde trabalha: </span></div></td> <td colspan="6"><html:text property="value(empresaQueTrabalha)" styleClass="campoTextoGrande" /></td> <td colspan="7"></td> </tr> <tr> <td colspan="2" width="335"><span class="rotuloCampo">Em caso de grava&ccedil;&otilde;es ou publica&ccedil;&otilde;es do Movimento Coral Feevale, como voc&ecirc; deseja que seu nome apare&ccedil;a?</span> </td>

186

<td colspan="6"><html:text property="value(nomeArtistico)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se você utilizar automóvel ou motocicleta para vir aos ensaios ou outras atividades do Movimento Coral:</span>&nbsp;</td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; da Placa: </span></div></td> <td colspan="7"><html:text property="value(placaCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Modelo: </span></div></td> <td colspan="7"><html:text property="value(modeloCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Cor:</span></div></td> <td colspan="7"><html:text property="value(corCarro)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Grau de Instrução:</span></td> </tr> <tr> <td width="145"><html:radio property="value(grauInstrucao)" value="1" /> <span class="rotuloCampo">1&deg; Grau Incompleto</span> </td> <td><html:radio property="value(grauInstrucao)" value="2" /> <span class="rotuloCampo">1&deg; Grau Completo</span></td> <td width="120"><html:radio property="value(grauInstrucao)" value="3" /> <span class="rotuloCampo">2 &deg; Grau Incompleto</span> </td> <td width="110"><html:radio property="value(grauInstrucao)" value="4" /> <span class="rotuloCampo">2&deg; Grau Completo</span> </td> <td colspan="2"><html:radio property="value(grauInstrucao)" value="5" /> <span class="rotuloCampo">3&deg; Grau Incompleto</span> </td> </tr> <tr> <td><html:radio property="value(grauInstrucao)" value="6" /> <span class="rotuloCampo">3&deg; Grau Completo</span> </td> <td><html:radio property="value(grauInstrucao)" value="7" /> <span class="rotuloCampo"> Especializa&ccedil;&atilde;o</span></td> <td><html:radio property="value(grauInstrucao)" value="8" /> <span class="rotuloCampo">Mestrado</span></td> <td><html:radio property="value(grauInstrucao)" value="9" />

187

<span class="rotuloCampo">Doutorado</span></td> <td colspan="2"><html:radio property="value(grauInstrucao)" value="10" /> <span class="rotuloCampo">P&oacute;s-doutorado</span></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se voc&ecirc; &eacute; aluno da Feevale :</span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Curso: </span></div></td> <td><html:text property="value(cursoFeevale)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Semestre:</span></div></td> <td><html:text property="value(semestreFeevale)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; de Matr&iacute;cula: </span></div></td> <td><html:text property="value(matricula)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Se voc&ecirc; &eacute; estudante em outra Institui&ccedil;&atilde;o:</span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Curso:</span></div></td> <td><html:text property="value(cursoOutraInst)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Semestre:</span></div></td> <td><html:text property="value(semestreOutraInst)" styleClass="campoTextoPequeno" /></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Institui&ccedil;&atilde;o: </span></div></td> <td><html:text property="value(instituicao)" styleClass="campoTextoPadrao" /></td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr>

188

<tr> <td colspan="9"><center><html:submit value="Enviar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo cadastroParte3.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/cadastroParte3Action.do" method="post"> <center> <h2><font color="#0000FF">Cadastro de Aluno. Passo 3/3</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr> <td><span class="rotuloCampo">Grupo em que irá entrar: </span></td> <td colspan="3" align="left"> <html:select property="value(idGrupo)" styleClass="campo_select"> <html:options collection="gruposList" property="idGrupo" labelProperty="nome" /> </html:select> </td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr>

189

<tr> <td colspan="7"><span class="rotuloCampo">Outros couros nos quais canta atualmente(coro, em que naipe, h&aacute; quanto tempo):</span> </td> </tr> <tr> <td colspan="7"><html:textarea property="value(textCantaAtualmente)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Outros couros nos quais já cantou(coro, em que naipe, quando, h&aacute; quanto tempo):</span> </td> </tr> <tr> <td colspan="7"><html:textarea property="value(textJaCantou)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Estudos em m&uacute;sica e dom&iacute;nio de instrumentos musicais(o qu&ecirc;, quanto tempo):</span> </td> </tr> <tr> <td colspan="7"><html:textarea property="value(textInstrumentosMusicais)" styleClass="campoAreaDeTexto" /></td> </tr> <tr> <td colspan="7">&nbsp;</td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Conhecimentos de idiomas estrangeiros( principalmente pron&uacute;ncia):</td> </tr> <tr> <td>1. <html:text property="value(idioma1)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma1Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma1Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma1Radio)" value="3" /> Bom</td>

190

<td colspan="2"><html:radio property="value(idioma1Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>2. <html:text property="value(idioma2)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma2Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma2Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma2Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma2Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>3. <html:text property="value(idioma3)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma3Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma3Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma3Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma3Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>4. <html:text property="value(idioma4)" styleClass="campoTextoPadrao" /></td> <td><html:radio property="value(idioma4Radio)" value="1" /> Elementar</td> <td><html:radio property="value(idioma4Radio)" value="2" /> Razo&aacute;vel</td> <td><html:radio property="value(idioma4Radio)" value="3" /> Bom</td> <td colspan="2"><html:radio property="value(idioma4Radio)" value="4" /> Muito bom </td> </tr> <tr> <td>5. <html:text property="value(idioma5)" styleClass="campoTextoPadrao" /></td>

191

<td width="115"><html:radio property="value(idioma5Radio)" value="1" /> Elementar</td> <td width="115"><html:radio property="value(idioma5Radio)" value="2" /> Razo&aacute;vel</td> <td width="115"><html:radio property="value(idioma5Radio)" value="3" /> Bom</td> <td width="115" colspan="2"><html:radio property="value(idioma5Radio)" value="4" /> Muito bom </td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr> <tr> <td colspan="9"><center><html:submit value="Enviar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo cadastroProfessorRealizado.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <%@page import="cadastro.*" %> <%@page import="java.util.HashMap" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Cadastro Realizado</title> </head> <BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Cadastro de Professor Realizado com Sucesso.</font> </h2> <BR> </body>

192

</html> Arquivo cadastroRealizado.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <%@page import="cadastro.*" %> <%@page import="java.util.HashMap" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Cadastro Realizado</title> </head> <BODY bgcolor='#00CC00'> <%if (request.getSession().getAttribute("pessoaCadastro") != null){ %> <BR> <h2 align="center"><font color="#0000FF">Cadastro Realizado com Sucesso.</font> </h2> <BR> <!--h2 align="center"><font color="#0000FF">Um email foi enviado a você para confirmação do Cadastro.</font> </h2--> <%} else {%> <jsp:forward page="paginaDeErro.jsp" /> <%}%> </body> </html> Arquivo cantorExcluido.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Dados Alterados</title> </head>

193

<BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Cantor Excluido com Sucesso.</font> </h2> </body> </html> Arquivo dadosAlterados.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Dados Alterados</title> </head> <BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Dados Alterados com Sucesso.</font> </h2> </body> </html> Arquivo excluiCantor.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/excluiCantorAction.do" method="post"> <center>

194

<h2><font color="#0000FF">Exclusão de Cantor</font> </h2> <br> <span class="rotuloErro"> <html:errors/></span> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <html:hidden property="value(auxiliarHidden)" value="" styleId="auxiliarHidden"/> <tr> <td><span class="rotuloCampo">Escolha o Cantor que deseja excluir: </span></td> <td colspan="3" align="left"> <html:select property="value(idPessoa)" styleClass="campo_select"> <html:options collection="pessoasList" property="idPessoa" labelProperty="email" /> </html:select> </td> <td><html:button property="value(botaoVisualizar)" value="Visualizar" onclick="executeVisualizar()"/></td> </tr> <tr> <td></td> <td><center><html:button property="value(botaoExcluir)" value="Excluir" onclick="executeExcluir()"/></center></td> </tr> </table> <BR> <% if (request.getSession().getAttribute("estado") != null){ request.getSession().removeAttribute("estado"); %> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Email: </span> </div></td> <td colspan="3"><html:text property="value(email)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Nome Artístico: </span> </div></td>

195

<td colspan="3"><html:text property="value(nomeArtistico)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Grupo: </span> </div></td> <td colspan="3"><html:text property="value(grupo)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="7"></td> </tr> </table> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0"> <tr> <td><div align="right"><span class="rotuloCampo"><span class="rotuloCampo">Nome Completo: </span> </div></td> <td colspan="3"><html:text property="value(nome)" styleClass="campoTextoGrande" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Data de Nascimento: </span> </div></td> <td><html:text property="value(dataNascimento)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" readonly="true"/></td> <td><div align="right"><span class="rotuloCampo">Naturalidade:</span> </div></td> <td><html:text property="value(naturalidade)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do RG:</span> </div></td> <td><html:text property="value(rg)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" readonly="true"/></td> <td><div align="right"><span class="rotuloCampo">&Oacute;rg&atilde;o Expedidor: </span> </div></td> <td><html:text property="value(orgaoExpedidor)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="5"></td>

196

</tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado Civil: </span> </div></td> <td><html:text property="value(estadoCivil)" styleClass="campoTextoPequeno" readonly="true"/></td> <td><div align="right"><span class="rotuloCampo">Data de Emiss&atilde;o:</span> </div></td> <td><html:text property="value(dataEmissao)" styleClass="campoTextoPequeno" onchange="return mascara_data(this,event)" onkeypress="return mascara_data(this,event)" readonly="true"/></td> <td colspan="5"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">N&deg; do CPF:</span> </div></td> <td><html:text property="value(cpf)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" readonly="true"/></td> <td><div align="right"><span class="rotuloCampo">N&deg; do Passaporte:</span> </div></td> <td><html:text property="value(passaporte)" styleClass="campoTextoPequeno" readonly="true"/></td> <td colspan="5"></td> </tr> <tr> <td colspan="5"><span class="rotuloCampo">Endereço: </span></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Rua:</span> </div></td> <td colspan="5"><html:text property="value(rua)" styleClass="campoTextoGrande" readonly="true"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Bairro: </span> </div></td> <td><html:text property="value(bairro)" styleClass="campoTextoPadrao" readonly="true"/></td> <td><div align="right"><span class="rotuloCampo">Número:</span> </div></td> <td><html:text property="value(numero)" styleClass="campoTextoNumero" readonly="true"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">CEP: </span> </div></td> <td><html:text property="value(cep)" styleClass="campoTextoPequeno" readonly="true"/></td>

197

<td ><div align="right"><span class="rotuloCampo">Cidade: </span> </div></td> <td><html:text property="value(cidade)" styleClass="campoTextoPadrao" readonly="true"/></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Estado: </span> </div></td> <td><html:text property="value(estado)" styleClass="campoTextoPadrao" readonly="true"/></td> </tr> <tr> <td colspan="7"><span class="rotuloCampo">Telefones:</span></td> </tr> <tr> <td ><div align="right"><span class="rotuloCampo">Residencial: </span> </div></td> <td ><html:text property="value(telResidencial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Comercial:</span> </div></td> <td><html:text property="value(telComercial)" styleClass="campoTextoPequeno" onchange="return mascara_numero(this,event)" onkeypress="return mascara_numero(this,event)" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td><div align="right"><span class="rotuloCampo">Outros:</span> </div></td> <td><html:text property="value(telOutros)" styleClass="campoTextoPadrao" readonly="true"/></td> <td colspan="7"></td> </tr> <tr> <td colspan="9">&nbsp;</td> </tr> </table> <%}%> <SCRIPT> function executeVisualizar(){ document.forms[0].auxiliarHidden.value = "visualizar"; document.forms[0].submit(); } function executeExcluir(){ document.forms[0].auxiliarHidden.value = "excluir";

198

if (confirm("Você realmente deseja excluir esse aluno?")){ document.forms[0].submit(); } } </SCRIPT> </center> </html:form> </BODY> </html:html> Arquivo gerarRelatorio.jsp: <%@ taglib uri="/WEB-INF/struts_tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts_tld/struts-logic.tld" prefix="logic" %> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <SCRIPT language="JavaScript" type="text/javascript" src="javascript/funcoesJavaScript.js"></SCRIPT> <html:html> <BODY bgcolor='#00CC00'> <html:form action="/gerarRelatorioAction.do" method="post"> <center> <h2><font color="#0000FF">Geração de Relatório</font> </h2> <br> <table bgcolor="#009900" border="1" bordercolor="#009966" cellpadding="0" cellspacing="0" > <tr> <td><span class="rotuloCampo">Gerar Relatório por: </span></td> <td colspan="3" align="left"></td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3"> <html:radio property="value(relatorio)" value="1" /> <span class="rotuloCampo">nome, email e Data de Inclusão</span> </td> </tr> <tr> <td colspan="3"> <html:radio property="value(relatorio)" value="2" />

199

<span class="rotuloCampo">nome, curso, matricula e Data de Inclusão</span> </td> </tr> <tr> <td colspan="3"> <html:radio property="value(relatorio)" value="3" /> <span class="rotuloCampo">nome, grupo, nome artístico e Data de Inclusão</span> </td> </tr> <tr> <td colspan="3"> <html:radio property="value(relatorio)" value="4" /> <span class="rotuloCampo">nome, naipe, cantando_no e Data de Inclusão</span> </td> </tr> <tr> <td colspan="3"> <html:radio property="value(relatorio)" value="5" /> <span class="rotuloCampo">nome, email, naturalidade, rg e Data de Inclusão</span> </td> </tr> <%--html:select property="value(id)" styleClass="campo_select_maior"> <html:options collection="relatoriosList" property="id" labelProperty="nome" /> </html:select--%> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3"><center><html:submit value="Gerar"/></center></td> </tr> </table> </center> </html:form> </BODY> </html:html> Arquivo index.jsp:

200

<HTML> <HEAD> <TITLE>Página Inicial</TITLE> </HEAD> <FRAMESET COLS="20%,80%"> <FRAME NAME="paginaSudoeste.jsp" SCROLLING="No" SRC="formLoginAction.do" NORESIZE> <FRAMESET ROWS="15%,85%"> <FRAME NAME="paginaNordeste.jsp" SCROLLING="No" SRC="principal/paginaNordeste.jsp" NORESIZE> <FRAME NAME="paginaSudeste.jsp" SRC="principal/paginaSudeste.jsp" NORESIZE> </FRAMESET> </FRAMESET> <NOFRAMES> <BODY> <P> </BODY></NOFRAMES></HTML> Arquivo paginaDeErro.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <link href="folhaEstilo/estiloCoral.css" rel="stylesheet" type="text/css"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Erro</title> </head> <body bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Você não tem permissão para acessar essa página.</font> </h2> <BR> <p align="center"><a href="index.jsp" target="_parent">página inicial</a></p> </body> </html> Arquivo relatorioGerado.jsp:

201

<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Dados Alterados</title> </head> <BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Relatório Gerado com Sucesso.</font> </h2> </body> </html> Arquivo sair.jsp: <% request.getSession().removeAttribute("pessoaAutenticada");%> <jsp:forward page="/index.jsp"/> Arquivo senhaAlterada.jsp: <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Dados Alterados</title> </head> <BODY bgcolor='#00CC00'> <BR> <h2 align="center"><font color="#0000FF">Senha Alterada com Sucesso.</font> </h2> </body>

202

</html>