`
lizhensan
  • 浏览: 382855 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

rcp handler 条件 Expression

阅读更多

 

 org.eclips.core.expression的基本结构

Expression的运算结果是返回true或者false,用来处理逻辑结构。

not  用来对表达式运行结果取反  
and  用来在多个表达式之间进行与运算,只有多个表达式都为true的时候,才会返回true,否则返回false  
or  用来在多个表达式之间进行或运算,只有多个表达式都为false的时候,才会返回false,否则返回true  
instanceof  用来判断指定的对象是否是指定类或者接口的实例  
systemTest  用来比较System系统变量中的值是否与指定值相等  
iterate  用来处理java.util.Collection的所有子对象  
equals  用来判断指定对象与预先设置的数据是否相等  
count  用来处理java.util.Collection的集合大小  
with    
resolve    
adapt  用来将选中对象转成预先指定的对象,以便更灵活的处理  
test    基于最重要的人物总是最后出场的原则,将adapt和test放在最后进行说明。 

 

 

 

 

 

org.eclipse.core.expression详细配置说明
not
not本身并没有具体的信息,只是将其子表达式的结果进行取反。通常的配置如下:

<not>
   <instanceof value="org.eclipse.core.resources.IFile"/>
</not>  如果选中的对象不是文件,会返回true,因为not将instanceof的结果取反。  

and
与not功能相类似,and是将所有的子结点结果进行与运算。

<and>
   <instanceof value="org.eclipse.core.resources.IFile"/>
   <test property="org.demo.matchesPattern" value="*.html"/>
</and>  只有选中的对象是文件,而且名称符合*.html才会返回true。  

or
与not功能相类似,and是将所有的子结点结果进行与运算。

<or>
   <instanceof value="org.eclipse.core.resources.IFolder"/>
   <instanceof value="org.eclipse.core.resources.IProject"/>
</or>  只有选中的对象是目录或者是项目,就会返回true,如果是文件,就会返回false。  

instanceof
用来判断指定的对象是否是指定类或者接口的实例

<instanceof value="org.eclipse.core.resources.IFile"/>  只有选中的对象是文件的实例时,如org.eclipse.core.resource.internal.File时,才会返回true.  

systemTest
用来比较System系统变量中的值是否与指定值相等,它会调用System.getProperty("xxx")方法取得系统变量值,,并将该值与指定值进行比较。

<systemTest property="encoding" value="GB2312"/>  那么该配置只有当前JVM的默认编码为GB2312(即中文时),才会返回true.  

iterate
iterate是一个非常少用的属性,它主要用来处理java.util.Collection中子元素的内容。它会逐渐遍历集合的所有子元素,然后再将每个子元素放入子表达式中进行计算,其实operator有or和and两种可选,是用来支持子表达的或运算和与运算,与前面的or和and相似。

<iterate operator="or">
         <instanceof value="org.eclipse.core.resources.IFile"/>
</iterate>  

equals
在配置文件中,其实只有一种字符串数据类型,而在Java中的数据类型丰富的多,因此Eclipse提供了一整套的转换机制,用来将字符串转成相应的Java类型,下面是相应的转换规则:1. 对于字符串"true",将会转成Boolean.TRUE2. 对于字符串"false",将会转成Boolean.FALSE3. 如果字符串中有小数点,将会转成浮点数Float4. 如果字符串中只有数字,就会转成整数Integer5. 如果以上的转换出现错误,或者不符合以上情况,就会转成字符串6. 如果希望使用字符串true,或者1.2之类的数据,而不被转成Boolean.True和相应的Float,就使用单绰号',如"''true",就会转成"true",而不是Boolean.True

<equals value="100"/>  

count
用来验证一个java.util.Collection中的size是否符合要求,这个值可以有以下几种:v *,表示任意数量v ?,表示0或1个数量v +,表示至少一个数量v 数字,表示size要等于这个指定的数量

<count value="0" />  这个属性虽然用的少,但是却不可少,以资源管理器为例,当一个工作区没有任何项目的时候,那么对应的size就为0,如果需要在这种情况出现一个菜单,那么就肯定需要这样一个表达式才能正确的处理。  

with
通过variable属性取得选中对象的相应数据,比如通过选中对象的getAffectedProjects方法得到一个java.util.Collection对象,再通过iterate和test来进行表达式处理。

<with variable="affectedProjects">
     <iterate operator="or">
         <test property="org.demo.projectNature" value="org.eclipse.jdt.core.javanature"/>
     </iterate>
</with>  

resolve
它和with属性基本一致,但是它多了一个args属性,从而有更高的灵活性,其它方面与with并无区别。

<resolve variable="pluginDescriptor" args="org.eclipse.core.runtime">
     <test property="org.demo.isActive"/> 
</resolve>  

adapt
adapter是Eclipse架构的根本所在,它不仅仅解决了上下文环境的问题,对系统的扩展和灵活性都是一个非常好的解决方案,因此在表达式中也充分的利用这个特点。它可以将待处理的对象转换成指定的对象,这样也会有效的增加表达式的灵活性。

<adapt type="org.eclipse.core.resources.IResource">
    <test property="org.eclipse.core.resources.extension"         value="datasetx"/>
</adapt>  它表示会先将指定的对象通过adapter方式转成一个IResource的实例,如果转换成功,再判断其扩展名是否为datasetx,如果转换不成功,也会返回false。  

test
以上提供了很多功能,但是可能对于开发人员,并不能完全满足他们相应的需求。所以Expression插件提供了test结点,这个结点允许用户通过一个扩展点来定义各种新的表达式处理功能,象org.eclipse.core.resources就提供了对扩展名等一系列的支持。在以后的文章将会详细的描述如何进行扩展。

<adapt type="org.eclipse.core.resources.IResource">
    <test property="org.eclipse.core.resources.extension"         value="datasetx"/>
</adapt>  这个例子会调用,org.eclipse.core.internal.propertytester.ResourcePropertyTester类来处理数据,从而获得更高的灵活性。 

 

 

 

我测试了一个with   是不可以自定义参数的,只能用系统默认的几个:

activeContexts java.util.Collection ofjava.lang.String

This is a collection of the active context IDs as strings. Most commonly used with <iterate/>, <count/>, and <test/> with a combinedorg.eclipse.common.expressions.PropertyTester. In 3.3 action sets are mirrored by contexts whose parent is org.eclipse.ui.actionSet, and the active action sets show up in the list of active contexts.

3.2
activeActionSets An IActionSetDescriptor[]

Note: This is currently not used as it points to an internal class and the type might change in any release.

3.2
activeShell org.eclipse.swt.widgets.Shell

The currently active shell. It can be a dialog or workbench window shell.

3.2
activeWorkbenchWindowShell org.eclipse.swt.widgets.Shell

The active workbench window shell.

3.2
activeWorkbenchWindow org.eclipse.ui.IWorkbenchWindow

The active workbench window.

3.2
activeWorkbenchWindow.isCoolbarVisible java.lang.Boolean

Reports coolbar visibility for the currently active workbench window.

3.3
activeWorkbenchWindow.isPerspectiveBarVisible java.lang.Boolean

Reports perspective bar visibility for the currently active workbench window.

3.3
activeWorkbenchWindow.activePerspective java.lang.String

Reports the name of the current perspective of the active workbench window.

3.4
activeEditor org.eclipse.ui.IEditorPart

The currently active editor. This is remembered even if the editor is not the currently active part.

3.2
activeEditorId java.lang.String

The ID of the currently active editor. This can be used for expressions on the editor type.

3.2
activePart org.eclipse.ui.IWorkbenchPart

The active part, which can be the same as the active editor.

3.2
activePartId java.lang.String

The ID of the currently active part.

3.2
activeSite org.eclipse.ui.IWorkbenchPartSite

The site of the currently active part.

3.2
selection org.eclipse.jface.viewers.ISelection

The current global selection. It is often used with <test/> elements withorg.eclipse.core.expressions.PropertyTester, in programmatic core expressions, and in 3.3 with <iterate/> and <count/> elements.

3.2
activeMenu java.util.Collection ofjava.lang.String

This is the list of IDs of the showing context menu. Examples are like #TextEditorRuler or a part ID. Most commonly used with <iterate/>, <count/>, and <test/> with a combined org.eclipse.common.expressions.PropertyTester.

3.2
activeMenuSelection org.eclipse.jface.viewers.ISelection

This is a selection that is available while a context menu is showing. It is the selection from the selection provider used to register the context menu, usually from getSite().registerContextMenu(*). It is usually the same as theselectionvariable, but not always. This is more for legacy compatibility.

3.3
activeMenuEditorInput org.eclipse.jface.viewers.ISelection

This is a selection that is available while a context menu is showing. It is the selection from the editor input, usually if includeEditorInput was set to true duringgetEditorSite().registerContextMenu(*). This is more for legacy compatibility.

3.3
activeFocusControl org.eclipse.swt.widgets.Control

A control that has focus and has been registered with the IFocusService.

3.3
activeFocusControlId

 

所以只有test是可以自定义的

test是灵活性最高的一种,可以直接通过代码来控制条件。

如:   public class EPropertyTester extends PropertyTester

 

 

public boolean test(Object receiver, String property, Object[] args,

Object expectedValue) {

 

if(receiver instanceof User)

{

User user=(User) receiver;

return user.getName().equals("aaa");

}

return false;

}

 

定义扩展点

 

   <extension

         point="org.eclipse.core.expressions.propertyTesters">

      <propertyTester

            class="tester.EPropertyTester"

            id="tester"

            namespace="gef.propertyTester3"

            properties="aa"

            type="viewer.User">

      </propertyTester>

   </extension>

 

 

 

  <handler

            class="gef.handlers.SampleHandler"

            commandId="gef.commands.sampleCommand">

         <enabledWhen>

            <with

                  variable="selection">

               <iterate

                     ifEmpty="false"

                     operator="and">

                  <test

                        args="aa,bb,cc"

                        forcePluginActivation="true"

                        property="gef.propertyTester3.aa"

                        value="abc">

                  </test>

               </iterate>

            </with>

         </enabledWhen>

      </handler>

 

在调用propertyTesters的扩展时,是通过  property="gef.propertyTester3.aa" 来调用的,空间名.属性名的形式

调用。

 

 <menuContribution

            locationURI="menu:gef.view2?after=additions">

         <command

               commandId="gef.commands.sampleCommand"

               id="gef.menus.sampleCommand"

               mnemonic="S">

            <visibleWhen

                  checkEnabled="true">   设为true,标明如何Enabled为true,就显示,Enabled为tfalse就不显示。

            </visibleWhen>

         </command>

      </menuContribution>

 

 

 

可以参考一下eclipse源码。

http://www.ceclipse.org/read-cec-tid-28291.html

 

http://wiki.eclipse.org/Command_Core_Expressions

http://wiki.eclipse.org/Platform_Expression_Framework

 

分享到:
评论

相关推荐

    RCP,RCP开发

    **RCP(Rich Client Platform)与OSGI详解** **RCP概述** RCP,全称为Rich Client Platform,是由Eclipse基金会开发的一种软件框架,主要用于构建功能丰富的桌面应用程序。RCP提供了一个灵活的基础平台,允许开发者...

    RCP在线升级,RCP在线升级

    选择哪种策略取决于应用的复杂性和用户的网络条件。 3. **更新配置**:在RCP应用中,需要配置更新机制以指向新的更新站点。这可以通过修改应用的配置文件或者在运行时通过API动态设置。确保用户知道如何检查和执行...

    RCP 开发实例 源码

    - `Action`和`Handler`类用于实现命令和事件处理,它们定义了用户界面操作的业务逻辑。 5. **开发工具**: - 使用Eclipse IDE进行RCP开发,因为它内置了对RCP的支持,包括插件管理、透视图编辑、视图和编辑器创建...

    RCP中文入门教程.rar

    6. **命令(Command)**和** Handler**:RCP中的命令系统允许开发者定义用户可以执行的操作,并通过Handler来处理这些操作的逻辑。 7. **透视图(Perspective)**:透视图是工作台的一种布局方式,它可以将视图和...

    RCP-1500中文操作手册.pdf

    索尼公司生产的RCP-1500系列遥控面板(包括RCP-1500、RCP-1501和RCP-1530型号)是用于配置和控制演播室级及广播级摄像机的专业设备。这些设备提供了高级的操作便利性和功能的多样性,使得用户能够高效地进行摄影机的...

    Eclipse RCP开发详解

    Eclipse RCP由多个组件构成,包括Workbench、Perspective、View、Editor、Command和Handler等。**Workbench**是应用程序的主要工作区,它管理窗口、视图和编辑器。**Perspective**定义了工作区的布局,可以根据不同...

    RCP产品打包成exe文件

    在IT行业中,RCP(Rich Client Platform)是一种用于构建桌面应用程序的框架,它源自Eclipse项目,提供了丰富的用户界面和强大的插件系统。RCP产品的开发者通常需要将他们的应用程序打包成可执行文件(exe),以便于...

    eclipse rcp经典程序

    7. **命令和 Handler**:Eclipse RCP使用命令(Commands)和处理器(Handlers)来实现用户界面的行为。命令定义了操作,而处理器执行这些操作。HelloWorld可能会展示如何创建和绑定命令。 8. **模型和服务(Models ...

    Eclipse Rcp

    Eclipse RCP是一种基于Eclipse平台的富客户端平台技术,它允许开发者创建独立于Eclipse环境的Java桌面应用程序。RCP通过提供一套标准组件和API,简化了桌面应用程序的开发流程,使开发者能够专注于业务逻辑而非界面...

    eclipse RCP Plug-in开发自学教程.pdf

    本教程旨在帮助读者自学Eclipse RCP插件式开发,掌握RCP的基本概念和开发技巧,无需任何前提条件,只需要具备基本的Java基础知识。 RCP插件式开发的优点在于: 1. 可重用eclipse中的方法和编码模式,提高开发效率...

    Eclipse RCP培训.zip

    5. **命令(Command)与手势(Handler)**:命令是Eclipse RCP中的动作抽象,手势则将命令与用户操作(如鼠标点击、键盘快捷键)关联起来。这种设计使得UI行为的实现与表现分离,易于维护。 6. **服务(Service)**...

    Eclipse RCP详细教程

    ToolBarManager toolBarManager = (ToolBarManager) handlerService.getAdapter(ToolBarManager.class); toolBarManager.add(action); ``` ##### 4.3. 由“扩展”方式向程序添加菜单和工具栏 除了通过编码直接添加...

    RCP程序设计

    5. **命令(Commands)与 Handler**:RCP采用命令设计模式,命令定义了操作行为,而Handler是命令的具体实现。这样,用户界面的操作与具体的实现逻辑分离,便于重用和扩展。 6. **模型-视图-控制器(MVC)**:RCP...

    RCP源码例子

    **RCP(Rich Client Platform)源码例子详解** RCP,全称为富客户端平台(Rich Client Platform),是Eclipse框架下的一个核心组件,它提供了一种构建桌面应用程序的强大框架。RCP允许开发者利用Eclipse的插件体系...

    RCP项目导出exe 步骤

    RCP导出EXE 老大难问题。 RCp 程序导出步骤,保证能够导出~

    RCP程序设计自学RCP的教程

    ### RCP程序设计自学教程概览 #### 一、RCP与富客户端平台(Eclipse RCP) RCP,即Rich Client Platform(富客户端平台),是Eclipse提供的一个强大的框架,用于构建可扩展的桌面应用程序。它允许开发者利用Eclipse...

    Eclipse RCP 软件打包发布方法

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它提供了一整套工具和功能,使得开发者可以构建出具有丰富用户界面的应用。在开发完成后,我们需要将这些应用打包并发布,以便用户...

    rcp for java one

    【标题】:“rcp for java one” 指的是在Java平台上使用 Rich Client Platform (RCP) 技术开发的应用程序,通常是在JavaOne大会上讨论的主题。JavaOne是Oracle主办的年度盛会,聚焦Java技术的最新发展和创新,吸引...

    EclipseRCP教程

    Eclipse RCP 教程 Eclipse RCP(Rich Client Platform)是一种基于 Eclipse 平台的客户端开发技术,能够帮助开发者快速构建功能强大且界面美观的桌面应用程序。在本教程中,我们将详细介绍 Eclipse RCP 的开发过程...

    RCP弹出日期控件

    在IT领域,特别是软件开发中,RCP(Rich Client Platform)是一种基于Eclipse框架的应用程序开发模型,它允许开发者创建功能丰富的桌面应用程序。RCP弹出日期控件是这种环境中用于用户界面交互的一个重要组件,它...

Global site tag (gtag.js) - Google Analytics