前面對Acceleo的知識背景和基本架構進行了講解,接下來就將開始模型到代碼的生成了。本講將逐步講解一個簡單的代碼生成模塊(UML to Html)。Acceleo的代碼生成是基於模板的,所以有了輸入模型(如UML)后,需要建立對應模型的模板,然后生成代碼。原理如圖1所示。
圖1 基於模板的Acceleo
1、新建項目
首先,切換到Acceleo視圖,新建generator project。此處,我們可以命名為“acceleo.uml2.gen.xhtml”。接下來,我們需要輸入模型。
2、建立模型
目前,可用的建模工具有很多,Acceleo提供了很好的機制來兼容這些不同的建模工具,可以兼容ArgoUML, Poseidon, Umbrello or Rational Rose等。更多兼容工具請參考點擊此處。
此處,我們暫時用Topcased新建了一個UML2模型,可以點擊下載WebLog_fr.uml。
注意:Acceleo也兼容UML1.3/1.4,用戶可以通過Acceleo-->Convert EMF轉為將其轉換為UML2。
3、建立模板
有了模型之后,我們就需要建立模板來將模型轉換成代碼了。通過 Empty Generator新建空的模板。
因為我們的源模型是UML2,所以我們在Registry values選擇UML2的URI(統一資源標識符),假設此處我們想要為每個class生成一個文件,需要在type values選擇uml.class。完成后就生成了一個空的模板,如圖2所示。
圖2 空的UMl2模板
4、生成代碼
在生成代碼之前,先介紹acceleo的一種特殊的編輯器 reflective editor,它提供了一種模型的樹狀結構視圖,並集成了Acceleo的幾乎所有功能。我們將在此編輯器下將UML2模型生成HTML。在acceleo中,可以通過 Open As->Acceleo XMI打開此編輯器。
接下來比較重要的一步,就是將模型與模板綁定,即指定模型用哪個模板。在reflective editor下,任意選擇一個目標結點,通過Acceleo -> Select Template為此模型結點指定模板,當指定成功后,在outline視圖中,相應結點(如此處的class)會變成帶右箭頭的圖標,如圖3所示。圖3表示class的模板綁定成功,可以將class生成代碼。
圖3 模板綁定成功后,相關結點圖標變成箭頭
當然,前面我們建立的模板是空的,所以class生成的代碼也是空的。所以需要將模板寫全,圖4是寫全后的模板,可以點擊此處下載sample template from UML2 to XHTML。關於的模板的更多語法,大家可以參考documentation section 和 sample generator modules。
圖4 UML to HTML的模板
當模板寫全並保存后,通過Acceleo -> Reload Template 更新模板。如此反復,直到模板能夠滿足自己的要求。
最后也就是最重要的一步,就是生成代碼了。通過Acceleo -> Generate files可以將代碼生成到文件中(此處,我們設置文件保存在doc文件夾下)。我們可以看到,acceleo為每個class生成了一個文件,如圖5所示。
圖5 class模板生成的html代碼
5、批量代碼生成
上面完成了單個模板到代碼的生成,如果模型很多呢?不用擔心,acceleo提供了批量生成的功能,即鏈文件(chain files)。
- 新建項目:New -> Project -> Simple -> Simple Project
- 新建鏈:New -> Chain
- 定制元模型,如第3步所示。
- 選擇鏈的模型、模板和名字。
- 在新建的.chain文件下,右擊執行Launch,文件即自動生成了。
6、總結
本講從一個簡單的代碼生成器(UML to HTML)開始,介紹了其使用流程,並講了批量模型生成的情況,下一講我們開始介紹acceleo模板的語法,以便大家設計自己需要的模板。