本样本说明如何为模型到模型变换使用图指定输入。本主题阐明了如何运行此类变换和如何设置此类变换。
开始之前
使用“可使用图指定输入的模型到模型变换的设置指示信息”主题中的指示信息来设置样本。
- 在运行时工作台中,检查源和变换配置。
- 展开图和模型并注意图元素和模型元素都包括在源项目中。
- 右键单击运行测试.tc;然后单击。
- 在变换配置编辑器中,单击属性选项卡。 请注意,为属性 DiagramName 指定的值是 Main1,该值是项目中的一个图。
- 在变换配置编辑器中,单击主要选项卡,然后单击运行。
- 检查变换的输出。 如名为 Main1 的输入图中所指定的,输出包括 Class2、Class4 和 Class6。
- 要了解如何设置变换,请检查导入到工作空间中的项目。
- 展开 src,展开 com.ibm.xtools.transform.authoring.examples.classesindiagram,然后打开 TransformationProvider 类 ClassesInDiagramTransformationProvider。
- 请注意,TransformationProvider 类从变换上下文中检索图的名称,并将该名称存储在全局变量中。 代码类似于:
protected RootTransformation createRootTransformation(ITransformationDescriptor descriptor) {
return new RootTransformation(descriptor, new MainTransform() {
@Override
public void execute(ITransformContext context) throws Exception {
diagramName = (String)context.getPropertyValue("diagramname");
super.execute(context);
}
});
}
public static String diagramName = null;
- 展开模型并打开名为 ClassesInDiagram.mapping 的映射文件。
- 在 Model2Model 映射声明中,右键单击第二个 packagedElement-to-packagedElement 子图,并单击在属性中显示。 此子图是 Class2Class 映射。
- 在“属性”窗口中,单击定制抽取器选项卡。 请注意,定制抽取器通过引用所指定的图的内容使用全局变量来确定应处理哪些类。Package2Package 映射声明中的 Class2Class 子图映射的定制抽取器也执行相同操作。
- 在运行时工作台中变换配置编辑器的“属性”页面上,请使用“Main2”替换 diagramName 字段中的值并返回变换。 此时,变换将失败。
变换在配置中命名 Main2 图时失败,因为源模型包含从 Class5 至类的泛化关系;但 Class1 由于没有出现在指定的图中而未能被复制到目标模型。
编写变换时,请注意,变换必须包括包含在同一模型内的所有已引用的对象,从而可以解析所有模型内引用。