GMF里实现editpolicyProviders扩展点

简介:

通过org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders扩展点可以给GMF应用里的editpart增加所需要的editpolicy,通过editpolicy返回的command,就可以自由的控制editpart的行为。顺便说一句,GMF Runtime之所以提供这许多扩展点,是为了允许通过其他插件工程对GMF生成的应用进行各种定制。

例如现在要对一个GMF程序里的名为Book的图形元素增加双击打开一个对话框,在对话框里修改模型属性的功能。最直接的办法是找到GMF生成的BookEditPart,覆盖performRequest()方法,判断request.getType()是否为RequestConstatns.REQ_OPEN,若是则打开一个对话框。但这样要求我们把代码写在GMF生成的插件项目里,如果考虑到有时要为第三方插件做扩展,我们无法修改它的代码的情况呢?

使用editpolicyProviders扩展点则无此限制,还是同样的需求,扩展点的方式步骤如下:

创建一个插件项目,并依赖生成的GMF应用和GMF相关依赖项(特别是org.eclipse.gmf.runtime.diagram.ui.providers),在plugin.xml的extensions里添加org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders项,通过class属性指定一个Provider类。

<extension
       point="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders">
    <editpolicyProvider
          class="com.my.diagram.custom.MyEditPolicyProvider">
       <Priority
             name="Lowest">
       </Priority>
    </editpolicyProvider>
</extension>

这里定义的Provider要自己写,它应该实现IEditPolicyProvider接口,它的provide()方法根据传入的operation判断对相关的editpart是否需要创建editpolicy,若是则createEditPolicies()里用installEditPolicy()方法添加。下面的代码实现了双击打开对话框的需求:

public class MyEditPolicyProvider implements IEditPolicyProvider {

    public void createEditPolicies(EditPart editPart) {
        editPart.installEditPolicy(EditPolicyRoles.OPEN_ROLE, new OpenConditionEditPolicy());
    }

    public void addProviderChangeListener(IProviderChangeListener listener) {

    }

    public boolean provides(IOperation operation) {
        if (operation instanceof CreateEditPoliciesOperation) {
            EditPart editPart = ((CreateEditPoliciesOperation) operation).getEditPart();
            if (editPart instanceof ConditionEditPart)
                return true;
        }
        return false;
    }

    public void removeProviderChangeListener(IProviderChangeListener listener) {

    }

}

本文转自博客园八进制的博客,原文链接:GMF里实现editpolicyProviders扩展点,如需转载请自行联系原博主。

相关文章
|
存储 前端开发 JavaScript
React闭包陷阱产生的原因是什么,如何解决
react闭包陷阱产生的原因是由于在React组件中使用了异步操作(如定时器、事件监听等)时,闭包会保留对旧状态的引用,导致更新后的状态无法正确地被获取或使用。
492 0
|
3月前
|
开发框架 安全 Java
Java 长期支持版 JDK17 下载安装+详细配置步骤
JDK 17 是 Oracle 官方推出的长期支持(LTS)版本,具备高性能、高安全性、强兼容性与丰富新特性(如密封类、模式匹配等),广泛用于后端开发、微服务、大数据及教学实训,是企业级 Java 开发的主流稳定选择。(239字)
2479 0
|
机器学习/深度学习 算法 搜索推荐
CIKM论文解读 | 淘宝内容化推荐场景下对多场景全域表征的思考与应用
我们结合逛逛推荐场景中的具体问题,从多场景全域表征的视角进行了一系列的探索与内容推荐场景的应用,从全域表征的范围、信息迁移方式以及模型框架的应用等维度展开我们的优化工作,取得了阶段性的优化经验和业务效果。
1692 0
|
4天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1530 110
|
11天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1936 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
5天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
|
5天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
522 112
|
9天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
713 111
|
17天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2364 3