eclipse emf
通常,EMF项目资源(例如EMF Ecore模型)在查看器中显示为单个对象(请参见图1的左侧)。 这样做的局限性在于,如果不打开关联的编辑器就无法浏览模型。 当开发依赖于领域模型时,这可能尤其有害。 解决此问题的一种方法是建立一个自定义视图,该视图将提供对所需域模型内容的访问。 我们可以从头开始构建此插件,也可以使用现有框架来简化开发工作。 以下概述并详细介绍了创建此类插件的过程。 在本文的最后,我们将提供一个查看器插件,该插件可用于导航Ecore模型(请参见图1的右侧)。
图1.导航器的类型
背景
我们知道从这个ModelNavigator插件中可以获得什么,但是在继续进行开发之前,我们需要对将要使用的Eclipse组件有基本的了解。 我们想要构建一个显示模型层次结构的树查看器。 树查看器的详细信息不在本文讨论范围之内; 有关更多详细信息,请参见参考资料 。 要注意的一个重要方面是,树查看器通过称为内容提供程序的适配器访问模型对象,并确定应如何通过标签提供程序将对象可视化。 以下各节详细介绍了如何访问内容和标签提供者的数据,以及如何显示模型导航器。
EMF.Edit框架
EMF.Edit框架通常用于构建EMF模型的编辑器。 为了构建这些编辑器,该框架提供了命令代码生成功能和其他类,以提供对模型的编程访问。 该框架提供的另一组功能(对我们而言最重要)是方便使用的类,这些类允许在查看器中显示EMF模型。 该框架通过通用内容和标签提供程序提供此访问,这些内容和标签提供程序使用特定类型的EMF对象的适配器来显示模型。 这些是AdapterFactoryContentProvider
和AdapterFactoryLabelProvider
类,它们通过委派给知道如何导航EMF模型的项目提供程序适配器来向EMF对象的查看器提供对象,标签和图像。 此方案如图2所示。它对我们的项目特别有用,因为它使我们不必知道如何使模型适应视图。 我们只是委托给这些通用提供程序。
图2.改编自Eclipse帮助的EMF.Edit
该框架包含用于各种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扩展
- 选择