eclipse emf_构建一个Eclipse插件来浏览EMF模型中的内容

eclipse emf

通常,EMF项目资源(例如EMF Ecore模型)在查看器中显示为单个对象(请参见图1的左侧)。 这样做的局限性在于,如果不打开关联的编辑器就无法浏览模型。 当开发依赖于领域模型时,这可能尤其有害。 解决此问题的一种方法是建立一个自定义视图,该视图将提供对所需域模型内容的访问。 我们可以从头开始构建此插件,也可以使用现有框架来简化开发工作。 以下概述并详细介绍了创建此类插件的过程。 在本文的最后,我们将提供一个查看器插件,该插件可用于导航Ecore模型(请参见图1的右侧)。

图1.导航器的类型
导航器的类型

背景

我们知道从这个ModelNavigator插件中可以获得什么,但是在继续进行开发之前,我们需要对将要使用的Eclipse组件有基本的了解。 我们想要构建一个显示模型层次结构的树查看器。 树查看器的详细信息不在本文讨论范围之内; 有关更多详细信息,请参见参考资料 。 要注意的一个重要方面是,树查看器通过称为内容提供程序的适配器访问模型对象,并确定应如何通过标签提供程序将对象可视化。 以下各节详细介绍了如何访问内容和标签提供者的数据,以及如何显示模型导航器。

EMF.Edit框架

EMF.Edit框架通常用于构建EMF模型的编辑器。 为了构建这些编辑器,该框架提供了命令代码生成功能和其他类,以提供对模型的编程访问。 该框架提供的另一组功能(对我们而言最重要)是方便使用的类,这些类允许在查看器中显示EMF模型。 该框架通过通用内容和标签提供程序提供此访问,这些内容和标签提供程序使用特定类型的EMF对象的适配器来显示模型。 这些是AdapterFactoryContentProviderAdapterFactoryLabelProvider类,它们通过委派给知道如何导航EMF模型的项目提供程序适配器来向EMF对象的查看器提供对象,标签和图像。 此方案如图2所示。它对我们的项目特别有用,因为它使我们不必知道如何使模型适应视图。 我们只是委托给这些通用提供程序。

图2.改编自Eclipse帮助的EMF.Edit
EMF.Edit改编自Eclipse帮助

该框架包含用于各种EMF模型类型的这些项目提供程序。 但是,我们大多数人都不想为每种模型类型构建单独的导航器。 我们想要从同一导航器访问所有模型内容。 这是组成适配器工厂的地方。它将通过提供一个适配器工厂来显示来自多个EMF模型的对象,该适配器工厂能够适应来自多个模型的对象的并集。

ComposedAdapterFactory类是EMF.Edit便利类中的另一个,它充当与其他适配器工厂的公共接口。 正如我们稍后将看到的那样,这样做的优点是,导航器只需要包含我们感兴趣的模型类型的项目提供程序,即可作为组合适配器工厂的一部分。 然后,组成的适配器工厂仅将其实现委派给这些其他提供程序。 例如,我们可以使导航器为生成器模型,Ecore模型,UML模型等提供显示。当我们的查看器尝试显示这些模型时,内容和标签提供者将仅委托给适配器工厂,然后委托给适配器工厂。适当的项目提供者,这使我们的开发工作更加轻松,并使ModelNavigator得以扩展以支持多个领域模型。

通用导航器框架

现在,我们有了一个完整的框架,可以在ModelNavigator中访问模型内​​容,我们需要的另一个组件是将放置导航器的实际查看器。 可以扩展视图插件并实现我们自己的视图部分,该部分将在树形视图中显示所需的内容。 但是,已经存在一个框架,用于将来自各个域的内容组合到单个视图中,从而允许用户在查看器中操纵和导航编辑器模型。 该框架在Eclipse V3.2中作为CNF org.eclipse.ui.navigator引入,并允许开发人员为单个导航器贡献内容,标签,操作,过滤器和其他功能。 它提供了一种集成导航查看器并提供统一用户体验的方法。

CNF为所有编辑器模型集成商支持一个查看器,允许非资源驱动的模型内容,并允许用户选择要在其集成的查看器中查看的内容。 org.eclipse.ui.navigator.resources插件是该框架在运行的示例,我们以Project Explorer视图的形式对其进行了演示。 它为IResource模型提供了声明式查看器扩展。 该框架为我们提供了构建查看器的最快方法,它处理了查看器实现的细节,仅要求我们为模型实现内容和标签提供程序。 它还提供了将插件扩展到其他模型内容的空间,并可以利用查看器中框架的更高级功能(例如,排序器,过滤器,拖放操作等)。

现在,我们准备好查看这些组件的运行情况,并开始创建模型导航插件。

简单的导航器

要创建我们的ModelNavigator,我们将采用两步法。 首先,我们设置插件的基本结构并定义其行为。 然后,我们将扩展这个简单的插件以显示EMF模型内容。

ModelNavigator项目

创建我们的ModelNavigator的第一步是创建一个插件项目。 为此,我们使用新的项目向导: File> New> Project ,选择Plug-in Project ,然后单击Next

我们将命名我们的插件项目ModelNavigator ,将插件ID设置为com.ibm.navigator.example.modelnavigator ,将激活器设置为com.ibm.navigator.example.modelnavigator.ModelNavigatorPlugin ,然后单击Finish

图3.创建插件项目
创建插件项目

创建视图

我们准备开始开发我们的插件。 第一步是创建将容纳我们的导航器的视图。 为此,我们在插件中进行了必要的扩展,以创建视图部件和将在其中显示视图的类别。 在插件xml文件中,我们添加了视图扩展。

在扩展标签中:

  • 点击添加
  • 扩展点选项卡下,选择org.eclipse.ui.views
  • 创建类别:
    • 右键单击org.eclipse.ui.views扩展
    • 选择
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值