`

核心运行时-IAdaptable

 
阅读更多

以属性视图为例。

eclipse核心运行时组件提供了eclipse类型扩展机制。我们以属性视图显示属性的工作方式来展示。

 

显示属性动作涉及两个参与者:property视图和被选中的对象。property视图需要通过接口知道被选中对象的属性,被选中的对象则要提供这个接口。property视图要求的接口是IPropertySource

一、最直接的方法是让被选中的对象实现IPropertySource接口。但存在以下几个问题:

给类添加大量这样接口,显得臃肿;“某个类实现了某项服务”应该是一个实现的细节,我们不希望暴漏出去;最重要的是我们的对象不应该知道property视图的存在。实现模型与UI的解耦合。

二、我们通过某种机制,这种机制能使得我们给一个类添加服务接口,但有不在该类本身的接口上暴漏出来。而且能给现有的类添加行为(方法),同时还不给类添加状态(字段)。最关键的是如何描述、识别这个扩展。

基于上两点,采用eclipse中的IAdaptable扩展支持。该接口只有一个方法,使用者可以通过此方法动态的查询一个对象是否支持某个特定的接口。

eclipse中使用IAdaptable接口的方式有两种:一种是修改现有类的getAdapter()方法,这种方式显而易见直接有if判断参数返回一个adapter就可;另一种是不修改现有方法,getAdapter()通过工厂来实现(从外部扩展现有类的接口)

下面就来看看如何实现第二种方式:

在程序启动的XXXPluginstart()方法中,我们写下

IAdapterManager manager = Platform.getAdapterManager();

propAdapterFactory = new PropAdapterFactory();

manager.registerAdapters(propAdapterFactory, MyObject.class);

……

其中MyObject就是我们要显示其属性的对象类型。propAdapterFactory是产生该对象属性adapter的工厂。我们让这个工厂实现IAdapterFactory接口。在工厂的getAdapterList()注册接口类型(如:return new Class[]{IPropertySource.class …}.getAdapter()中返回的对象需要实现IPropertySource接口。

现在工厂有了,我们怎么能适配器工厂参与到getAdapter()调用中呢?我们修改对象类型MyObject中的getAdapter()方法,方法体如return Platform.getAdapterManager().getAdapter(this,adapter);

另外:在eclipse开发过程中,曾使用以下语句与属性视图交互过。

// 与属性视图交互

 PropertySheet ps = (PropertySheet)getViewSite(). getActiveWorkbenchPage().findView(IPageLayout.ID_PROP_SHEET);

if (null != ps)

{

  ps.selectionChanged(MyView.this, new StructuredSelection(myObject)); }

当然这个myObject的类有一个myObjectFactory来产生MyObjectAdapter的对象。为了在属性视图中显示的属性按一定的顺序排列,在MyView中的getAdapter()中还要加上:

if (adapter == IPropertySheetPage.class)

{

      returnnew MyObjectPropertySheetPage();

 }

在类的creatControl()方法体中加setSorter(new PropertySheetSorter());

如果不加,属性将按照a-z的方式排列。

分享到:
评论

相关推荐

    IJavaProject、IJavaElement、IAdaptable的作用域

    在Eclipse的世界里,理解"IJavaProject"、"IJavaElement"和"IAdaptable"这三个核心接口至关重要,因为它们是构建Eclipse插件和进行代码操作的基础。本文将深入探讨这三个接口的作用域及其在实际开发中的应用。 首先...

    Eclipse-Adapters

    当我们调用`macintosh.getAdapter(IOrange.class)`时,系统会尝试找到一个将`IApple`转换为`IOrange`的适配器。如果没有找到这样的适配器,`getAdapter`方法将返回`null`。 #### 五、应用场景 Eclipse Adapters的...

    eclipse 属性视图开发

    当用户选择了某个文件或文件夹时,属性页会自动更新以显示该对象的相关属性。这种响应机制是由当前激活的Part中的`ISelectionProvider`接口实现的。每个Part都有一个类似于`PartSite`的组件,可以通过将实现`...

    基于适配器模式的RCP应用属性视图实现

    首先,我们要理解适配器模式的核心思想。适配器模式通过创建一个适配器类,将旧的或不兼容的接口转换成我们期望的新接口,从而使原本无法协同工作的组件得以协同工作。在Eclipse RCP中,适配器模式常用于连接不同...

    dotnetfx45_full_x86_x64.exe

    dotnetfx45_full_x86_x64

    easymock2-javadoc-2.5.2-12.el7.x64-86.rpm.tar.gz

    1、文件内容:easymock2-javadoc-2.5.2-12.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/easymock2-javadoc-2.5.2-12.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    2025最新会计电算化(用友ERP)考试题及答案.docx

    2025最新会计电算化(用友ERP)考试题及答案.docx

    通过核正交匹配追踪 (KOMP) 和 KSOMP 进行高光谱图像分类Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    easymock-1.2-22.el7.x64-86.rpm.tar.gz

    1、文件内容:easymock-1.2-22.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/easymock-1.2-22.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    7-Zip Mark-of-the-Web绕过漏洞 (CVE-2025-0411)

    7Zip Web标记绕过漏洞 (CVE-2025-0411)poc及MinGW-w64编译器

    2025最新医疗器械经营监督管理办法培训试题及答案.doc

    2025最新医疗器械经营监督管理办法培训试题及答案.doc

    使用神经网络进行字符识别Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    fedfs-utils-python-0.10.5-0.el7.x64-86.rpm.tar.gz

    1、文件内容:fedfs-utils-python-0.10.5-0.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/fedfs-utils-python-0.10.5-0.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    NURBS曲面片的混合与填充.pdf

    NURBS曲面片的混合与填充.pdf

    docbook-style-xsl-1.78.1-3.el7.x64-86.rpm.tar.gz

    1、文件内容:docbook-style-xsl-1.78.1-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/docbook-style-xsl-1.78.1-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    dotconf-devel-1.3-8.el7.x64-86.rpm.tar.gz

    1、文件内容:dotconf-devel-1.3-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/dotconf-devel-1.3-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    ekiga-4.0.1-8.el7.x64-86.rpm.tar.gz

    1、文件内容:ekiga-4.0.1-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ekiga-4.0.1-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    2025最新公文写作考试题库(含答案).doc

    2025最新公文写作考试题库(含答案).doc

    组词程序代码.txt

    组词程序代码

    基于java+ssm+mysql的流浪动物领养信息系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

Global site tag (gtag.js) - Google Analytics