注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

隐龙 为了一生的信念

今日默默沉于水,他日飞腾在九天...

 
 
 

日志

 
 

Eclipse插件开发笔记三:判断项目是否是J2ME项目  

2014-04-04 21:36:57|  分类: Eclipse PDE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我需要达到的目标是:只有在项目是J2ME项目时,才会在popupmenu上出现我的菜单Huayusoft;因此,我需要在plugin.xml中添加条件判断,判断当前选中的是J2ME项目。

 

而判断一个项目是否是J2ME项目,需要eclipseme插件提供支持。Eclipseme插件本身也提供了这个功能。当当前选中的项目是Java项目时,Eclipseme会弹出菜单J2ME-->Convert to J2ME project;当当前选中的项目是J2ME项目时,Eclipseme会弹出菜单J2ME-->Create Package;

 

查看Eclipseme的plugin.xml,发现它使用的popupmenus方式,它的核心在这一句:

<objectState name="nature" value="eclipseme.core.nature"/>

即判断projectnature是否是eclipseme.core.nature;

 

在Eclipse的每个java项目目录下,都有一个.project文件。如果是普通的Java Project,它只有一个nature:

org.eclipse.jdt.core.javanature

不要惊讶,jdt也是插件。

如果是使用eclipseme插件构建的J2ME project,它还会有一个nature:

<nature>eclipseme.core.nature</nature>

如果是使用mtj插件构建的J2ME project,它也会比普通java project多一个nature:

<nature>org.eclipse.mtj.core.nature</nature>

 

从这里也可以看出mtj的命名更标准化了。

 

在Eclipse中,workspace中的project有两种状态:打开和关闭。当project处于打开的状态时,它的.project文件会被解析,并在内存中有对应的对象。这也是plugin.xml的条件判断在弹出popupmenu前能够起作用的原因。

必须要牢记的是,在弹出popupmenu时,特定的eclipse插件是没有导入的,但是plugin.xml是被解析,而且其作用了的。

 

而且我发现,IActionObjectDelegate的selectionChanged是在popupmenu前就会被调用的。但是,它有一个前提条件,就是当前选中的对象是符合plugin.xml中描述的条件的。

 

 

因为eclipseme采用的popupmenu方式,我也改成了popupmenu方式。这种方式和command方式有相同的地方,也有一些差异。不考虑actionsets的方式,是因为这种方式主要用于menu和toolbar。

 

popupmenu方式采用的org.eclipse.ui.popupmenus扩展点。它有一个元素叫objectContribution,类似于command方式的menuContribution;这个Contribution可以理解为归属的意思,其实就是连接。

在objectContribution中有objectid和objectclass元素。

 

这个objectclass就是条件。只有选中的对象满足这个objectclass才会继续下一步。另外,这个adaptable属性也是非常关键的。我的理解是,它应该是一个适配的作用。比如我选中的是IJavaProject,但是我的objectclass是IProject;如果adaptable=true,即允许适配,那么这个条件就满足。

 

popupmenu方式对menu的定义方式和commands方式相同,但是,它没有command,它用的是action。它的响应是IObjectActionDelegate。

 

popupmenu方式还有一个差异的地方时:ISelection的是IProject不是IJavaProject,需要用JavaCore进行转换,这一点要特别注意。

  评论这张
 
阅读(359)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017