eclipse插件开发--打开编辑器(下)

那如果我们在注册编辑器的时候,没有绑定对应的content type呢?Eclipse允许你配置,往下看:

            
                          我想看到这边对eclipse如何动态计算一个文件对应的editor应该是明白了吧,再回顾一下吧:
             1、查看资源本身是否有EIDTOR_ID持久属性(注意:一、只有工作区中存在的资源才允许设置持久属性;二、资源属性知识针对特定资源,不会影响同类型资源,即你对工作区中特定的.java文件设定了EIDTOR_ID持久属性,并不会影响工作区中其他.java文件资源的编辑器绑定操作)
             2、查找对应的content type,然后查找对应的editor扩展或者查找Eclipse中的Content Types和File Associations配置
            3、如果都找不到,则直接给一个默认的编辑器。例如,我们经常碰到是"org.eclipse.ui.DefaultTextEditor"

             【IDE工具类提供的接口 VS IWorkbenchPage提供的接口】
              看一下以上提到的各个角色之间的调用关系图吧:
              

         【使用Eclipse提供的打开editor的接口】
        还是那句话,需求决定一切。我们看一下打开编辑器的需求:
         1、打开工作区中工程内的文件资源
         2、打开工作区.metadata目录中的文件资源
         3、打开工作区外部的文件资源

         【说明】Eclipse工作区实际上是有数据区和元数据区两个区域组成的,示意如下:
        
            
             对于Eclipse来说,.metadata目录下存放的是插件运行时的关键状态数据,不建议用户再工作区实例运行期间做相应修改,为此eclipse干了两件事情:1、运行期间会自动在.metadata目录下产生一个进程锁定的.lock文件;2、Eclipse不允许用户通过IResource系列接口直接访问或修改.meatadata目录下的资源

            【打开工作区工程内的资源】
             假设工作区中有测试工程TestProject,工程下有文本文件java_file.txt。对应创建代码如下:
            
1  try  {
2               // 创建工程
3               IProject project  =  ResourcesPlugin.getWorkspace().getRoot().getProject( " TestProject " );
4               if  ( ! project.exists())
5                   project.create( null );
6               if  ( ! project.isOpen())
7                   project.open( null );
8              
9               // 创建文件
10               IFile java_file  =  project.getFile( new  Path( " /java_file.txt " ));
11               InputStream inputStreamJava  =   new  ByteArrayInputStream( " class MyType{} " .getBytes());
12               if  ( ! java_file.exists())
13                   java_file.create(inputStreamJava,  false ,  null );
14           }  catch  (CoreException e) {
15               IStatus status  =   new  Status(IStatus.ERROR,  " myplugin " ,  101 ,  " 创建资源失败 " , e);
16               Activator.getDefault().getLog().log(status);
17           }

            
        
         打开方式一:Eclipse默认计算对应的editor id,会用default text editor打开
1  try  {
2               IWorkbenchPage page  =  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
3               IProject project  =  ResourcesPlugin.getWorkspace().getRoot().getProject( " TestProject " );
4              
5               IFile java_file  =  project.getFile( new  Path( " /java_file.txt " ));
6               IDE.openEditor(page, java_file);            
7           }  catch  (CoreException e) {
8               IStatus status  =   new  Status(IStatus.ERROR,  " myplugin " ,  102 ,  " 打开工作区内文件出错 " , e);
9               Activator.getDefault().getLog().log(status);
10           }

         打开方式二:指定java源码编辑器打开,会用java源码编辑器打开
1  try  {
2               IWorkbenchPage page  =  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
3               IProject project  =  ResourcesPlugin.getWorkspace().getRoot().getProject( " TestProject " );
4              
5               IFile java_file  =  project.getFile( new  Path( " /java_file.txt " ));
6               IDE.openEditor(page, java_file,  " org.eclipse.jdt.ui.CompilationUnitEditor " );
7           }  catch  (CoreException e) {
8               IStatus status  =   new  Status(IStatus.ERROR,  " myplugin " ,  102 ,  " 打开工作区内文件出错 " , e);
9               Activator.getDefault().getLog().log(status);
10           }

         
           打开方式三:设定editor id属性,该文件以后默认都用此editor id打开
1  try  {
2               IWorkbenchPage page  =  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
3               IProject project  =  ResourcesPlugin.getWorkspace().getRoot().getProject( " TestProject " );
4              
5               IFile java_file  =  project.getFile( new  Path( " /java_file.txt " ));
6               java_file.setPersistentProperty(IDE.EDITOR_KEY,  " org.eclipse.jdt.ui.CompilationUnitEditor " );
7               IDE.openEditor(page, java_file);
8           }  catch  (CoreException e) {
9               IStatus status  =   new  Status(IStatus.ERROR,  " myplugin " ,  102 ,  " 打开工作区内文件出错 " , e);
10               Activator.getDefault().getLog().log(status);
11           }

         说明:对于工作区工程内的资源,可以有两种方式:一是local的,那就是物理存在与工程之内;二是link进入的。打开编辑器的时候,不需要做区分。

         【打开工作区外部的资源】
         说明:既存在于工作区外部,同时又没有被link进工程。
        
        在Eclipse中有个功能,就是File->Open File,可以打开一个外部文件。那我们看一下它是怎么实现的。我们只需要打开对应的对话框,然后挂起主线程,就可以找到对应的action了(挂起线程可以帮我们很方便的调试很多类型的问题,以后细说~_~):
                      

           分析一下OpenExternalFileAction的实现,我们发现它自己构建了一个editor input
转自: http://www.blogjava.net/zhuxing/archive/2009/03/06/225041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值