【问题标题】:List all available models in EMF application列出 EMF 应用程序中的所有可用模型
【发布时间】:2013-04-16 20:09:17
【问题描述】:

我正在开发一个由两个 Eclipse 插件项目组成的项目。一个是 EMF 项目,包含应用程序的元模型。另一个是处理该元模型的实际插件。

我现在正在寻找一种方法来列出元模型项目中可用的所有模型类型。因为我基本上需要所有生成的类,所以我可以使用反射来遍历元模型包,但如果有的话,我更喜欢更简单的方法。

这些模型已经在plugin.xml 中列为扩展,如下所示:

<plugin>
    <extension point="org.eclipse.emf.ecore.generated_package">
        <package
            uri="MyModel"
            class="org.myproject.metamodel.MyModel.MyModelPackage"
            genModel="model/MetaModel.genmodel"/>
    </extension>
</plugin>

MyModelPackage 扩展EPackageorg.myproject.metamodel.MyModel 还包含我需要列出的所有其他生成的类。我猜我可以使用该信息,但我仍然不知道如何使用。

更新

我正在进行的项目基于EMFStore。运行它会提供 EMFStore 透视图。如果我有一个项目的导航器视图,我可以右键单击该项目并选择New Model Element。这将打开一个对话框,其中列出了我的元模型中的所有模型元素,因此它是可能的。它必须在 EMFStore 或其依赖项之一中的某个地方完成。我查看了源代码,但似乎找不到它在哪里完成。

项目org.eclipse.emf.emfstore.perspectiveplugin.xml 指的是我在源代码中找不到的类org.eclipse.emf.emfstore.emfperspective.EMFStorePerspective。我通过 Eclipse 导入插件和片段功能导入了项目,它没有源文件夹。在 EMFStore git 存储库中,我什至找不到那个项目。

更新

我现在得到了包含使用EPackage.Registry.INSTANCE 生成的包的注册表。不幸的是,它包含的不仅仅是包含元数据的一个项目中的 EPackages (org.myproject.metamodel)。现在我只是在寻找一种适当的方法来过滤它,但仍然无法掌握它。

更新

由于过滤不是我最初问题的一部分,我接受了@SpaceTrucker 的回答。对于那些好奇的人,这就是我现在的做法:

Registry registry = EPackage.Registry.INSTANCE;
for (String key : new HashSet<String>(registry.keySet())) {
    EPackage ePackage = registry.getEPackage(key);
    if (ePackage.getClass().getName().startsWith("org.myproject.metamodel")) {
         //do stuf
    }
}

我没有找到过滤项目的方法,但幸运的是所有包都以相同的前缀开头。

【问题讨论】:

    标签: eclipse-emf emf


    【解决方案1】:

    EPackages 可以通过EPackage.Registry 注册。似乎有一个全球使用的实例可通过ECorePlugin.getDefaultRegistryImplementation() 获得。但是,我对此不是 100% 确定的。

    MoDisco 带有一个 EMF 模型浏览器,您还可以在其中选择任何已注册的 EMF 模型。所以你也可以看看这些来源。

    【讨论】:

    • 听起来很有希望。该项目已经依赖于 MoDisco。几天后我才能再次调查,但在此先感谢。
    • ECorePlugin.getDefaultRegistryImplementation() 返回null 但您的回答为我指明了正确的方向。我现在更进一步,将编辑我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2012-07-04
    • 1970-01-01
    • 2013-11-30
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多