Skip to end of metadata
Go to start of metadata

 

Modelagem de Dados

Nesta sessão temos artigos que apresentam um dos mais importantes e poderosos recursos do CronApp IDE. Trata-se de uma completa ferramenta de geração de código de back-end e front-end para ser um facilitador para a criação da sua aplicação, realizando todos os processos iniciais e genéricos de uma aplicação com uso de banco de dados. Nessa ferramenta o usuário poderá definir e desenhar o domínio da sua aplicação e, com isso, após a definição de todas as entidades que serão necessárias para a construção da mesma, o usuário poderá criar uma aplicação usual com uso de recursos de banco de dados e telas de cadastro. Sendo necessário, praticamente, para a utilização da aplicação já em produção, apenas a inserção de links e alguns ajustes visuais a sua aplicação. Deste modo, o ganho em produtividade para se criar uma aplicação do zero é muito grande, não sendo necessário ao usuário codificar grande quantidade de códigos HTML, Java e JavaScript, visto que o mesmo será gerado pelo CronApp IDE.

Criando um projeto a partir do modelo(Criando Projeto Web) será carregado um projeto já estruturado a partir de um modelo. No exemplo criamos um novo projeto com o nome "example".


O projeto gerado pela IDE  cria um diagrama para base de desenvolvimento com o seguinte nome: app.umlcd. Esse diagrama contém as entidades User, Role e UserRole, essas classes já são criadas pela autenticação básica do CronApp.Para criar novas classes, é necessário arrastar uma "Class" da área de controles (lado direito do CronApp IDE) para a área central do editor do diagrama. Observe a imagem abaixo:

Adicionando novas classes
Figura 1 -  Adicionando novas classes

Para nosso exemplo, além da estrutura de usuário e regras, vamos utilizar as classes Livro e Autor. Em que um autor pode possuir vários livros,vamos especificar os atributos de cada entidade posteriormente.

 Após a inserção das entidades(dependendo do seu modelo) no diagrama, clique sobre uma delas para seleciona-la. A seguir, no painel do lado direito do CronApp IDE você deverá abrir a seção propriedades e eventos > control. Será exibido as propriedades da entidade e eventos(figura 2). Nesse painel clique em Fields, será aberto outro painel com as atributos da classe (figura 3), aqui você vai definir o modelo da sua classe e suas especificações. Outra forma de acessar as propriedades das classes seria clicar duas vezes na classe desejada.


Figura 2 -  Eventos e propriedades



Figura 3 -  Atributos da classe

Manipulador de Classes


Essa janela contém as seguintes abas: Attributes e Queries. A aba Attributes possibilita a configuração dos atributos da entidade. A aba Queries possibilita a configuração de “Named Queries” da entidade, que são consultas definidas para a busca de registros no banco de dados. Essas consultas devem ser realizadas na linguagem “JPQL” que é uma derivação da linguagem “SQL” própria para o uso de frameworks JPA de persistência e mapeamento de banco de dados em processo da orientação a objetos.

Atributos

Na aba Attributes temos as seguintes colunas e suas respectivas funções:


Na primeira coluna é possível selecionar qualquer um dos atributos. Assim, selecione os atributos deseja remover nessa coluna. Para essa ação selecione o atributo na coluna e clique no botão Remover. Caso o atributo selecionado para remoção tenha uma Consulta associada a ele, será exibida uma mensagem com esta informação, e perguntando se deseja remover as Consultas associadas juntamente a remoção do atributo. 


Atributos: Atributo da classe Java. Nome que será definido o atributo da classe Java a ser gerada.

 

DB Column: Campo do banco de dados. Nome da coluna do banco de dados que será configurada para persistência do registro da entidade que está sendo configurada.

 

Length: Tamanho do campo no banco de dados. Funciona de acordo com o tipo do campo adotado. No caso de campo “caracter” ou de campo “inteiro” é aceita uma entrada de um valor inteiro que corresponde a quantos caracteres ou algarismos que serão aceitos pelo banco. Ao selecionar o tipo do campo como um número fracionado a coluna Length não terá utilidade sobre esse campo, sendo exibidas duas novas colunas “Precision” e “Scale” que configurarão o tamanho do campo de tipo fracionado.

 

Precisão: Quantidade total de algarismos aceitos em um campo do tipo numérico fracionado, contando a parte inteira e a parte fracionada.

 

Escala: Quantidade de algarismos que será configurada para a parte fracionada no número.

 

