我使用轉換引擎在運行時創建Ecore元模型,我想知道如何使用EMF註冊元模型以便它可以識別元模型?以編程方式註冊Ecore元模型
9
A
回答
16
如果您已通過您的元模型生成的代碼:
resourceSet.getPackageRegistry()
.put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI()
, org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE);
(這裏的 「的genmodel」 元模型)
如果你只有.ecore
文件:
// register globally the Ecore Resource Factory to the ".ecore" extension
// weird that we need to do this, but well...
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
"ecore", new EcoreResourceFactoryImpl());
ResourceSet rs = new ResourceSetImpl();
// enable extended metadata
final ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(rs.getPackageRegistry());
rs.getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA,
extendedMetaData);
Resource r = rs.getResource(uriOfYourModel, true);
EObject eObject = r.getContents().get(0);
if (eObject instanceof EPackage) {
EPackage p = (EPackage)eObject;
rs.getPackageRegistry().put(p.getNsURI(), p);
}
您可以使用名爲registerEcorePackages()
的方法找到更多關於此代碼here的信息,u sed在我們的定製軟件包註冊表中註冊工作空間中的.ecore
文件(使用其工作空間的完整路徑)。如果您想在EMF全局包註冊表中註冊您的元模型,請用EPackage.Registry.INSTANCE
替換resourceSet.getPackageRegistry()
。
1
我不得不@sbegaudeau修改代碼一點,它的工作:
更換
rs.getPackageRegistry().put(p.getNsURI(), p);
與
EPackage.Registry.INSTANCE.put(p.getNsURI(), p);
而且,不知爲什麼我不能註冊.ecore類型。必須使用「*」:Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());
相關問題
- 1. XText以編程方式將DSL腳本解析爲Ecore模型
- 2. 註冊在獨立Ecore模型的Java應用程序
- 3. 以編程方式註冊taglib參考
- 4. 以編程方式註冊星號
- 5. Drupal 7:實體註冊模塊:默認或以編程方式啓用註冊
- 6. 春編程方式註冊RequestMapping
- 7. 如何以編程方式註冊自定義URL方案?
- 8. 以編程方式註冊Sharepoint 2007事件處理程序
- 9. 以編程方式在Azure上註冊應用程序AD
- 10. 程序內購買以編程方式註冊新產品
- 11. 以編程方式在註冊表中註冊性能計數器
- 12. 以編程方式創建django模型
- 13. 以程序方式註冊條紋webhook
- 14. 導航ecore模型
- 15. 用ecore元模型生成xtend2代碼
- 16. 以編程方式禁止註冊表虛擬化
- 17. 如何以編程方式在WebApplicationInitializer中註冊多個servlet?
- 18. 以編程方式註冊C#/ VB.NET COM dll
- 19. 以編程方式創建註冊表項
- 20. Excel Interop不會以編程方式註冊我的工作簿
- 21. 如何以編程方式在Spring中註冊FactoryBean的實例
- 22. 無法在Swift 3中以編程方式註冊字體
- 23. 以編程方式訪問註冊表時出現問題
- 24. 以編程方式從SDK註冊實例到AWS OpsWorks Stack
- 25. 在運行時以編程方式註冊HttpModules
- 26. 在Jetty 7中以編程方式註冊Servlet
- 27. 無法以編程方式讀取某些註冊表項
- 28. 以編程方式移動註冊表鍵
- 29. 如何以編程方式註冊域名?
- 30. 如何以編程方式註冊XLL加載項?
非常感謝您的回答Stephane :) – capint 2012-02-22 12:21:04
SUPERB ANSWER !!!!!!非常感謝Stephane!不能感謝你足夠的.....「ecore文件」技術是我正在尋找的! – 2012-06-14 19:38:32
嗨,真棒謝謝你!我不得不稍微修改一下代碼以使其工作。詳情請看我的答案。 – Andrei 2015-04-30 13:34:25