© Copyright International Business Machines Corporation 2006. Todos direitos reservados. Direitos Restritos para Usuários do Governo dos Estados Unidos - Uso, duplicação e divulgação restritos pelo documento GSA ADP Schedule Contract com a IBM Corporation.
Ao criar uma transformação de modelo em modelo, se o destino for um modelo UML 2, os perfis da UML padrão não serão mapeados automaticamente. Por exemplo, o perfil da UML default.epx não é mapeado automaticamente. Você deve mapear esses perfis manualmente ou utilizar a estrutura UMLDefaultLibrariesAddRule. Você poderá incluir manualmente essa estrutura em uma transformação se o destino for uma EClass de modelo UML.
Para incluir a estrutura em uma transformação, inclua o seguinte código na transformação:
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
protected void addTransformElements(Registry registry) {
add(new UMLDefaultLibrariesAddRule());
addGeneratedTransformElements(registry);
// Você pode incluir mais elementos de transformação após os gerados aqui
// Lembre-se de remover a tag @generated ou adicionar NOT a ela
}
Na autoria de transformação de modelo em modelo, para ter suporte a "fusão" no modelo de destino, é necessário ter a extensão "org.eclipse.core.runtime.contentTypes" como um plug-in no espaço de trabalho do Eclipse. É possível especificar essa extensão em um plug-in que tenha um nome de domínio derivado do domínio do modelo de destino. Para obter informações adicionais sobre essa extensão, consulte a documentação do ponto de extensão no projeto Comparar/Mesclar. Isso permite construir uma estratégia de fusão sofisticada para o modelo de destino. Para obter uma estratégia EMF mais simples, é possível especificar a seguinte extensão (substitua "xxx" pela extensão de seu arquivo de destino):
<extension
point="org.eclipse.core.runtime.contentTypes">
<file-association
content-type="com.ibm.xtools.comparemerge.emf.emfContentType"
file-extensions="xxx"/>
</extension>
Ao criar transformações de modelo para modelo, os modelos Ecore especificados como entrada ou saída devem ter genmodels correspondentes. Para criar genmodels, é possível utilizar o assistente Modelo de EMF. Assegure-se de gerar código depois de criar os genmodels. Os genmodels devem ser registrados no ambiente de trabalho de desenvolvimento ou devem estar no mesmo caminho que os modelos Ecore correspondentes. Os genmodels devem ter uma extensão de nome de arquivo .genmodel, um nome semelhante e a mesma capitalização que os modelos Ecore. Caso contrário, o mecanismo de autoria de transformação não poderá localizar o genmodel. Se o mecanismo de autoria de transformação não puder localizar os genmodels necessários, ele desativará a geração de códigos.
Ao criar uma configuração para uma transformação de modelo em modelo, é necessário especificar um arquivo que represente o modelo de destino, mesmo se o arquivo estiver vazio. Não é possível especificar um URI como o contêiner de destino.
Para criar um modelo Ecore vazio, na página Principal do assistente ou do editor de configuração de transformação, clique no botão Criar Novo Contêiner de Destino e especifique um arquivo que tenha a extensão do modelo de destino.
Para integrar uma transformação de modelo em modelo como o front end para uma transformação JET (modelo para texto), você deve incluir manualmente uma instância da estrutura JETRule nas regras 'postProcessing' da RootTransformation que está localizada no provedor de transformação. O exemplo a seguir mostra o código que deve ser incluído na classe do provedor de transformação. Você deve substituir 'xxx' pelo ID da transformação JET.
/**
* Cria uma transformação raiz. É possível incluir mais regras na transformação aqui
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param transform A transformação raiz
* @generated NOT
*/
protected RootTransformation createRootTransformation(ITransformationDescriptor descriptor) {
return new RootTransformation(descriptor, new MainTransform()) {
protected void addPostProcessingRules() {
add(new JETRule("xxx"));
}
};
}
Para gerar transformações que recebem ou geram modelos UML, especifique um metamodelo UML como a entrada raiz e/ou a saída raiz da especificação do mapeamento. A inclusão de um perfil da UML na especificação de mapeamento não inclui automaticamente o metamodelo da UML.
Solução alternativa: Inclua o metamodelo UML clicando no botão Incluir Modelo no editor e no assistente Mapeamento de Transformação Modelo para Modelo.
Os terminais de conectores de mapeamento podem desaparecer se um usuário comutar a filtragem de recursos do modo "Básico" para "Intermediário" ou "Avançado" e então criar mapeamentos e, em seguida, comutar de volta para o modo de filtro "Básico". Isso pode causar o aparecimento de conectores de mapeamento que têm terminais que não se conectam a nada. Isso afeta apenas a aparência dos mapeamentos. Os mapeamentos e o código-fonte que a transformação gera a partir dos mapeamentos não são afetados.
Solução alternativa: Corrija a aparência dos mapeamentos especificando o modo do filtro que estava em efeito quando os mapeamentos foram criados.
Quando um arquivo de mapeamento não mais contiver mapeamentos que especifiquem elementos de um modelo como entradas ou saídas de mapeamento, o modelo será "eliminado" do arquivo de mapeamento. A verificação por modelos não utilizados é feita sempre que uma entrada ou saída de um mapeamento for excluída. Listas separadas são mantidas no arquivo de mapeamento para entradas e saídas.
Solução alternativa: Você deve incluir o modelo no arquivo de mapeamento antes de poder selecionar elementos desse modelo como entradas ou saídas de mapeamento. Clique no botão Incluir Modelo no Editor de Mapeamento para incluir o modelo no arquivo de mapeamento.
No editor de configuração de transformação para transformações de modelo em modelo geradas, a opção runSilent pode ser especificada com qualquer modo de mesclagem, incluindo 'automatic' ou 'visual'. Se o modo de mesclagem for configurado como automatic ou visual, a opção runSilent forçará a estratégia de mesclagem silenciosa se o suporte a fusão for localizado para o modelo de destino. Caso contrário, uma estratégia de mesclagem substituta será utilizada.
Ao criar um modelo de mapeamento de transformação a partir do metamodelo Ecore para um metamodelo UML com perfis, você deverá verificar o URI do perfil que será utilizado em modelos UML de destino. Por padrão, será utilizado o URI do perfil especificado no editor de mapeamento. Se você especificar um URI de recurso, ele será convertido em um URI de plug-in equivalente.
Solução alternativa: É possível especificar um URI diferente na propriedade de substituição profileURI na página de propriedades. Clique na seção raiz no editor de mapeamento para exibir a página de propriedades. Nota: Se você estiver utilizando um perfil registrado, poderá especificar o URI com o qual o perfil está registrado, se ele for diferente do perfil que é utilizado automaticamente. Se não fizer isso, o perfil registrado poderá ser carregado mais de uma vez no conjunto de recursos, o que pode causar problemas com mesclagem ou fusão.
Ao gerar código de modelos de mapeamento em transformações de modelo para modelo, os arquivos básicos do projeto como plugin.xml e manifest.mf serão gerados se não puderem ser localizados. Pode ser necessário editar esses arquivos depois que eles forem gerados.
Solução alternativa:
- Se você incluir modelos de entrada ou de saída no arquivo de mapeamento, deverá editar o arquivo manifest.mf. Inclua as dependências para plug-ins que contenham o código do modelo gerado para o modelo de entrada/saída. A inclusão dessas dependências deve corrigir os erros de compilação que resultam da tentativa em acessar as classes que estão nesses plug-ins. É possível incluir uma dependência no plug-in que contém o código gerado para o novo modelo de entrada/saída.
- Se você criar um modelo de mapeamento em um plug-in Java que contenha os arquivos plugin.xml e manifest.mf, deverá incluir as dependências necessárias no arquivo manifest.mf. Inclua a dependência na autoria de transformação e a dependência nos modelos de entrada/saída. Também é necessário incluir a extensão com.ibm.xtools.transform.core.transformationProviders no arquivo plugin.xml.