首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

Eclipse改动资源文件扩展

2012-11-09 
Eclipse更改资源文件扩展目前的Widget编辑器项目中有个需求,对于Project下面的文件进行移动,重命名等操作,

Eclipse更改资源文件扩展
        目前的Widget编辑器项目中有个需求,对于Project下面的文件进行移动,重命名等操作,相关的文件也要对链接描述进行修改。
        比如html文件里有一行<script type="text/javascript" src="ddd.js"/>,如果我们在Eclipse里把ddd.js重命名为aaa.js,那么这行也要相应改为<script type="text/javascript" src="aaa.js"/>。
        处理思路其实也很简单,对应所有此类重命名移动等IResource的操作,记录其文件名和路径,然后读取Project下的其他文件,将对应的文件链接的字符进行修改即可,如果不考虑相对路径的话,那这个需求的困难点就仅在于如何捕捉此类操作。
        需要捕获的操作大概有这些:1.右键点击文件或文件夹选择rename,同按F2 2.右键点击文件或文件夹选择move 3.直接拖拽文件或文件夹到别的目录 4.右键点击文件或文件夹选择delete,同按Delete键  下面是依次扩展点的介绍
        重命名扩展点首先要导入org.eclipse.ltk.core.refactoring包,这个包也是下面一些扩展点需要导入的,然后就可以再扩展点里增加renameParticipants扩展,按照提示定义一个扩展自RenameParticipant的类即可。对于本需求,还需要对扩展点加以特化,只针对文件重命名进行处理

<extension         point="org.eclipse.ltk.core.refactoring.renameParticipants">      <renameParticipant            name="code"><extension         point="org.eclipse.team.core.repository">   <repository         class="xxx.MyRepositoryProvider"         id="xxx.myProviderID">   </repository></extension>

注意上面的id,然后在继承自RepositoryProvider的类时着重重写两个方法,即public String getID()和public IMoveDeleteHook getMoveDeleteHook()。前一个就需要返回扩展点的id,此例中为"xxx.myProviderID",而getMoveDeleteHook方法获得的hook就是实际工作的类,自己实现一个即可。
        还需要注意的是,我们必须把Project和定制的RepositoryProvider关联起来,使用RepositoryProvider的静态方法map(IProject project, String id),参数id也就是上面配置文件里的id,自此,便可以实现移动和删除文件的hook了。
        最后说一点,我在实现hook时走了个弯路,因为导入resources的包后就直接提供了moveDeleteHook的扩展点,但如果添加了这个扩展点则会导致WorkSpace的initializeMoveDeleteHook方法中找到两个hook代理,而只要代理超过一个,WorkSpace就会一个都不采用转而创建一个默认的代理,当然也无法实现我们想要的功能了。

热点排行