As colunas Precisão e Escala somente são exibidas se o tipo do atributo escolhido na coluna Tipo for correspondente a um tipo numérico fracionado. Ex. DoubleLong etc.

 

Expressão para valor padrão: Expressão de código Java. Será o valor padrão do atributo que será conferido, caso o mesmo venha com o valor nulo. Esse valor padrão deve estar de acordo com o tipo de campo definido.

 

Rótulo: Rótulo do front-end. Valor que será o rótulo do campo quando for gerada as páginas da aplicação através do Wizard Crud View.

 

Mascara: Máscara do campo. O campo (na página gerada através do Wizard Crud View) será configurado para ter a entrada rotulada com a expressão de máscara definida. Essa máscara só será definida na página gerada, não estando configurada na tabela gerada do banco de dados.

 

Tipo: Configura o tipo de dado do atributo, podendo ser qualquer um do tipo Java listados, inclusive sendo listado os tipos das classes que estão desenhadas no diagrama, e que ainda não foram geradas. Ao selecionar um tipo que corresponda a um tipo numérico fracionado, serão habilitadas as colunas “Precision” e “Scale” que correspondem a configuração do tamanho desse campo substituindo a coluna “Length”. O tipo selecionado deve estar de acordo com o framework de persistência que será selecionado. Ex: framework Hibernaute não aceita tipos de dados primários.

 

ChavePrimary Key. Seleciona o atributo como chave primária da tabela que será criada no banco de dados. Ao selecionar um atributo como chave primária será habilitada a coluna PK Type.

 

Único: Seleciona o atributo como valor único na tabela que será criada no banco de dados.

 

Não Nulo: Seleciona o atributo como não nulo na tabela que será criada no banco de dados.

 

Ignorar: Não utiliza o atributo no serviço REST.

 

Tipo de PK: Tipo do campo da chave primária. Contém opções de tratamento da chave primária. Podem ser selecionados os valores UUID, que por tratamento no código java terá como valor padrão (Default Value Expression) um conjunto de caracteres no padrão de Universally Unique Identifier (UUID). Identity configurará diretamente no banco o campo de chave primária como um campo numérico auto incremental, lembrando que sendo escolhida essa opção será necessário que o valor selecionado na coluna Type seja do tipo numérico. E, finalmente temos também a opção None, que não configura nenhum tratamento especial para o campo de chave primária.

 

MultiEmpresa Ctx: Atributo que define o o usuário para projetos do tipo  Multi Inquilino.


Transitório : Atributo será modificado constantemente durante a aplicação.


Pode Inserir: Seleciona que o atributo pode ser inserido


Pode Atualizar: Seleciona o atributo como editável.


Criptografar: Seleciona que o atributo será criptografado. 


Pesquisável: Define que o atributo pode ser pesquisado na aplicação(filtro).

 

Se não houver nenhum atributo configurado na entidade, ao clicar no botão “Novo”, será inserido um novo atributo a entidade que está sendo configurada. No caso do primeiro atributo inserido, por padrão, esse atributo virá configurado como o atributo “id”, chave primária da entidade que está sendo configurada, com as configurações correspondente a isso, com o tipo sendo configurado como String e o tipo de chave primária como UUID.

 

Os atributos adicionados posteriormente ao primeiro atributo virão pré-configurados como “attribute + número sequencial” e com tipo String.

 

Consultas

 

A aba Consultas exibe as Consultas criadas para essa entidade, nessa aba temos as seguintes colunas e suas respectivas funções:

 

 

Coluna de seleção de consultas: Esta coluna tem um comportamento similar ao da aba Atributos necessária a seleção dessas para realizar a remoção da mesma.

 

Rest?: Se selecionada essa opção, ao se gerar a camada de persistência essa Named Query será gerada na camada Rest da aplicação.

 

Nome: Nome (Identificação) da Named Query.

 

Consulta: Consulta em linguagem JPQL que efetivamente selecionará os devidos registros da entidade.

 

Params: Parâmetros utilizados na consulta JPQL (se houver) sendo exibido a identificação do parâmetro e o tipo correspondente.

 

Ao clicar no botão Novo será aberta uma janela para configuração da Consulta a ser inserida.

 

No topo dessa janela temos um campo para inserção do nome da Consulta . Na área central há uma entrada para inserção da consulta em linguagem JPQL, conforme se digita a consulta e se insere parâmetros com a seguinte identificação: (: + parâmetro, ou seja, se usa o sinal gráfico dois pontos mais um nome para identificar um determinado parâmetro), o mesmo é listado na parte inferior da janela de edição da Consulta , na qual será possível alterar o tipo do campo, de acordo com tipo de dado recebido e utilizado na consulta.

 

