2012-04-09 79 views
0

大家好,我很新推出從java應用調用acceleo模板

在我的項目中,我有一個調用不同加速器模板的java驅動類。一些模板的參數沒有任何EObject類型。我調用了爲模板調用生成的java模塊的initialize()和doGenerate()函數。所面臨的問題是:

  1. initialize()期望第一個參數是Ecore對象,其餘參數是List。不過,正如我提到的一些模板沒有任何EObject參數。我如何從Java應用程序中調用這樣的模板?

  2. 要解決上述問題,我調整了我的驅動程序和模板,將虛擬EObject作爲第一個參數。然後它會成功調用模板,但不會生成任何輸出。如果我從另一個驅動程序模板調用它們,模板會生成輸出。但是我不想在MTL中編寫我的驅動程序,因爲它需要複雜的數據模型分析。

請教我如何在我的情況下取得進展。

感謝&問候
Dhanunjaya M.

回答

1

我們通過我們產生「主」模板模塊和Acceleo‘門面’類旁總是Java類在默認情況下暴露API假設有一個EObject作爲要被調用的模板的第一個參數。這是爲了便於大多數用例的使用(我們預計這個用例佔總數的90%)。

對於其他用例,您將不得不使用幕牆背後的API。也就是說,您可以創建另一個「初始化」方法,當您沒有這個方法時,這些方法不會將EObject作爲這些情況的參數。然後,您還需要重寫「generate(Monitor)」方法,以便它不使用AcceleoService.doGenerate ...或其他任何AcceleoService方法:這是我正在討論的「facade」類。

你需要的是調用一個方法來模擬AcceleoService.doGenerate的功能,而不依賴於EObject來找到需要調用的模板。如果您手邊沒有Acceleo的SDK或源代碼,您可以通過github:AcceleoService#doGenerate來查看代碼。