© Copyright International Business Machines Corporation 2006. All rights reserved. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
在编写模型到模型变换时,如果目标是 UML 2 模型,则不会自动地对缺省 UML 概要文件进行映射。例如,不会自动地对 UML 概要文件 default.epx 进行映射。您必须以手工方式映射这些概要文件或者使用 UMLDefaultLibrariesAddRule 框架。如果目标是 UML 模型 EClass,则可以通过手工方式将此框架添加到变换中。
要将此框架添加到变换中,请在该变换中添加以下代码:
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
protected void addTransformElements(Registry registry) {
add(new UMLDefaultLibrariesAddRule());
addGeneratedTransformElements(registry);
// 在此处生成的元素后面,可以添加更多变换元素
// 请不要忘记除去 @generated 标记或对其添加 NOT
}
在编写模型到模型变换时,要让目标模型包含“融合”支持,Eclipse 工作空间中的某个插件必须包含“org.eclipse.core.runtime.contentTypes”扩展。可以在从目标模型域派生域名的插件中指定此扩展。有关此扩展的更多信息,请参阅“比较/合并”项目中的扩展点文档。这使您能够为目标模型构建复杂的融合策略。为了简化 EMF 策略,可以指定以下扩展并将“xxx”替换为目标文件扩展名:
<extension
point="org.eclipse.core.runtime.contentTypes">
<file-association
content-type="com.ibm.xtools.comparemerge.emf.emfContentType"
file-extensions="xxx"/>
</extension>
在编写模型到模型变换时,作为输入或输出指定的 Ecore 模型必须具有相应的生成器模型。要创建生成器模型,可以使用“EMF 模型”向导。创建生成器模型 后,请确保生成代码。必须在开发工作台中注册这些生成器模型,否则它们必须在相应 Ecore 模型所在的路径中。生成器模型必须具有 .genmodel 文件扩展名,并且名称必须与 Ecore 相似并使用相同的大小写。否则,变换编写引擎将找不到该生成器模型。如果变换编写引擎找不到所需的生成器模型,则将禁止生成代码。
在为模型到模型变换创建变换配置时,必须指定代表目标模型的文件,甚至可以指定空文件。不能指定 URI 作为目标容器。
要创建空的 Ecore 模型,在变换配置编辑器或向导的首页上,请单击创建新的目标容器按钮,然后指定具有目标模型扩展名的文件。
要集成模型到模型变换来作为 JET(模型到文本)变换的前端,必须以手工方式对变换提供程序中 RootTransformation 的“postProcessing”规则添加 JETRule 框架实例。以下示例提供了变换提供类中必须包括的代码。必须将“xxx”替换为 JET 变换的标识。
/**
* 创建根变换。可以在此处对该变换添加更多规则
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param transform The root transformation
* @generated NOT
*/
protected RootTransformation createRootTransformation(ITransformationDescriptor descriptor) {
return new RootTransformation(descriptor, new MainTransform()) {
protected void addPostProcessingRules() {
add(new JETRule("xxx"));
}
};
}
要生成需要输入或输出 UML 模型的变换,请指定 UML 元模型作为映射规范的根输入和/或根输出。将 UML 概要文件添加到映射规范时,不会自动添加 UML 元模型。
变通方法:通过单击“模型到模型变换映射”向导和编辑器中的“添加模型”按钮来添加 UML 元模型。
如果用户将过滤功能由“基本”切换为“中级”或“高级”方式,接着创建映射,然后再切换回到“基本”过滤方式,则映射连接符的端点可能会消失。这可能会导致映射连接符显示成端点未与任何内容相连接。此问题只影响映射的外观。那些映射以及该变换根据那些映射生成的源代码不受影响。
变通方法:通过指定创建映射时采用的过滤方式,更正映射的外观。
当映射文件不再包含将某个模型的元素指定为映射输入或输出的映射时,将从该映射文件中删除该模型。每当删除映射输入或输出时,都会检查未使用的模型。在映射文件中,为映射输入和映射输出分别维护了模型列表。
变通方法:必须先将该模型添加到该映射文件中,然后才能选择该模型中的元素作为映射输入或输出。在映射编辑器中,请单击添加模型按钮以将该模型添加到该映射文件中。
在所生成的模型到模型变换的变换配置编辑器中,可以在任何合并方式(包括“自动”或“可视”)下指定 runSilent 选项。如果合并方式设置为“自动”或“可视”,并且找到用于该目标模型的融合支持,则 runSilent 选项将强制实施静默合并策略。否则,将使用覆盖合并策略。
在使用概要文件创建从 Ecore 元模型到 UML 元模型的变换映射模型时,应该验证在目标 UML 模型中是否将使用该概要文件的 URI。缺省情况下,将使用映射编辑器中指定的概要文件的 URI。如果指定资源 URI,则会将其转换为等同的插件 URI。
变通方法:可以在属性页上的 profileURI 覆盖属性中指定另一个 URI。在映射编辑器中,单击根部分将显示属性页。注意:如果正在使用已注册的概要文件,并且该概要文件与自动使用的概要文件不同,则可以指定注册该概要文件时使用的 URI。如果未执行此操作,则将导致在资源集中多次装入这个已注册的概要文件,这将引起合并或融合问题。
在模型到模型变换中根据映射模型生成代码时,如果找不到诸如 plugin.xml 和 manifest.mf 之类的基本项目文件,则将生成这些文件。生成这些文件后,可能需要对其进行编辑。
变通方法:
- 如果对映射文件添加输入模型或输出模型,则必须编辑 manifest.mf 文件。请添加输入/输出模型的所生成模型代码所在插件的依赖项。通过添加这些依赖项,应该能够更正由于尝试访问这些插件中的类而引起的编译错误。可以添加对新输入/输出模型的所生成代码所在插件的依赖关系。
- 如果在包含 plugin.xml 和 manifest.mf 文件的 Java 插件中创建映射模型,则必须在 manifest.mf 文件中添加所需的依赖项。请添加对变换编写的依赖关系以及对输入/输出模型的依赖关系。还必须在 plugin.xml 文件中添加 com.ibm.xtools.transform.core.transformationProviders 扩展。