如果使用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
/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)