`
salever
  • 浏览: 254214 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

模拟SVN使用decorator与marker进行IProject扩展

    博客分类:
  • RCP
阅读更多

原始贴子见http://www.ceclipse.org/read-cec-tid-27222.html

当时大家讨论的是如何拓展IProject,来满足对默认的Project的一些修改,比如将某些文件夹设定为src folder,某些文件夹设定为res folder。

再三思考以后,觉得并不需要使用CNF框架,来对扩展已有的Project Navigator,而是采用一个稍微绕一点的方法来实现,想到SVN和CVS的实现方式了。

需求如下:需要将project中的某些文件夹设定为资源文件夹,以便于在编译、打包时进行特殊处理;
基本思路:因为目前只是对某些文件夹进行特殊处理,而文件夹下面的内容仍然按照默认的方式显示,考虑采用
                 org.eclipse.ui.decorators给指定的文件夹加上修饰,以区别于普通文件夹,使
                 org.eclipse.core.resources.markers记录下这些文件夹,以便于编程处理。
实现如下:

1,扩展org.eclipse.core.resources.markers,添加一个marker,记录下资源文件夹类型。

<extension
         id="org.salever.rcp.marker.resFolderMarker"
         name="Resource Folder Marker"
         point="org.eclipse.core.resources.markers">
      <persistent
            value="true"> <!-- 一定要设置为true,否则重启IDE后marker就没了-->
      </persistent>
      <super
            type="org.eclipse.core.resources.bookmark"><!--加上这个类型是为了在book marker view中显示-->
      </super>
 </extension>

 

    接着在创建这类文件夹时,给它们加上这个marker,代码很简单

public static void createResourceMarker(IFolder ifolder)
            throws CoreException {
        IMarker marker;
        marker = ifolder.createMarker("org.salever.rcp.marker.resFolderMarker");
        marker.setAttribute(IMarker.MESSAGE, "Resource Folder");
        marker.setAttribute(IMarker.LOCATION, ifolder.getFullPath().toString());
   }
 


2,扩展org.eclipse.ui.decorators,区别显示res folder

<extension
         point="org.eclipse.ui.decorators">
      <decorator
            adaptable="true"
            class="org.salever.rcp.decorator.ResFolderLabelDecorator" <!-- 如果是lightweight的话,实现
                                                                                                                          ILightweightLabelDecorator-->
            icon="icons/resourece_decorator.gif"
            id="org.salever.rcp.decorator.resFolderDecorator"
            label="Resource Decorator"
            lightweight="true"
            location="BOTTOM_RIGHT"
            state="true">
         <enablement>
            <and>
               <objectClass
                     name="org.eclipse.core.resources.IFolder">
               </objectClass>
               <objectClass
                     name="org.eclipse.core.resources.IResource">
               </objectClass>
            </and>
         </enablement>
      </decorator>
 </extension>

  这个扩展的decorator只对folder类型的资源有效,重点在于类ResFolderLabelDecorator,它需要实现ILightweightLabelDecorator,去给指定的资源添加decorator。主要代码为:

@Override
    public void decorate(Object element, IDecoration decoration) {
        if (isResourceFolder(element)) {
            decoration.addOverlay(RESOURCE_FOLDER_IMAGE, // RESOURCE_FOLDER_IMAGE为decorator
                                                                                                          // 的图形,ImageDescriptor类型
                    IDecoration.BOTTOM_LEFT);

        }
    }
        public static boolean isResourceFolder(Object element) {

        if (!(element instanceof IFolder)) {
            return false;
        }
        try {
            IMarker[] markers = ((IResource) element).findMarkers(
                    "org.salever.rcp.marker.resFolderMarker", true, IResource.DEPTH_INFINITE);
            return markers.length > 0;

        } catch (CoreException e) {
            // Do nothing.
        }
        return false;
    }
 

 这时候,对于拥有org.salever.rcp.marker.resFolderMarker类型marker的文件夹,IDE就会给它添加一个decorator了,在编译和打包的时候,同样可以通过这个marker,判断指定的文件夹是否为res folder。

3,事情解决,没有用到CNF,因为目前的需求仅仅是区别某些文件夹,如果需要对某些文件进行处理,比如使proerties文件能够将内容展开,就需要使用CNF了。

 

另见http://www.ceclipse.org/read-cec-tid-27306.html

0
0
分享到:
评论

相关推荐

    SVN使用指南(含SVN服务器的安装与使用)

    SVN 使用指南(含 SVN 服务器的安装与使用) SVN(Subversion)是一种版本控制系统,能够帮助开发团队更好地管理代码仓库。下面是 SVN 使用指南,涵盖了 SVN 服务器的安装与使用、SVN 客户端的安装与使用等内容。 ...

    svn使用手册

    ##### SVN服务器搭建与使用 1. **打开VisualSVN Server Manager**: - 启动VisualSVN Server Manager,查看版本库的基本信息,包括状态、日志、用户认证等。 2. **创建版本库**: - 在左侧面板中右键点击 **...

    svn+ldap+sasl认证(svn通过ldap用户进行认证登陆)

    svn+ldap+sasl 认证是指在 svn 服务器中使用 ldap 服务器进行用户认证,实现 svn 服务器的安全认证机制。ldap 服务器是一个目录服务,用于存储和管理用户信息,sasl 则是一个安全认证协议,用于在客户端和服务器之间...

    svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和

    svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端安装和使用svn服务端...

    SVN使用教程文档

    SVN 使用教程 SVN(Subversion)是一种开源的版本控制系统,允许多个用户协同工作于同一个项目。通过 SVN,可以追踪文件的变化...通过这篇 SVN 使用教程,你可以学会如何使用 SVN 进行项目管理、版本控制和冲突解决。

    git-svn使用用法

    使用场景包括但不限于项目需要与使用SVN的团队合作、迁移项目到Git但仍需保留与原SVN仓库的兼容性等。 在安装方面,Mac用户可以通过安装Xcode获得git-svn支持,而Linux用户可以使用包管理工具如apt-get进行安装。...

    SVN使用手册大全(史上最全)-pdf版.pdf

    ### SVN使用手册大全知识点梳理 #### 一、SVN简介 Subversion(简称SVN)是一种集中式的版本控制系统,主要用于代码版本管理和团队协作。它能够帮助开发者追踪代码变更历史、协同开发并管理不同版本间的差异。 ###...

    pb源码管理SVN使用手册

    PB源码管理SVN使用手册主要介绍了一种替代传统Visual SourceSafe(VSS)的源代码管理系统——Subversion(SVN),并提供了使用SVN管理PowerBuilder(PB)源码的详细步骤。以下是相关知识点的详细说明: 1. **Subversion...

    SVN的Delphi扩展和SVN的安装和配置

    本文将详细介绍如何安装、配置SVN以及如何在Delphi中使用SVN的扩展。 1. **SVN的基本概念** - **版本控制系统**:SVN是一种集中式版本控制系统,它跟踪文件和目录的变化,允许团队成员协同工作,同时保持代码的...

    eclipse中svn插件的使用

    ### Eclipse中SVN插件的使用详解 #### 安装与配置 在Eclipse中集成Subversion(简称SVN)插件,能够极大提升团队协作效率,实现代码版本控制、协同开发等功能。首先,确保Eclipse环境已安装,然后通过Help菜单下的...

    SVN使用手册中文版快速入门

    下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...

    Windows下SVN使用指南.ppt

    Windows下SVN使用指南.ppt

    SVN服务器搭建与客户端使用指南.pdf 详解

    ### SVN服务器搭建与客户端使用详解 #### 一、概述 Subversion (SVN) 是一款广泛应用的版本控制系统,主要用于管理代码、文档等文件的历史版本。本文档将详细介绍如何搭建SVN服务器并使用客户端进行基本的操作。 #...

    myEclipse8.5集成svn android svn使用

    《myEclipse8.5集成SVN与Android SVN使用详解》 在软件开发过程中,版本控制工具的重要性不言而喻,它能够帮助开发者追踪代码的变更历史,协同多人合作,并确保代码的一致性和稳定性。本文将详细介绍如何在...

    svn使用说明文档和安装文档

    **Subversion(简称SVN)** 是一个广泛应用于软件开发领域的版本控制系统,它在RCS和CVS的基础上进行了改进和扩展,特别是在分支管理方面提供了更高效、灵活的解决方案。Subversion的设计初衷是成为CVS的现代化替代...

    it公司内部svn 使用操作规范

    本文将对IT公司内部SVN(Subversion)使用操作规范进行详细解读,并通过一系列具体步骤演示如何进行SVN的主干与分支操作。SVN是一种常用的版本控制系统,广泛应用于软件开发过程中,用于管理代码版本、协作开发等...

    svn使用教程

    svn 使用教程 svn 是一种版本控制系统,主要用于软件开发中的版本控制和项目管理。下面是svn 的使用教程: 一、svn 服务端安装配置 svn 服务端可以通过两种方式安装:官方安装包和图形化服务端。官方安装包需要...

    利用SVN和AltiumDesigner进行PCB版本控制设计

    在AltiumDesigner中使用SVN需要设置SVN的调用路径,创建SVN版本控制库,添加工程到版本控制库中,并对修改后的文件进行版本控制。 设置SVN的调用路径可以在参数设置窗口中进行设置。在VersionControl下点击自动检测...

Global site tag (gtag.js) - Google Analytics