我使用轉換引擎在運行時創建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. 如何以編程方式註冊GuiceFilter?
- 4. 以編程方式註冊taglib參考
- 5. 以編程方式註冊星號
- 6. 以編程方式檢查統一容器類型註冊
- 7. Traverse ecore模型
- 8. 春編程方式註冊RequestMapping
- 9. 如何以編程方式註冊自定義URL方案?
- 10. 程序內購買以編程方式註冊新產品
- 11. 以編程方式在Azure上註冊應用程序AD
- 12. 以編程方式註冊Sharepoint 2007事件處理程序
- 13. 以編程方式在註冊表中註冊性能計數器
- 14. Yii2以編程方式生成模型
- 15. 以編程方式創建django模型
- 16. 以程序方式註冊條紋webhook
- 17. Eclipse:如何以編程方式將UML轉換爲ecore
- 18. 如何以編程方式創建ecore文件的實例
- 19. 用ecore元模型生成xtend2代碼
- 20. 以編程方式訪問註冊表時出現問題
- 21. 如何以編程方式註冊XLL加載項?
- 22. 以編程方式移動註冊表鍵
- 23. 以編程方式註冊C#/ VB.NET COM dll
- 24. 無法以編程方式讀取某些註冊表項
- 25. 如何在ASP.NET MVC 5中以編程方式註冊RoleProvider?
- 26. 無法在Swift 3中以編程方式註冊字體
- 27. 以編程方式註冊DirectChannelMetrics作爲JMX Bean
- 28. 如何以編程方式在WebApplicationInitializer中註冊多個servlet?
- 29. 以編程方式註冊在Android的接收器和服務
- 30. Excel Interop不會以編程方式註冊我的工作簿
非常感謝您的回答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