Um dos fluxos de trabalho típicos no uso da ferramenta de projeto e desenvolvimento IBM® Rational® Software Architect para desenvolvimento direcionado por modelo é criar um modelo de Linguagem de Modelagem Unificada (UML) para representar um modelo particular. Esta ferramenta também fornece várias transformações predefinidas que converterão um modelo UML em qualquer uma das linguagens de programação suportadas. No entanto, em vez de usar uma das transformações fornecidas, é possível criar sua própria transformação, que converterá o modelo de acordo com as regras que você definir.
Os recursos de extensibilidade no Rational Software Architect fornecem ferramentas para criar transformações Java™ Emitter Template (JET) e especificar suas próprias regras para a geração de saída a partir das transformações. JET é uma linguagem de modelo desenvolvida pela IBM. Ao usar transformações JET, é possível gerar, rápida e facilmente, uma transformação modelo-para-texto com base em modelos. Com o kit de ferramentas JET, é possível gerar arquivos de texto a partir de um modelo usando modelos que contenham texto e comandos JET (tags). Transformações JET automatizam o processo repetitivo de geração de texto.
Este artigo orienta você pelas etapas de criação de uma nova transformação JET para criar um projeto Java que representa uma biblioteca de livros.
Crie e configure o projeto de transformação JET
Para usar a tecnologia JET a fim de criar as transformações, o especialista do domínio de destino deverá fornecer um projeto Exemplar para o autor da transformação. O projeto Exemplar representa o formato desejado da saída da transformação. A melhor prática é criar um projeto Exemplar para representar o máximo de detalhes possível do formato para a saída necessária. O projeto precisa ser importado para a área de trabalho do Rational Software Architect.
Para os fins deste artigo, um projeto Java ™ (MyLibrary) simples que contém uma classe Java (BookTitle) dentro de um pacote (books) é o exemplo. Quando a transformação JET é criada e executada, a saída esperada da transformação será um projeto Java que contém uma ou mais classes Java dentro de um pacote.
A Figura 1 mostra o projeto Java exemplar usado neste artigo.
Figura 1. O projeto Java exemplar
Para desenvolver a transformação JET que aceitará um modelo UML como origem e gerará um projeto Java como alvo, é preciso criar um novo JET Project com Exemplar Authoring no Rational Software Architect:
- Selecione File > New > Project a partir do menu principal.
- Na categoria JET Transformations, especifique JET Project com Exemplar Authoring.
- Nomeie o projeto
com.test.my.transform. - Aceite os padrões na página seguinte e, a seguir, clique em Next.
- Na página Transformation Scope, selecione o projeto MyLibrary e, a seguir, clique em Finish.
O projeto criado contém o arquivo transform.tma que será usado neste exercício principalmente para desenvolver a transformação desejada. Ele é aberto, automaticamente, na visualização do editor, com suas guias: Schema e Overview. A guia Overview (Figura 2) exibe informações gerais sobre a transformação.
Figura 2. Guia Overview com informações gerais sobre o projeto JET
Você trabalhará na guia Schema (Figura 3) para desenvolver as ações de saída da transformação.
Figura 3. O editor do JET com o projeto de criação Exemplar
Como primeira etapa, o projeto Exemplar deve ser analisado. Ele poderá conter artefatos os quais você não planeja gerar em sua saída. Em nosso exemplo, não queremos que a transformação gere arquivos .class. A geração dessas classes será realizada no projeto Java de destino, automaticamente, com base nos arquivos .java.
Para excluir BookTitle.class a partir do esquema Exemplar:
- Clique com o botão direito em BookTitle.class na janela Transform Authoring.
- Selecione Delete a partir do menu.
Na Figura 4, a versão final do projeto Exemplar é mostrada no editor de Schema da transformação.
Figura 4. O projeto Exemplar final
Desenvolva as ações de esquema de entrada e saída
Agora, você está pronto para desenvolver o esquema de entrada e as ações de saída para que possa gerar a saída da transformação automaticamente.
Para especificar a geração do projeto Java de destino:
- Clique com o botão direito do mouse na entrada root no painel "Define the transformation input schema and output actions" e selecione New >Type no menu de contexto.
- Dê ao novo tipo o nome
projectInfo. - Adicione um novo projeto chamado
my.projectao tipo projectInfo. - Para criar ações de saída, arraste os arquivos classpath e .project do painel Exemplar para o nó my.project no painel Transform Input and output actions.
- No painel Transformation input schema and output actions, renomeie os arquivos
criados como
.projecte.classpath.
Os arquivos agora estão adicionados ao painel "Transformation input schema and output actions". No painel Exemplar, serão exibidos ícones próximos aos nós dos arquivos .project e .classpath. Isto indica que ações foram criadas para esses elementos (consulte a Figura 5).
Figura 5. Os arquivos .classpath e .project no Transformation Input schema
Visualização maior da Figura 5.
- Caso não veja a visualização Properties em sua área de trabalho, clique com o botão direito do mouse em qualquer elemento adicionado no painel "Transformation input schema and output actions" e selecione Show Properties View no menu de contexto.
- Adicione um atributo chamado
nameno tipo projectInfo.
A transformação criada deverá ser flexível, de forma que possa gerar projetos com vários nomes para diferentes bibliotecas. Para ativar esta flexibilidade:
- Clique com o botão direito do mouse no tipo projectInfo no painel "Define the transformation input schema and output actions" e selecione New > Attribute no menu de contexto.
- Nomeie o novo atributo de
name. - (Opcional) Clique com o botão direito do mouse no atributo name e selecione Edit Exemplar Text no menu de contexto.
- Na janela Edit Exemplar Text, adicione o nome do projeto
MyLibraryao atributo name (Figura 6). - Clique em Add e, a seguir, em OK.
Figura 6. Definindo o texto exemplar
O nome do projeto exemplar é exibido na visualização Properties, sob o campo Exemplar Text (consulte a Figura 7).
Figura 7. As propriedades do atributo name editado
Substitua a sequência de texto Exemplar Text
Esta sequência de texto Exemplar Text pode ser automaticamente substituída com o nome que quiser usar para o projeto quando você estiver preparado para executar a transformação. O projeto de saída será gerado com o nome definido pelo usuário especificado no modelo de origem.
Siga essas etapas para especificar que o Exemplar Text deverá ser substituído de acordo com a entrada do usuário quando a transformação for executada:
- Selecione o projeto my.project .
- Na visualização Properties, na seção Action Parameters, clique com o botão direito do mouse no valor para o Name .
- Selecione Replace with model reference (consulte a Figura 8).
Figura 8. Atualizando o parâmetro nome do projeto
Visualização maior da Figura 8.
- Na janela de diálogo "Replace with Model References", selecione o atributo
name no tipo projectInfo e, a seguir, clique em OK (Figura 9).
Figura 9. Selecionando o atributo "name"
Como resultado, o valor do parâmetro de ação name do projeto chamado
my.project é substituído pela tag {$projectInfo/@name} (Figura 10).
Figura 10. Valor substituído do parâmetro de ação "name"
Especifique as ações de transformação para gerar artefatos
Agora, você especificará as ações de transformação para gerar artefatos do projeto.
Para gerar um arquivo Java para cada item de biblioteca, uma ação de saída precisa ser criada e vinculada ao arquivo Java exemplar. Para tanto, adicione um novo tipo chamado "item" ao tipo "projectInfo" e especifique a geração da classe Java:
- No painel "Transformation input schema and output actions", clique com o botão direito do mouse no tipo projectInfo.
- No menu de contexto, selecione New > Type.
- Nomeie o novo tipo.
- Arraste o arquivo BookTitle.java do painel Exemplar para o tipo.
- Nomeie o arquivo
myBookTitle.java.
O novo arquivo myBookTitle.java agora está adicionado ao painel "Transformation input schema and output actions". Um ícone é exibido próximo a BookTitle.java no painel Exemplar, indicando que este arquivo está vinculado ao novo arquivo myBookTitle.java no outro painel. Note que, na visualização Properties na seção Action, é possível adicionar condições para geração, bem como uma descrição de qualquer um dos artefatos gerados (consulte a Figura 10).
Salve o esquema criado e atualize o projeto:
- No menu principal, selecione File > Save All.
- Na visualização do editor no painel "Transformation input schema and output actions", clique com o botão direito do mouse no tipo root e selecione Update Project (Figura 11).
Figura 11. Selecione Update Project no menu
As pastas para cada tipo serão geradas, contendo modelos JET que especificam a geração de cada arquivo necessário (Figura 12).
Figura 12. Modelos JET gerados
O arquivo de modelo main.jet contém tags que especificam a geração dos arquivos .project, .classpath e myBookTitle.java (Figura 13).
Figura 13. Tags de modelo geradas no modelo main.jet
Visualização maior da Figura 13.
Substitua cadeias de caractere codificadas permanentemente por expressões xPath
Para adicionar flexibilidade na geração de uma variedade de resultados de saída, várias cadeiras de caracteres codificadas permanentemente em modelos JET podem ser atualizadas com expressões xPath. Aqui, descreveremos algumas das opções possíveis como exemplo, bem como o fluxo de trabalho recomendado.
- No painel "Transformation input schema and output actions", selecione o arquivo myBookTiltle.java (Figura 14).
- Na visualização Properties, em "Action parameters", selecione o valor MyLibrary/books da propriedade path , clique com o botão direito do mouse nela e selecione o item de menu "Replace with Model Reference" .
Figura 14. Seleção da cadeia de caracteres a ser substituída com referências do modelo em Properties
Visualização maior da Figura 14.
A Figura 15 mostra a janela de diálogo resultante: Replace with Model References.
Figura 15. A janela Replace with Model References
Nesta janela de diálogo, é possível selecionar um atributo existente ou criar um novo atributo. Aqui, demonstraremos a criação de um novo atributo que descreverá a geração do nome do pacote.
- Selecione o tipo projectInfo .
- Clique em New.
Ao clicar no botão New , a caixa de diálogo "Create New Derived Attribute" será exibida (Figura 16). Nesta janela, é possível definir o atributo com o valor derivado do cálculo. O campo name do atributo deverá ser preenchido por você, o usuário. O campo exemplar text é preenchido com a cadeia de caracteres selecionada quando o diálogo foi chamado e a mesma cadeia de caracteres é gravada, por padrão, no valor Calculation. Deixe o valor padrão para este exercício, mas, em uma transformação do real, é possível substituí-la com uma expressão XPath.
Figura 16. Criando um atributo derivado
- Inclua a cadeia de caracteres
pkgDirno campo de texto "Attribute name". - Clique em OK para fechar a janela "Create New Derived Attribute".
- Clique em OK para fechar a janela "Replace with Model References".
O novo atributo derivado, pkgDir, é criado e exibido no painel do editor "Transformation input schema and output actions" (Figura 17).
Figura 17. Atributo derivado recém-criado, pkgDir
O valor da propriedade path para myBookTitle.java é atualizado com o parâmetro do atributo derivado gerado (Figura 18).
Figura 18. O valor do caminho com um parâmetro substituído
Visualização maior da Figura 18.
O autor da transformação também deverá fornecer a capacidade de gerar várias classes Java.
Para permitir isto, crie um novo atributo name para o tipo da mesma forma que descrevemos anteriormente para o tipo projectInfo . Substitua o nome do arquivo codificado permanentemente com um atributo criado para o parâmetro path de myBookTitle.java .
- Selecione myBookTitle.java no painel do editor "Transformation input schema and output actions".
- Selecione o nome de arquivo BookTitle no valor do caminho na visualização Property.
- Clique com o botão direito do mouse no nome de arquivo BookTitle no valor do caminho na visualização Properties.
- Selecione o item do menu de contexto "Replace with Model Reference".
- Na janela de diálogo "Replace with Model References", selecione o atributo
name que pertence ao tipo.
Como resultado, o caminho codificado permanentemente é substituído com uma cadeia de caracteres que contém uma expressão XPath (Figura 19). Isto dá a flexibilidade para o usuário da transformação de gerar várias classes Java com nomes diferentes.
Figura 19. O valor do caminho com o nome do arquivo substituído
Visualização maior da Figura 19.
- Salve o esquema criado.
- Na visualização do editor no painel "Transformation input schema and output actions", clique com o botão direito do mouse no tipo root e selecione Update Project.
Os modelos JET serão atualizados. A seguinte expressão XPath será adicionada ao modelo main.jet:
<ws:file
path="{$projectInfo/@pkgDir}/{$item/@name}.java" replace="true"
template="templates/item/myBookTitle.java.jet"/> |
Edite os modelos para customizar a saída da transformação
Até este ponto, você estava desenvolvendo a transformação usando o editor de criação JET. Agora, com os esboços do modelo gerados, é preciso ajustá-los para permitir a geração do conteúdo da saída da transformação, de acordo com os requisitos de seu projeto.
Aqui, demonstraremos como é possível usar as ferramentas de edição fornecidas no conjunto de ferramentas do Rational Software Architect.
Para ajudá-lo na edição de modelos, a ferramenta indica cadeias de caracteres detectadas dentro do modelo que podem ser substituídas com artefatos de transformação. Os sinais de informações são exibidos na Project Explorer view (Figura 20). Ao abrir o modelo indicado, o texto a ser substituído está sublinhado. Ao passar o mouse sobre o texto sublinhado, uma cadeia de caractere de ajuda com uma ação sugerida é exibida.
Figura 20. A sugestão da assistência
Visualização maior da Figura 20.
- Selecione o texto sublinhado.
- Clique com o botão direito do mouse e selecione Find/Replace with Model References (Figura 21).
- Na janela de diálogo "Find/Replace with Model References", é possível
selecionar o atributo sugerido ou qualquer outro atributo existente, ou criar um
novo atributo.
Para esta demonstração, selecionamos o atributo destacado sugerido, name, sob o tipo. - Clique em Replace e, a seguir, clique em Close.
Figura 21. Substituindo o nome usando uma cadeia de caracteres gerada automaticamente
O texto selecionado no modelo será substituído com esta tag do JET:
<c:get select="$item/@name" /> |
É possível, neste ponto, substituir qualquer texto com a tag do JET. Nos modelos project.jet e main.jet anexados ao projeto de exemplo (consulte a seção Download ), substituímos o nome do projeto codificado permanentemente com esta expressão XPath:
<c:get select="$projectInfo/@name"
/> |
Nota:
Os sinais de informações em Project Explorer desaparecerão quando
todas as atualizações sugeridas forem realizadas e quaisquer modelos atualizados
forem salvos.
Você criou uma transformação JET básica e agora está pronto para executá-la.
Para testar a transformação, crie um arquivo contendo a entrada dela. A edição do IBM® Rational® Software Architect para WebSphere® fornece as ferramentas para gerar um arquivo de entrada de teste com base no esquema XSD que foi gerado no projeto de criação da transformação. Siga estas etapas para gerar o arquivo de entrada:
- Selecione File > New > Other > XML > XML
File e, a seguir, Next..
Nota:
Talvez seja necessário selecionar a caixa de opções Show All Wizards na janela de diálogo New para tornar esta opção disponível. - Confirme a ativação das capacidades se aparecer uma caixa de diálogo pedindo que o faça.
- Selecione o projeto com.test.my.transform como contêiner, insira
MyTest.xmlcomo nome e clique em Next.. - Selecione o botão de opções Create XML file from an XML schema file e clique em Next..
- Clique no botão de opções Select file from Workspace .
- No projeto com.test.my.transform , selecione o arquivo schema.xsd e, a seguir, clique em Next..
- Marque todas as caixas de seleção e, a seguir, clique em Finish.
- Insira os dados necessários no arquivo MyTest.xml gerado e, a seguir, salve e feche o arquivo.
A Figura 22 mostra o arquivo de entrada sugerido.
Figura 22. Arquivo de entrada da transformação sugerido
A transformação está pronta para ser executada.
- No Project Explorer, clique com o botão direito do mouse no arquivo MyTest.xml e selecione Run As no menu.
- Selecione Run Configuration.
- Na janela Run Configurations, clique duas vezes em JET Transformation.
- Assegure-se de que o arquivo MyTest.xml esteja listado como Transformation Input (Figura 23).
- Clique em Run.
Figura 23. Definindo uma configuração de transformação de teste
Visualização maior da Figura 23.
Quando a transformação é executada, o novo projeto chamado BookLibrary é criado. Ele contém arquivos Java nomeados como especificado no arquivo MyTest.xml (Figura 24).
Figura 24. Os arquivos gerados pela execução da transformação
O conjunto de ferramentas Rational Software Architect pode ser usado de forma similar para elaborar adicionalmente o esquema de entrada e as ações de saída da transformação.
Este artigo forneceu instruções passo a passo sobre como definir uma transformação básica com base nos modelos JET. Esta transformação eficiente definida pelo usuário pode simplificar o processo de desenvolvimento com base em ativos e ajudar na reutilização de código.
No próximo artigo desta série em duas partes, demonstraremos como usar as ferramentas do Rational Software Architect para gerar perfis específicos para o domínio de destino da transformação e como implementar a transformação em sua área de trabalho.
Assegure-se de verificar a seção Recursos para saber onde você pode aprender mais.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| Example project files | artifacts04c.zip | 28KB | HTTP |
Informações sobre métodos de download
Aprender
- Leia mais sobre a transformação com base em modelos
JET e, para obter uma base de XPath, consulte Strategic Reuse with
Asset-Based Development (IBM® Redbooks®, maio de 2008).
- Confira esses artigos relevantes do developerWorks:
- Create more — better — code in Eclipse with JET (IBM® developerWorks®, agosto de 2006)
- Create powerful custom tools quickly with Rational Software Architect Version 7.0: Introduction to the Transformation Authoring feature (developerWorks, janeiro de 2007)
- Obtenha mais informações sobre a tecnologia JET na
página de projeto
Modelo-para-Texto no Web site do Eclipse
- Descubra mais sobre as versões do Rational Software
Architect:
- Rational Software Architect Standard Edition:
- Rational Software Architect para Software WebSphere:
- Visite a área do área do software Rational no
developerWorks para ver recursos técnicos e boas práticas para produtos da
Rational Software Delivery Platform.
- Fique por dentro doseventos técnicos e webcasts do developerWorks sobre uma série de produtos IBM e tópicos do segmento de mercado de TI.
- Participe de briefing ao vivo e gratuito developerWorks para se atualizar rapidamente sobre produtos e ferramentas IBM, bem como tendências do segmento de mercado de TI.
- Siga o developerWorks no Twitter.
- Veja as demos on demand no developerWorks, variando de demos de instalação e configuração de produtos para iniciantes a funcionalidades avançadas para desenvolvedores experientes.
- Experimente um dos nossos cursos de treinamento
baseados na Web, que você pode fazer em qualquer momento e lugar.
Obter produtos e tecnologias
- Faça o download de uma ou de
ambas as versões de teste:
- Avalie o software IBM
da forma que melhor lhe convier: faça o download para uma avaliação, experimente-o
online, use-o em um ambiente de nuvem ou passe algumas horas no SOA
Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de forma
eficiente.
Discutir
- Participe da discussão no Fórum do
Rational Development Tools .
- Participe do comunidade do My
developerWorks. Conecte-se com outros usuários do developerWorks enquanto
explora blogs direcionados ao desenvolvedor, grupos, como o Rational Café, e
wikis.

Marya Berfeld trabalha com verificação de software em ferramentas de modelagem com o IBM Rational desde 2000. Ela trabalhou no teste de vários recursos de modelagem e publicou um artigo sobre transformações de Java para UML no Rational Software Architect no developerWorks em 2008

Darren Coffin trabalha com verificação de software em ferramentas de modelagem com o IBM Rational desde 1999. Ele trabalhou intensivamente no teste de um grande número de recursos e diagramas de modelagem. É formado pela Universidade de Trent, com diploma em Estudos da Computação e Estudos de Recursos Ambientais.