首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式注册Ecore元模型

以编程方式注册Ecore元模型
EN

Stack Overflow用户
提问于 2012-02-22 06:31:13
回答 2查看 6K关注 0票数 10

我使用转换引擎在运行时创建一个Ecore元模型,我想知道如何向EMF注册该元模型,以便它可以识别该元模型?

EN

回答 2

Stack Overflow用户

发布于 2012-02-22 14:07:46

如果你有由你的元模型生成的代码:

代码语言:javascript
复制
resourceSet.getPackageRegistry()
  .put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI()
     , org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE);

(这里是"genmodel“元模型)

如果您只有.ecore文件:

代码语言:javascript
复制
// 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的更多信息,该方法用于在我们的自定义包注册表中注册工作区中的.ecore文件(及其工作区完整路径)。如果您想在EMF全局包注册表中注册您的元模型,请用EPackage.Registry.INSTANCE替换resourceSet.getPackageRegistry()

票数 17
EN

Stack Overflow用户

发布于 2015-04-30 21:38:34

我不得不对@sbegaudeau中的代码进行了一些修改,才能让它正常工作:

替换

rs.getPackageRegistry().put(p.getNsURI(), p);

使用

EPackage.Registry.INSTANCE.put(p.getNsURI(), p);

另外,不知何故我不能注册.ecore类型。不得不使用"*":Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9386348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档