使用e3x属性视图和EMF模型

时间:2016-08-25 09:29:29

标签: eclipse-rcp e4 eclipse-emf

我构建了一个小型e4 RCP应用程序,其中包含由emf生成的模型代码(使用ComposedAdapterFactory)和“e3属性视图”填充的“e4 xmi”树视图。

尝试使用“dirksmetric教程”在application.e4xmi(共享元素)中显示具有空属性视图的属性视图。

为了获得我的属性表(IItemPropertySource)中显示的树的选定元素,我做了以下事情:

  • 在我的e4 treeviewer端,我使用#createComposite中的e4选择服务:

    //将查看器注册为选择提供程序(由属性视图使用...) viewer.addSelectionChangedListener(new ISelectionChangedListener(){ @覆盖 public void selectionChanged(SelectionChangedEvent event){ IStructuredSelection selection =(IStructuredSelection)event.getSelection(); //将选择设置为服务 selectionService.setSelection( selection.size()== 1? selection.getFirstElement():selection.toArray()); } });

  • 在e3“经典”属性表方面,我定义了几个方面:

    1. 我在ApplicationWorkbenchAdvisor#initialize。
    2. 中调用了IDE.registerAdapters
    3. 我在plugin.xml中声明了我的属性源适配器:
    4. extension point =“org.eclipse.core.runtime.adapters”> factory adaptableType =“org.eclipse.emf.ecore.EObject” 类= “myappmodeler.properties.ModelPropertiesAdapter” > adapter type =“org.eclipse.ui.views.properties.IPropertySource”>

      1. My ModelPropertiesAdapter#getAdapter返回属性源:
      2. public Object getAdapter(Object adaptableObject,Class adapterType){ if(adapterType == IPropertySource.class&& adaptableObject instanceof EObject){ emfGlobalFactory = new ComposedAdapterFactory(); emfGlobalFactory.addAdapterFactory(new RepositorystructureItemProviderAdapterFactory()); emfGlobalFactory.addAdapterFactory(new ApplicationItemProviderAdapterFactory()); emfGlobalFactory.addAdapterFactory(new ServiceItemProviderAdapterFactory()); 返回新的AdapterFactoryContentProvider(emfGlobalFactory).getPropertySource(adaptableObject); } return null; }

我的问题是这个适配器甚至没有被执行。

目前正在使用Eclipse neon(它最近更新为同步E3和E4选择服务) https://bugs.eclipse.org/bugs/show_bug.cgi?id=403930

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题,但对于我的情况,这些是步骤

我采取了这些步骤来解决我的问题

  1. 控制基本模型 - 创建一个扩展EObject
  2. 的界面
  3. 创建自定义属性提供程序,源和描述符 - 扩展org.eclipse.emf.edit.ui.provider.*
    • 在运行时我们需要IItemPropertySource
  4. 创建内容提供程序类(扩展AdapterFactoryContentProvider)并使用自定义属性源覆盖createPropertySource
  5. 注;我还开发了一个表格布局,这意味着为模型中的各个元素实现自定义ItemProvider(实现ITableItemLabelProvider
  6. ESelectionService

    完美配合

    希望这些笔记可以帮助某人