發布: 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"));
}
|
文章來源于領測軟件測試網 http://www.kjueaiud.com/