• Nenhum resultado encontrado

CREATE TABLE TIPO_SERVICO (

4.5. Arquitetura do Gerador

4.5.5. O Gerador das Interfaces JSP

Com as informações das aplicações armazenadas na base de dados do gerador, o módulo Gerador das Interfaces JSP obtém as informações sobre a aplicação a ser gerada comparando-as com as definições do documento XML. Assim, para cada padrão usado na aplicação, é feita análise de quais interfaces de interação com o usuário devem ser geradas, bem como quais itens do menu da aplicação serão disponibilizados aos usuários. Esse módulo gera um conjunto de artefatos. O artefato menudados.js define o menu de opções para a chamada das interfaces JSP da aplicação. O atributo de tag que define o menu é denominado menu e pode ser encontrado nas tags <classe> e <metodo>, do documento XML. Esse

package <nome da aplicacao>;

...

public class <nome da classe> implements PersistentObject {

// Objetos para a manipulação dos dados usando PersistenceLayer

...

// Para cada atributos da classe

private <tipo do atributo> <valor da tag atributo>;

// para cada associação entre as classes

private <classe associada> <classe associada>;

// Método construtor

public <nome da classe>(){... }

// Para cada atributo da classe

//********** Métodos SET da classe **********/

public synchronized void set<valor da tag atributo>(<tipo do atributo> valor){

this.<valor da tag atributo> = valor; }

//********** Métodos GET da classe **********/

public <tipo do atributo> get<valor da tag atributo>(){ return this.<valor da tag atributo>;

}

//*********** Métodos para Persistencia e manipulação da base da dados *******

public boolean save() {...} public boolean delete (){...} public ResultSet findall (){...} public ResultSet findlike (){...} public int getLast(){...}

public int getCount() {...}

// Para cada método específico da classe

//*********** Métodos específicos da classe *******

<tipo metodo> <tipo retorno metodo> <valor da tag metodo>( <tipo parametro> <valor da tag parametro>) {

<valor da tag corpoMetodo>

}

Capítulo 4 – Arquitetura do Gerador 87

atributo especifica em qual item do menu a interface deve chamada, existindo quatro opções: cadastro, gerenciamento, avaliações e relatórios. Sempre que o módulo Gerador das

Interfaces JSP encontra uma classe ou um método específico da classe, ele cria uma interface

correspondente. Essas interfaces geradas são adicionadas ao menudados.js. Esse menu é escrito em linguagem Java Script (Goodman, 2001).

O artefato menu.html define a formatação do menu da aplicação e para que seu funcionamento seja correto, o artefato menudado.js e outras bibliotecas do gerador, descritas na seção 4.5.1, são utilizadas. Os demais artefatos possuem extensão .jsp e definem as interfaces da aplicação com o usuário, sendo geradas com base no tipo de interface necessária para satisfazer os requisitos do sistema. Existem cinco tipos básicos de interfaces definidas para o gerador:

♦ As interfaces de métodos: são geradas apenas se a tag <metodo> possuir um valor no atributo menu, criando então, um item no menu da aplicação para a execução do <metodo>, o que possibilita a interação do usuário com as funcionalidades da aplicação. Por exemplo, os métodos que geram os relatórios; ♦ As interfaces simples: são geradas para as classes que possuem o atributo

tipoInterface = “1”. Elas possibilitam o cadastro de informações sem que seja necessário informar quais os valores dos objetos que estão associados a ela;

♦ As interfaces dependentes da escolha de um objeto: são geradas para as classes que possuem o atributo tipoInterface = “2”. Elas permitem o cadastro de informações somente após o usuário ter informado os valores de um ou mais objetos associados a ela, ou seja, quando a informação, a ser inserida, depende obrigatoriamente da existência dos objetos a ela associados;

♦ As interfaces de avaliação: são geradas para as classes que possuem o atributo tipoInterface = “avaliacao”. Elas possuem algumas funcionalidades diferentes dos tipos anteriormente comentados e, por isso, devem ter um gabarito específico para a sua criação;

♦ As interfaces específicas: são as que possuem funcionalidades distintas das anteriormente comentadas, devendo ser definidas internamente ao gerador Sempre que uma interface for específica o atributo tipoInterface deve ser definido como “especifca”.

Capítulo 4 – Arquitetura do Gerador 88

Para a elaboração das interfaces a maioria das tags e atributos de tags definidos no documento XML são utilizados, com exceção da tag <linguagemPadrao> e <padrao>. A Figura 4.13 apresenta parte do gabarito definido para a geração das interfaces simples.

Figura 4.13 – Parte do gabarito definido para a geração das interfaces simples

<%@page import="<nome da aplicacao>.*"%> <%@page import="java.sql.*"%>

<jsp:useBean id="<nome da classe>" class="<nome da aplicacao>.<nome da

classe>"/>

<jsp:setProperty name="<nome da classe>" property="*" /> <HTML> <HEAD> <TITLE><nome da classe></TITLE>

<%@ include file="menu.html" %> <SCRIPT LANGUAGE='JavaScript'>

// Métodos escritos em JavaScript para definir o comportamento da interface

</SCRIPT> </HEAD>

<BODY onLoad='carrega()'> Cadastro de <nome da classe>

<form name= 'formulario' method='POST' action='<nome da classe>_resp.jsp'> <input type='button' value='Novo' name='btnNovo' onClick='novo()'>

<input type='submit' value='Salvar' name='btn'> <input type='button' value='Limpar' name='btnLimpar'

onClick="location='<nome da classe>.jsp'"> <input type='submit' value='Excluir' name='btn'>

...

<select size='8' name='combo' onChange='seleciona_lista()' tabindex='50'> <% try {

rs = <nome da classe>.findall(); while (rs.next()) { %>

// Carrega valores da classe no campo select da interfce

... <%}

} catch (Exception e){} %> </select>

...

// Para cada atributo da classe

<nome do atributo> <input type='<tipoCampo do atributo>' name='<valor da tag atributo>'

size='<tamanho atributo>'>

// Para cada associação entre as classes

<select size='1' name='fk_<nome da classe associada>'> <%

<nome da classe associada> obj= new <nome da classe associada> (); try {

rs = obj.findall(); while (rs.next()) { %>

// Carrega valores da classe no campo select da interfce

... <%}

}catch (Exception e){}%> </select>

...

Capítulo 4 – Arquitetura do Gerador 89

Os demais gabaritos são semelhantes ao apresentado, sendo que as principais diferenças estão na parte de definição dos métodos escritos em Java Script e na apresentação de alguns objetos HTML. Esses gabaritos podem ser encontrados em (Pazin; Penteado, 2004); A Figura 4.14 apresenta esquema de funcionamento do gerador GAwCRe e os artefatos por ele gerado.

Figura 4.14 – Esquema de funcionamento do gerador GAwCRe e os artefatos por ele gerado

...

<padrao numero="2" nome="Definir Serviços">

<classe nome="Servico" interface="1">

<atributo> codigoId </atributo>

<atributo> descrição </atributo>

<atributo>valor</atributo>

<atributo>situacao</atributo>

<associacao>tpservico</associacao>

</classe>

<variante nome="Com tipo serviço">

<classe nome="Tipo_Servico">

<atributo> codigoId </atributo>

<atributo> descrição</atributo>

</classe>

</variante>

</padrao>

...

...

CREATE TABLE SERVICO (

CODIGOID NUMBER(4) NULL,

DESCRICAO VARCHAR2(25) NULL);

...

ALTER TABLE SERVICO

MODIFY CODIGOID NUMBER(4) NOT NULL;

...

package ClinicaFisio; ...

public class Servico

implements PersistentObject { ...

// Atributos da classe private int codigoId; private String descricao;

... public Servico(){ ... } ... } Documento XML

Script de criação da Base de Dados

Classes Java Interface JSP Base de Dados do Gerador Gerador de scripts SQL Lê as definições XML Armazena e recupera os dados das especificações LMA

para cada aplicação Instanciador da LMA

(Gerador de aplicações)

Gerador das Classes Java

Gerador de Interfaces JSP

Especificação LMA para uma

Aplicação Gerador GAwCRe Gabaritos de Código Bibliotecas Interface