Clique em Ok para que a Consulta  seja inserida, para remove-la selecione a Consulta  na primeira coluna da janela e clique no botão Remover.

 

Para que as alterações e toda a edição de atributos e Consultas façam efeito, finalize o processo clicando no botão Salvar

Exemplo

 

Crie duas classes, e arraste para o diagrama.

 

Altere a propriedade “Class Name” da primeira entidade selecionada para “Livro”, em seguida analogamente altere a outra classe para "Autor"

Para realizar a reprodução do domínio da aplicação presente no diagrama “app.umlcd”. configure as entidades com os seguintes atributos e Consultas geradas através dos seguintes atributos:

Na classe Autor :

Clique em novo, e a IDE iré gerar a chave primária(PK) dessa entidade, dessa forma:

Atributo: id -> Coluna Do Banco: id,

                          Expressão para valor padrão: UUID.randomUUID().toString().toUpperCase() ,

                          Rótulo: Id,

                          Type: java.lang.String,

                          Chave Primário: selecionado,

                          Não Nulo: selecionado,

                          Tipo de PK: UUID.

                          Pode Inserir: selecionado,

                          Pode Atualizar: selecionado,

 

Restante das colunas com valores nulos ou “desselecionados”

 

Atributo: email -> Coluna Do Banco: email,

                          Tamanho : 500,

                          Rótulo: Email,

                          Type: java.lang.String,

                          Não Nulo: selecionado,

                          Único: selecionado

                          Pode Inserir: selecionado,

                          Pode Atualizar: selecionado,

                          Pesquisável: selecionando,

Restante das colunas com valores nulos ou “desselecionados”.

 

Veja que na aba consultas, já foram criadas duas consultas: Uma devido a criação da classe, gerando uma consulta para retornar a entidade e outra devido ao atributo email ser "pesquisável".

Veja na figura abaixo como fica a configuração da classe autor:

 

 

Na classe Livro :

 

Clique em novo, e a IDE iré gerar a chave primária(PK) dessa entidade, dessa forma:

Atributo: id -> Coluna Do Banco: id,

 

                          Expressão para valor padrão: UUID.randomUUID().toString().toUpperCase() ,

                          Rótulo: Id,

                          Type: java.lang.String,

                          Chave Primário: selecionado,

                          Não Nulo: selecionado,

                          Tipo de PK: UUID.

                          Pode Inserir: selecionado,

                          Pode Atualizar: selecionado,

 

Restante das colunas com valores nulos ou “desselecionados”

 

Atributo: Titulo -> Coluna Do Banco: titulo,

                          Tamanho : 500,

                          Rótulo: titulo,

                          Type: java.lang.String,

                          Não Nulo: selecionado,

                          Único: selecionado

                          Pode Inserir: selecionado,

                          Pode Atualizar: selecionado,

                          Pesquisável: selecionando,

Restante das colunas com valores nulos ou “desselecionados”.

 

Atributo: Titulo -> Coluna Do Banco: Ano,

                          Tamanho : 4,

                          Rótulo: ano,

                          Type: java.lang.integer

                          Pode Inserir: selecionado,

                          Pode Atualizar: selecionado,

                          Pesquisável: selecionando,

Restante das colunas com valores nulos ou “desselecionados”.

Veja que na aba consultas, já foram criadas duas consultas: Uma devido a criação da classe, gerando uma consulta para retornar a entidade e outras devido aos atributo título e ano  ser "pesquisável". Após isso é necessário configurar o relacionamento entre Autor e Livro, clique na classe autor e em seguida em tools 1 to N, você verá que será criado uma chave estrangeira em livro do tipo autor.

Veja na figura abaixo como fica a configuração da classe livro:

 

 

 

Gerando a  Camada de Persistência

Tendo finalizado o processo de desenhar o domínio da aplicação no diagrama clique no botão Salvar ou no botão Salvar Todos na barra de ferramentas do CronApp IDE.  Será necessário que o diagrama seja salvo para efetuar a etapa seguinte do processo que é a geração da camada de persistência da aplicação. Após a conclusão dessa ação clique no botão Gerar Camada de Persistência.



Janela de configuração de geração de camada de persistência de aplicação


 

