天天看點

EMF模型檔案對比/比較(emf.compare)dev環境搭建:運作檢視Compare的效果:實作自定義EMF模型的比較:參考連結:

如果使用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的插件。

EMF模型檔案對比/比較(emf.compare)dev環境搭建:運作檢視Compare的效果:實作自定義EMF模型的比較:參考連結:

檢視Compare的效果:

EMF模型檔案對比/比較(emf.compare)dev環境搭建:運作檢視Compare的效果:實作自定義EMF模型的比較:參考連結:

實作自定義EMF模型的比較:

1、實作自定義EMF模型,使用Example提供的例子即可搭建一個簡單的EMF例子(我這裡通過Examples->EMF Validation Framework Plug-ins->General Validation Example建立);

2、為自己的模型定義添加EMF-Compare功能。

先看效果:

EMF模型檔案對比/比較(emf.compare)dev環境搭建:運作檢視Compare的效果:實作自定義EMF模型的比較:參考連結:

要實作這樣的功能,其實很簡單,隻要為檔案的字尾添加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)

繼續閱讀