如何在 Eclipse e4 RCP 中将对象从一个部分传递到另一个部分?

How to pass an object from one part to another part in Eclispe e4 RCP?

我正在使用 eclipse e4 RCP 构建应用程序。我有一个导航器(类似于 eclipse IDE 中的导航器),我想 link 它到编辑器(类似于 eclipse IDE 中导航器中的文件是 link编辑)。目前,当用户双击导航器树中的文件时,我正在使用 EPartService 打开我的编辑器部件(通过创建一个新实例)。但我想给它传递一个参数(一个字符串或一个对象),让它知道在编辑器中打开哪个文件。我希望能够为导航树的不同节点打开多个编辑器。我在互联网上做了很多研究,但找不到解决方案。我认为这是一个常见问题,e4 框架应该提供一种机制将此类参数从一个部分传递到另一个部分。当前代码如下:

viewer.addDoubleClickListener(event -> {
        final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
        FileNode file = null;
        boolean partExists = false;
        if (selection.getFirstElement() instanceof FileNode ) {
            file = (FileNode ) selection.getFirstElement();
            for (MPart part1 : partService.getParts()) {
                if (part1.getLabel().equals(file.getName())) {

                    partService.showPart(part1, PartState.ACTIVATE);
                    partExists = true;
                    break;
                }
            }
            if (!partExists) {
                MPart part2 = partService
                        .createPart("com.parts.partdescriptor.fileeditor");
                part2.setLabel(file.getName());
                partService.showPart(part2, PartState.ACTIVATE);
            }
        }
    });

是否可以这样说 part2.setParameter("PARAM_NAME", "FILE_NAME"); ?

当你有 MPart 时,你可以调用:

MPart mpart = ...

MyClass myClass = (MyClass)mpart.getObject();

获取部件的 class(Application.e4xmi 中部件的 'Class URI' 中定义的 class)。然后,您可以调用您定义的任何方法 class.

您也可以在某个部分的'transient data'区域设置数据:

mpart.getTransientData().put("key", "data");

Object data = mpart.getTransientData().get("key");