Na janela exibida estão todas as opções de configuração da camada de persistência e todos os demais recursos de código que serão gerados automaticamente.

Obs. Observe que à frente de alguns desses parâmetros há uma caixa de seleção, se esta caixa for selecionada, significa que os recursos referentes aos parâmetros serão gerados. Caso não haja seleção significa que os recursos correspondentes não serão gerados.

 

Vale ressaltar que a camada de persistência e os recursos que serão gerados seguem o padrão MVC (Model-View-Controller), desse modo algumas classes e estruturas geradas são uma sugestão de desenvolvimento. É importante seguir essa estrutura para que se utilize o máximo de recursos do CronApp IDE na sua aplicação.

 Observe abaixo as opções de configuração apresentadas na janela de configuração:

Namespace: Corresponde ao mesmo parâmetro Namespace, esse parâmetro é definido no cabeçalho do editor do diagrama, assim o parâmetro já está pré-configurado. Esse parâmetro configura o pacote de nível mais alto que será gerado para armazenar os outros pacotes que armazenaram as classes Java que serão geradas. Alterando o valor desse parâmetro, os valores dos outros parâmetros que configuram os pacotes (que serão criados dentro do pacote do Namespace) são automaticamente alterados de acordo com o valor do parâmetro Namespace.

Entidades: Configura o pacote em que as classes Java que representaram as entidades serão criadas.

Acesso aos Dados: Configura o pacote em que as classes Java que acessam os registros no banco de dados e, que utilizam o padrão DAO (Data Acess Object) serão criadas.

Regra de Negócio: Parâmetro que configura o pacote em que as classes Java que conterão a implementação de regras negócio da aplicação que serão criadas.

SessionManager: Configura o pacote que armazenará a classe SessionManager, que configura o funcionamento do framework JPA selecionado. Normalmente essa classe fica no mesmo pacote que as classes que acessam os registros do banco (DAO).

R.E.S.T: Configura o pacote que armazenará as classes e os pacotes que serão gerados para a criação da camada Rest da aplicação.

Exception: Configura o pacote que armazenará as classes de exceção (especificações que herdam da classe Exception, natural do Java) que são utilizadas para tratamento de erros da aplicação. Esse pacote é uma sugestão para manter a estrutura da aplicação. Normalmente fica dentro do pacote configurado para receber as classes da camada Rest.

Caminho: Configura a definição do caminho de acesso à camada Rest da aplicação. Tem como padrão o seguinte valor: /api/rest/(valor configurado no parâmetro Namespace)

Testes: Configura o pacote que armazenará as classes de teste unitários de aplicação. Esse pacote é uma sugestão para manter a estrutura da aplicação. Para o correto funcionamento da ferramenta de execução dos testes unitários do CronApp IDE, as classes de testes devem estar no pacote “src/test/java”, seguindo a convenção do Maven.

API RAML: Configura o diretório que armazenará os recursos da API RAML que será gerada para implementar um web-service para os serviços Rest da aplicação. Também é especificado através desse parâmetro o nome do arquivo de acesso principal a essa API Raml, para que seja consumida. Tem como padrão “webcontent/raml/agenda/api.raml”. Esse parâmetro é o único que (por padrão) não vem selecionado para ser gerado. Caso as configurações desse parâmetro não estejam efetuadas corretamente ou o projeto apresente algum erro de compilação, será apresentado um erro na etapa de geração do da API RAML que efetua a compilação de todo o projeto.

Persistence Unit name: Valor que será configurada a unidade de persistência no arquivo persistence.xml que configura as definições do framework JPA. Por padrão tem o mesmo valor do Namespace.

Persistence Provider: Seleção do framework de persistência JPA que será utilizado, possui as seguintes opções “EclipseLink”, “Hibernate” e “OpenJPA”.

Tipo de Geração: Opção de tratamento de criação e atualização de tabelas no banco de dados, tendo as seguintes opções: create-or-extend-tables, drop-and-create-tables e none.

Todos esses parâmetros podem ser editados, embora a recomendação seja somente alterar o valor do parâmetro Namespace no cabeçalho do editor e, se desejar, alterar também os dois últimos parâmetros que configuram o uso do framework de persistência. Alguns parâmetros podem ser selecionados para serem gerados ou não, clicando na caixa de seleção exibida a frente de alguns desses parâmetros. Tendo configurado todos esses parâmetros, clique no botão Gerar para ser efetuada a geração da camada de persistência.

