发布: 2008-6-18 10:11 |
作者: 不详 |
来源:
王 雪, IBM 中国软件开发实验室 SOA设计中心 软件工程师 |
查看: 114次 | 进入软件测试论坛讨论
领测软件测试网
4.4 定义转换规则(TransformationRule)
JET模板将Jacl脚本代码化,便于在后面的代码实现过程中调用。要实现SIBUS模型到Jacl脚本的转换,我们还需要定义若干转换规则。实际上,转换逻辑的实现正是封装在这些转换规则中,负责将源模型转化为目标模型或者部件的。转换规则的实现类实现了模型转换框架中提供的com.ibm.xtools.transform.core.AbstractRule接口。
这里,我们可以将所有的转换逻辑写在一条转换规则中,但是,为了代码编写的模块性和规范性,我们定义了若干转换规则,每条规则实现了逻辑上相对独立的一部分转换功能,若干条规则组合在一起实现整个转换功能。本例中,我们定义了七条转换规则:创建总线规则(CreateBusRule), 添加总线成员规则(AddBusMemberToBusRule), 创建目标规则(CreateDestinationRule),创建调解规则( CreateMediationRule),创建JMS连接工厂规则(CreateJMSConnectionFactoryRule), 创建JMS激活规范规则(CreateJMSActivationSpecificationRule),创建JMS队列规则(CreateJMSQueueRule)。每条转换规则都利用当前转换上下文(ITransformContext)中的源(Source),获取其相关属性,调用JET模板生成的Java类的generate方法,生成相应的Jacl脚本片断。清单3列出了CreateBusRule的部分源代码(其他规则源代码,请参阅附件Sibus2JaclTranRules.zip)。
清单 3. CreateBusRule部分源代码
protected Object createTarget(ITransformContext context) throws Exception {
Object src = context.getSource();
NamedElement busEle = (NamedElement)src;
String busName = new String();
busName = busEle.getName();
StringBuffer jaclContent = new StringBuffer();
Map map = new HashMap();
map.clear();
map.put("busName",busName);
jaclContent.append(new CreateBus().generate(map));
return new String(jaclContent.toString());
}
|
在定义了所有的转换规则之后,根据转换的先后顺序,将以上规则添加到转换(Transform)中,在本例中,我们定义了一个扩展至UMLTransform的转换SIBusToJaclMainTransform,并在该转换的initialize()方法中,按照部署和配置顺序添加了以上规则,清单4列出了initialize()方法的部分源代码。
清单 4. initialize()方法的部分源代码
private void initialize() {
add(new CreateBusRule(CreateBusRule.ID, "CreateBusRule"));
add(new AddBusMemberToBusRule(AddBusMemberToBusRule.ID,
"AddBusMemberToBusRule"));
add(new CreateDestinationRule
(CreateDestinationRule.ID, "CreateDestinationRule"));
add(new CreateJMSActivationSpecificationRule
(CreateJMSActivationSpecificationRule.ID,
"CreateJMSActivationSpecificationRule"));
add(new CreateJMSConnectionFactoryRule
(CreateJMSConnectionFactoryRule.ID,
"CreateJMSConnectionFactoryRule"));
add(new CreateJMSQueueRule(CreateJMSQueueRule.ID, "CreateJMSQueueRule"));
add(new CreateMediationRule(CreateMediationRule.ID,
"CreateMediationRule"));
}
|
文章来源于领测软件测试网 https://www.ltesting.net/