Extensões de Transformação

Você pode utilizar as extensões de transformação para estender e aprimorar transformações customizados ou as transformações disponíveis nos Produtos de Modelagem do IBM® Rational.

Alguém que não o autor da transformação de destino pode criar uma extensão de transformação.

A extensibilidade da estrutura de transformação baseia-se na arquitetura de plug-in do Eclipse. As extensões de transformação são plug-ins que contêm os seguintes itens: Em um elemento TransformationExtension, o atributo targetTransformation especifica a transformação a ser estendida, que também é chamada de transformação de destino. Um plug-in de extensão de transformação pode conter vários elementos TransformationExtension, no entanto, se os domínios das transformações de destino forem diferentes, você deverá criar um plug-in separado para cada extensão de transformação em vez de criar vários elementos TransformationExtension em um plug-in.

Para estender uma transformação, você deve verificar se as propriedades extensible e public da transformação de destino estão configuradas como true; também deverá obter as informações do ponto de extensão e o identificador da transformação de destino, além dos identificadores das transfigurações na transformação de destino. Você pode obter essas informações no documento especificado na propriedade document no arquivo de manifesto da transformação de destino.

Também é possível especificar o identificador de uma transformação de destino que não esteja no espaço de trabalho atual, no entanto, não é possível executar a extensão executando a transformação de destino até que seja registrada.

Depois de criar uma extensão de transformação, você pode declarar as regras, os extratores, as transfigurações e as propriedades que aprimoram o comportamento da transformação de destino. Declarar esses elementos não especifica sua ordem de processamento na extensão de transformação. Para cada regra, extrator ou transfiguração declarado, um elemento RuleDefinition, ExtractorDefinition ou TransformDefinition é incluído no elemento TransformationExtension. Ao executar a transformação de destino, a funcionalidade da transformação núcleo tenta carregar a classe especificada do elemento e inclui uma instância do elemento na instância da transformação de destino.

Também é possível definir propriedades que aperfeiçoam o comportamento da extensão de transformação. Para cada propriedade definida, um elemento Property é incluído no elemento TransformationExtension. A funcionalidade da transformação núcleo não distingue entre as propriedades da extensão de transformação e as propriedades da transformação de destino. Se a propriedade criada já existir na transformação de destino, os seguintes eventos ocorrerão:

Ao criar uma extensão de transformação, é possível estender várias transfigurações. As transfigurações estendidas, também chamadas de transfigurações de destino, devem existir na transformação de destino. Ao especificar uma transfiguração a ser estendida, um elemento ExtendTransform é incluído no arquivo de manifesto do plug-in da extensão de transformação.

Depois de declarar as regras, os extratores e as transfigurações da extensão de transformação, você pode especificar sua ordem de execução em uma transfiguração de destino. Uma transfiguração extensível contém uma lista de elementos, que é um índice baseado em zero. Essa lista especifica a ordem em que o mecanismo de transformação executa os elementos na transfiguração. Ao incluir um elemento em uma transfiguração de destino, você pode indicar onde inserir o elemento nos elementos existentes da transfiguração de destino especificando um valor de índice ou indicando qual elemento será executado depois do novo elemento:

Um valor de índice pode ser especificado das seguintes maneiras:

Se você não especificar um valor de índice, o elemento será inserido no final da transfiguração de destino.

Por exemplo, você pode estender uma transformação e declarar uma regra chamada ExtensionRule que especifique como uma transformação processará um determinado elemento de modelo, como uma classe estereotipada. Você pode incluir essa regra na transfiguração de destino específica que transforma um elemento de classe em um modelo de origem. Neste exemplo, suponha que a transfiguração de destino contenha os seguintes elementos: Para especificar que a regra ExtensionRule deve ser executada depois de ExtractorB, especifique um valor de índice 2.
Também é possível especificar a ordem de elementos especificando-se o identificador do elemento a ser executado na seqüência depois do novo elemento. Esse método poderá ser utilizado nos seguintes casos:

Depois que você definir os elementos na extensão de transformação, especificar as transfigurações que serão estendidas e incluir elementos nas transfigurações de destino, você poderá compilar o plug-in de extensão de transformação e testá-lo em um ambiente de trabalho de tempo de execução. Durante as fases de desenvolvimento e teste da criação da extensão de transformação, você pode ativar ou desativar elementos TransformationExtension individuais. Depois de implementar o plug-in que contém a extensão de transformação, assegure-se de que cada elemento TransformationExtension esteja ativado.

Para executar a extensão de transformação, é necessário executar a transformação de destino. Quando uma instância da transformação de destino é solicitada, o serviço de transformação incorpora todas as extensões associadas nessa instância da transformação de destino.

Se várias extensões de transformação estenderem a mesma transfiguração, e se os valores de índice dos elementos de transfiguração entrarem em conflito ou não existirem, a ordem de execução dos elementos será determinada pela análise do arquivo de manifesto de plug-ins executado pelo Eclipse na inicialização.


Feedback