Caso necessite “re-gerar” a camada de persistência e algum dos arquivos anteriormente gerados que tenham sido alterados, antes de efetuar a geração desses recursos será apresentada uma janela listando os arquivos que estão em conflito. Clicando duas vezes sobre algum desses arquivos será aberta uma janela de edição de conflitos para que o arquivo que será gerado possa ser editado e, assim não desapareçam as  alterações que foram efetuadas anteriormente.

 

 

LIsta de arquivos de camada de persistência que foram alterados


Janela de edição de conflitos para manter alterações


 

Wizard Crud Views

Tendo finalizado o processo de gerar a camada de persistência, clique no botão Wizard Diagram Crud View. Será aberta a janela de configuração da geração de páginas de Crud (Create, Read, Update e Delete – Inserir, Pesquisar, Atualizar e Remover) da aplicação.Clique sobre a opção “AngularJS Crud View” e clique no botão (...) que se encontra à frente do parâmetro “Alvo”. Será exibida uma janela de seleção com todos os diretórios do projeto.


 Janela de configuração de geração das páginas de Crud da aplicação e seleção de parâmetro "Alvo"

Digite o valor view e selecione o diretório “webcontent/views”, clicando duas vezes sobre esse diretório que será listado. O parâmetro “Alvo” configura o diretório que receberá as páginas de Crud criadas a partir da ferramenta do Wizard Diagram Crud View. Tendo configurado o parâmetro “Alvo”, clique no botão Próximo. Será exibida a janela de seleção das entidades para as quais as páginas de Crud serão geradas.

Seleção de entidades para geração de páginas de Crud

Para finalizar o processo de gerar as páginas de cadastro das entidades selecionadas basta clicar no botão Finalizar. Desse modo as páginas serão criadas com as configurações padrão das entidades. Para alterar essas configurações, clique no botão (...) exibido a frente da linha que representa cada entidade.

Acessando essas opções serão exibidas duas janelas. A primeira janela configura a lista de campos que serão exibidas em uma Grid (tabela) que exibirá os dados dos registros da entidade. Logo abaixo dessa configuração há a opção de definir um campo que busca por registros dessas entidades. Para gerar esse campo de busca, basta selecionar uma Named Query dentre as configuradas nessa entidade que serão listadas em uma caixa de seleção. Tem como padrão a seleção dos três primeiros campos do tipo String. Você pode configurar os campos que podem ser pesquisados, na barra de filtro de campos pesquisáveis.

Janela de seleção dos camps da Grid da página que será gerada (entidade livro).

Clicando no botão Próximo será exibida a segunda janela de configuração da página de cadastro da entidade que será gerada. Essa segunda página configura a opção de cadastro de entidade, assim definindo os campos que permitiram a entrada de dados para efetuar o cadastro. Tem como padrão a seleção de todos os campos, com exceção do ID que será inserido automaticamente, seja por código Java ou pelo banco de dados.


Janela de Seleção de Campos de Formulário (Entidade Livro)

 

Tendo configurado a exibição e a entrada de dados nessas duas janelas clique no botão Finalizar.  Após está ação será exibida novamente a janela de seleção de entidades para as quais as páginas de cadastro serão geradas.

Exemplo

Para a entidade Livro , selecione filtro do campos pesquisáveis na opção "geral", dessa forma será possível pesquisar o livro pelo título e pelo ano. Já na classe Autor será possível pesquisar o email do autor.


Clique no botão Ok e feche o arquivo do diagrama. Acesse a árvore de recursos, expanda o diretório “webcontent” e em seguida o diretório “view”. Abra o arquivo “home.view.html”. Faça as configurações das entidades criadas para adiciona-las ao menu da home (Criar uma página e atribuir como subitem da Home). L

Clique no botão Rodar da barra de ferramentas. A aplicação será carregada no servidor da IDE. Logo após esta ação será habilitado o botão Abrir Navegador. Ao clicar nessa no botão Abrir Navegação será exibida uma nova aba no navegador, com a execução da aplicação.

Executar e abrir o navegador

Será aberta de login do nosso usuário admnistrador, entre com login e senha padrão: login "admin" e senha "admin".


Autenticação padrão ADMIN

Você entrará na página home, então poderá acessar as entidades criadas pelos items do menu.


Menu da home

Para a classe Autor temos a seguinte view's:

 

 Telas da classe Autor


Para a classe Livro temos a seguinte view's:


Telas da classe Livro

 

 

 


Nesta página

 

  • No labels