• Nenhum resultado encontrado

Implementação da extração do modelo XMI

3.3 IMPLEMENTAÇÃO

3.3.2 Implementação da extração do modelo XMI

O processo de extração das informações dos códigos do projeto Java é feito por meio do MoDisco, que é disponibilizado para a IDE Eclipse na forma de um plug-in. O MoDisco pode ser acionado a partir de um botão direito do mouse sobre um projeto Java. Contudo, o método de extração utilizado no desenvolvimento deste trabalho foi a criação de um plug-in que realiza uma chamada à biblioteca do MoDisco. O motivo para a criação desse plug-in foi permitir que o usuário realizasse a análise léxica/sintática dos arquivos Java e geração do código web em um único passo. O Quadro 8 mostra o código que aciona o MoDisco para analisar os arquivos de um projeto Java na IDE Eclipse.

Quadro 8 - Implementação da extração de modelo XMI

31 No Quadro 8 na linha 2 o método discoverElement da classe

DiscoverJavaModelFromJavaProject é chamado para identificar no projeto Java as classes, atributos, métodos e outros elementos. Tudo que é identificado é armazenado em um objeto da classe Resource obtido a partir do método getTargetModel (linha 5). Esse objeto consiste no modelo XMI, cujas informações são salvas em um arquivo, conforme pode ser visto no Quadro 8 nas linhas 6 e 7, e também são repassadas para o motor de transformação. A chamada do motor de transformação é feita através da classe GenerateAll (linha 11). Essa classe recebe como parâmetro o modelo XMI através do objeto URI, que informa o local físico onde o arquivo XMI foi salvo, e o local onde os arquivos resultantes serão salvos, nesse caso a pasta WebContent. O método doGenerate é invocado para executar o processo de transformação como pode ser observado no Quadro 8 (linha 12).

3.3.2.1 Definição de classe no modelo XMI

No Quadro 9 é mostrado como a definição de uma classe Java qualquer é traduzida no modelo XMI gerado pelo MoDisco. As classes encontradas no código Java são armazenadas em uma tag <ownedElements>. Na linha 13 do arquivo XMI, a tag <modifier> indica a visibilidade da classe. Na linha 144, a tag <superClass> indica uma superclasse, se houver.

As demais declarações como métodos e atributos são mapeadas pela tag

<bodyDeclarations>. Diversas linhas do arquivo mostrado nesse quadro foram omitidas para simplificar a explicação, pois estão relacionadas com o conteúdo dos métodos e de outros elementos contidos na classe.

32 Quadro 9 - Definição de uma classe no arquivo XMI

Classe Java

Classe XMI

Além de classes, a tag <ownedElements> (Quadro 9) pode referenciar diferentes tipos de construções dentro do modelo XMI, como pacotes do projeto. A diferenciação do significado das tags se dá por um atributo chamado xsi:type, que no caso das classes tem o valor java:ClassDeclaration. Outros atributos são definidos na classe, sendo eles:

a) originalCompilationUnit: referência para a tag <compilationUnits>, que armazena informações sobre o arquivo compilável da classe, como, imports utilizados, nome do arquivo e caminho do arquivo físico (Quadro 10);

b) name: nome da classe;

c) usagesInTypeAccess: mapeamento de onde a classe é utilizada no projeto, sendo este atributo opcional caso a classe não seja utilizada.

33 Quadro 10 - Definição da tag compilationUnit

3.3.2.2 Definição de método no modelo XMI

No modelo XMI gerado pelo MoDisco os métodos são mapeados na tag

<bodyDeclarations>. O atributo xsi:type dessa tag é valorado como

java:MethodDeclaration, indicando que se trata da declaração de um método (Quadro 11, linha 14). Os demais atributos indicam o nome do método e a classe à qual ele pertence.

Dentro da tag <bodyDeclarations> existem as tags <modifier>, <parameters> e

<returnType> nas linhas 16, 38 e 41 respectivamente. A tag <modifier> armazena informações sobre os modificadores do método, como a visibilidade do mesmo, se ele é estático ou não, entre outras coisas. A tag <parameters> guarda informações sobre os parâmetros que o método possui, sendo essa tag opcional caso o método não receba nenhum parâmetro. A tag <returnType> indica qual é o tipo de retorno do método e não ocorre em métodos construtores, já que eles não possuem retorno. As informações correspondentes ao escopo do método são armazenadas na tag <body> (linha 17). O Quadro 11 mostra o código resultante da extração feita do método main da classe Java observada no Quadro 9.

34 Quadro 11 - Definição de método no arquivo XMI

3.3.2.3 Definição de instrução no modelo XMI

No Quadro 12 pode ser observada a representação de uma instrução Java transformada em tags no modelo XMI. Assim como outras tags, <statements> também possui um atributo

xsi:type. Para expressões como invocação de método e atribuições, o xsi:type é

java:ExpressionStatement. Para os casos de declaração de variável, o valor é

java:VariableDeclarationStatement. Na linha 33 do Quadro 12 é definida a tag

<expression>. Essa tag contém as informações referentes à instrução transformada.

Conforme pode ser observado no Quadro 12, a tag <expression> tem um atributo xsi:type, que define o tipo de expressão, e um atributo method (linha 36), para os casos em que a expressão é do tipo java:MethodInvocation, indicando qual método está sendo chamado.

As informações referentes aos métodos e classes Java são mapeadas separadamente das informações do projeto Java. O Quadro 13 mostra o mapeamento do método setVisible na linha 8. O valor do atributo method da tag <expression> (linha 33) faz uma referência para o mapeamento do método setVisible. Na linha 37 do Quadro 12 é definido a tag

35

<arguments> que contém as informações dos parâmetros enviado ao método, nesse caso o valor true (linha 40). Para cada parâmetro passado ao método é gerada uma tag

<arguments>. Na linha 41 do Quadro 12 é definida a tag <expression>, que contém informações de quem está chamando o método em questão. Essa tag é opcional, tendo em vista que métodos da própria classe podem ser invocados sem a necessidade de definir explicitamente quem o invoca.

Quadro 12 - Definição de instrução no arquivo XMI Instrução Java

Instrução no modelo XMI

Quadro 13 - Mapemaneto XMI do médoto setVisible

Documentos relacionados