如果使用Text形式比较EMF模型文件,对于模型的移动,不能很好的处理。如果使用EMF-compare则能很清晰的展现这种差异,对于团队协作对比/查看 修改的内容很有用。
dev环境搭建:
1、获取emf.compare的源码, https://github.com/eclipse/emf.compare
2、获取google的相关插件(恰好RAP插件中有,我就直接用了。也可以从下载链接中的google-dropins获得,把这些jars放到dropins目录下)
3、把源码导入到工作空间。
/org.eclipse.emf.compare.edit
/org.eclipse.emf.compare.ide
/org.eclipse.emf.compare.ide.ui
运行
去掉平台默认的compare的插件,选中工作空间中的compare的插件。

查看Compare的效果:

实现自定义EMF模型的比较:
1、实现自定义EMF模型,使用Example提供的例子即可搭建一个简单的EMF例子(我这里通过Examples->EMF Validation Framework Plug-ins->General Validation Example创建);
2、为自己的模型定义添加EMF-Compare功能。
先看效果:

要实现这样的功能,其实很简单,只要为文件的后缀添加compare的扩展点即可。
<extension
point="org.eclipse.compare.structureMergeViewers">
<viewer
class="org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.EMFCompareStructureMergeViewerCreator"
extensions="extlibrary"
id="o.e.compare.ide.ui.internal.structureMergeViewer"
label="libCompare Structure Merge Viewer">
</viewer>
</extension>
Compare源码相关:
和其他包括schema的插件不同,解析Compare的扩展点的代码都放置在CompareUIPlugin类里面。
org.eclipse.compare.internal.CompareUIPlugin.registerExtensions()
在org.eclipse.emf.compare.ide.ui的插件里面添加了compare的两个扩展点:
· org.eclipse.compare.structureMergeViewers
比较结果的呈现视图,也就是对比的两个EMF文件的差异视图。
· org.eclipse.compare.contentMergeViewers
选中两个EMF的文件,比较之后差异显示在以树形结构的StructureCompareView中,通过双击其中的节点后,就会用到contentMergeViewers视图来呈现真正内容的不同。(包括了eobject,emfcompare_diff,eText,resource_contents四种)
------------老版本,比较烦,需要定义contentType---------
org.eclipse.emf.compare;bundle-version="1.2.2",
org.eclipse.emf.compare.diff;bundle-version="1.2.2",
org.eclipse.emf.compare.epatch;bundle-version="1.2.0",
org.eclipse.emf.compare.ui;bundle-version="1.2.2",
org.eclipse.emf.common.ui;bundle-version="2.7.0",
org.eclipse.core.contenttype;bundle-version="3.4.100"
<extension
point="org.eclipse.compare.contentMergeViewers">
<viewer
class="org.eclipse.emf.compare.ui.viewer.content.ParameterizedContentMergeViewerCreator"
id="test.org.eclipse.emf.compare.ui.contentmergeviewer.ModelContentMergeViewer"/>
<contentTypeBinding
contentMergeViewerId="org.eclipse.emf.compare.ui.contentmergeviewer.ModelContentMergeViewer"
contentTypeId="test.org.eclipse.emf.compare.ui.contenttype.ModelContentType"/>
</extension>
<extension
point="org.eclipse.compare.structureMergeViewers">
<viewer
class="org.eclipse.emf.compare.ui.viewer.structure.ParameterizedStructureMergeViewerCreator"
extensions="*"
id="test.org.eclipse.emf.compare.ui.structuremergeviewer.ModelStructureMergeViewer"/>
<contentTypeBinding
structureMergeViewerId="test.org.eclipse.emf.compare.ui.structuremergeviewer.ModelStructureMergeViewer"
contentTypeId="test.org.eclipse.emf.compare.ui.contenttype.ModelContentType"/>
</extension>
<extension
point="org.eclipse.core.runtime.contentTypes">
<content-type
file-extensions="database,logicview,action,entity"
id="test.org.eclipse.emf.compare.ui.contenttype.ModelContentType"
name="modelContentTypeName"
priority="normal">
</content-type>
</extension>
参考链接:
1、[借用Eclipse 实现文本内容对比功能](http://lggege.iteye.com/blog/505837)

本文介绍了如何使用EMF-compare进行EMF模型文件的比较,实现对模型移动差异的高效处理,适用于团队协作与查看修改内容。详细步骤包括获取并导入EMF-compare源码、搭建环境、实现自定义EMF模型比较及配置扩展点等。通过设置特定的扩展点,EMF-compare能够呈现对比视图,直观展示两个EMF文件之间的差异。
399

被折叠的 条评论
为什么被折叠?



