实现自己的团队协作客户端一

在Eclipse里自带了团队协作客户端CVS;另外还有好几个SVN的插件可以用。

 

当使用这些插件时,可以方便的进行同步、提交、更新等操作。

 

如果比较了CVS与SVN的实现成使用方式就会发现它们大同小异。这里因为和eclipse提供的其他功能一样,在eclipse里有一个专门提供团队协作的插件Team。而CVS和SVN就是通过实现这个Team的扩展来提供协作功能。

 

因此,如果我们想在eclipse里提供一个自己的协作实现,毫无疑问,也需要通过扩展这个team来实现。

 

(我理解部分):一般来说,一个资源在同步视图中通常有以下几种情况:

 

  • 1.同步中
  • 2.可提交
  • 3.可更新
  • 4.本地增加
  • 5.本地删除
  • 6.远程增加
  • 7.远程删除
  • 8.冲突中

 

要想实现这些状态的正确显示,我们需要一些东西来得到这些状态。在Team框架里,他是通过三类对象进行比较来得到这些状态:

 

  • 1.本地资源 Local
  • 2.记录资源 Base
  • 3.远程资源 Remote

同步时分两步进行操作:首先判断base和remote是否存在,用以判断增删状态;如果都存在,则分别用base同local的比较和base和remote的比较来得到关系剩余的状态。

 

这两步在类:ResourceVariantTree 和 IResourceVariantComparator 中实现,所以我们需要提供自己的这两个类的实现。

 

得到了同步状态之后,需要做的就是操作的实现了。默认情况下同步视图会有一些默认的菜单,如果我们要对这些默认的菜单提供实现,那我们要实现以下类:SubscriberMergeContext。

 

除此之外,通常我们要有自己的操作实现,例如:提交、更新等等。

 

这个我花了一小段时间才找着路子。首先我们要提供一个扩展,在plugin.xml里声明一些插件入,例如:

 

   <extension
         point="org.eclipse.ui.navigator.viewer">
       <viewer
             viewerId="#viewId">
           <popupMenu
                allowsPlatformContributions="false"
                id="#menuId">  
             <insertionPoint name="file"/>
             <insertionPoint name="file-bottom"/>  
             <insertionPoint name="edit" separator="true"/>          
             <insertionPoint name="synchronize"/>
             <insertionPoint
                   name="navigate"
                   separator="true"/>
             <insertionPoint
                   name="update"
                   separator="true"/>
             <insertionPoint
                   name="commit"
                   separator="false"/>
             <insertionPoint
                   name="overrideActions"
                   separator="true"/>
             <insertionPoint
                   name="otherActions1"
                   separator="true"/>
             <insertionPoint
                   name="otherActions2"
                   separator="true"/> 
             <insertionPoint
                   name="changeSetActions"
                   separator="true"/> 
             <insertionPoint
                   name="sort"
                   separator="true"/>
             <insertionPoint
                   name="additions"
                   separator="true"/>              
             <insertionPoint
                   name="properties"
                   separator="true"/>
          </popupMenu>
       </viewer>
   </extension>

 

这里这个viewerId比较重要,它是之后我们的操作找到插入点的中介。

 

声明了这些插入点之后,在同步视图的右键菜单中就会新建这些group,最后我们的菜单就可以加到对应的group里了。

 

菜单的实现在ModelSynchronizeParticipant中提供。这是一个participant类,每个提供协作实现都需要扩展org.eclipse.team.ui.synchronizeParticipants扩展点,然后提供一个实现类,那个实现类就可以继承这个ModelSynchronizeParticipant类。

 

在这个类中,我们要注册上面扩展的viewerId和contextMenuId绑定,如下:

 

	protected void initializeConfiguration(ISynchronizePageConfiguration configuration) {
		configuration.setProperty(ISynchronizePageConfiguration.P_VIEWER_ID, VIEWER_ID);
		super.initializeConfiguration(configuration);
	}

 

然后再实现以下方法:

 

	protected ModelSynchronizeParticipantActionGroup createMergeActionGroup() {
		return new WorkspaceMergeActionGroup();
	}

 

完了以后,在WorkspaceMergeActionGroup里定义的菜单就可以实现了。具体菜单的执行就不需要说了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值