对于映射模型中的每个映射声明,变换编写框架将生成名为 nTransform.java 的 Java™ 源文件,其中 n 表示映射声明的名称。 这些 Java 文件一起组成变换代码。除了生成变换的实现代码之外,变换编写框架还生成代码以向变换服务注册变换。在创建映射声明之后,可以增量式添加映射规则以及生成映射规则的源代码或实现。不必在生成源代码之前定义所有映射规则。
映射声明通常遵循以下命名约定:x2y,其中 x 表示输入对象类型,而 y 表示输出对象类型。例如,名为 Package2EPackage 的映射声明指定使用 Package 作为输入对象和使用 EPackage 作为输出对象的映射声明。
元素之间的映射建立其属性之间的对应关系,这样它们之间可以交换数据。大多数映射能够进一步处理源和目标之间的数据。例如,通过创建将值指定给目标的定制代码,可以选择指定计算或对数据进行其他修改。
要在映射模型中创建“类到类”映射声明,请完成下列步骤:


在将输入/输出对象添加至映射声明之后,就可以定义属性之间的映射规则了。映射规则也称为映射,指定如何根据输入对象的属性值将值指定给输出对象的属性。
创建输入/输出对象的 name 属性之间的映射规则。目标类的名称与输入模型中类的名称相同;也可以将此操作看作创建类的副本。在后面的课程中,将把映射操作添加至映射规则。
可以创建输入/输出对象的 ownedOperation 属性之间的子映射映射规则。对于 ownedOperation 集合中的每个操作,目标模型中生成的操作的 name 和 visibility 将与输入模型中操作的 name 和 visibility 相同。
子映射是从一个映射中调用另一个映射。被调用的子映射可以(但不一定)在定义调用它的映射的同一映射文件中定义。 子映射使您能够将输入模型中的复杂类型映射至输出模型中的复杂类型。您创建的子映射可以调用存在于任何映射文件中的映射。 在独立的映射文件中定义子映射鼓励复用映射;但是,创建多个映射文件可能会增加项目维护难度。子映射也可包括其他子映射,这会生成分层结构。
还可以在映射声明中的输入对象和输出对象之间创建子映射映射规则。
对于映射声明中的每个子映射,将在包含变换中生成名为 getInputFeatureToOutputFeature_UsingMap_Extractor 的抽取器,其中 InputFeature 表示输入属性的名称,OutputFeature 表示输出属性的名称,而 Map 表示映射声明的名称。
被继承的映射规则以及根据该映射生成的规则或抽取器,就处理顺序中的相对位置而言,与被覆盖的映射规则及其生成的规则或抽取器一致。
对于映射声明中的每个移动或定制映射规则,会将规则添加至生成的变换源代码。对于每个子映射映射规则,将在变换源代码中生成内容抽取器。 创建映射规则时,其类型由您选择的输入/输出属性确定。例如,如果输入/输出属性与基本类型兼容,如字符串或整数,请指定移动映射规则。如果输入/输出属性是复杂类型,请指定子映射规则。如果移动和子映射都不是适当的映射规则类型,请指定定制映射规则。
要在 Class2Class 映射声明中定义映射规则,请完成下列步骤:
在本课程中,此时,在编辑器区域中,子映射具有有红色圆圈圈起来的 X(表示错误)的修饰符。将鼠标指针放在此修饰符上以查看错误消息。错误消息说明必须选择要调用的子映射映射规则的映射声明。要解决此错误,可创建“操作到操作”映射声明。
要创建“操作到操作”映射声明,请完成下列步骤: