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扩展点,如需转载请自行联系原博主。

相关文章
|
存储 安全 网络安全
云计算与网络安全:构建数字时代的安全堡垒
随着云计算技术的迅猛发展,云服务已经成为企业和个人数据存储和处理的主要方式。然而,云计算的普及也带来了网络安全的挑战,包括数据泄露、隐私侵犯和网络攻击等问题。本文将探讨云计算与网络安全之间的紧密关系,介绍云服务和网络安全技术的最新发展,并提出保障信息安全的有效措施,以构建数字时代的安全堡垒。
|
SQL 存储 数据可视化
使用Java分析器优化代码性能,解决OOM问题
使用Java分析器优化代码性能,解决OOM问题
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线教学平台附带文章和源代码
基于SpringBoot+Vue的在线教学平台附带文章和源代码
237 0
|
前端开发 API 数据库
fastadmin框架调用model层的方法
fastadmin框架调用model层的方法
546 0
|
算法 C语言
糊里糊涂的递归和递归经典题(上)
糊里糊涂的递归和递归经典题
233 0
uni-app 106群资料设置功能
uni-app 106群资料设置功能
90 0
|
存储 SQL 负载均衡
【数据库架构】PostgreSQL的最佳群集高可用性方案
【数据库架构】PostgreSQL的最佳群集高可用性方案
|
存储 算法 Java
Java的线程
本篇文章介绍了 1. Java的线程生命周期; 2. Java的线程状态切换; 3. Java线程API的使用。
205 0
Java的线程
|
缓存 弹性计算 安全
【视频】阿里云云计算 ACP 认证(3)|学习笔记(三)
快速学习【视频】阿里云云计算 ACP 认证(3)
【视频】阿里云云计算 ACP 认证(3)|学习笔记(三)
|
NoSQL 中间件 关系型数据库
Springboot 自定义配置文件加密规则
一般情况下,我们做项目的时候,中间件例如mysql,redis, zk 的账号密码一般都是写在配置文件里面的, 这样代码泄露的情况下, 就很不安全。
Springboot 自定义配置文件加密规则