Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EMF Compare/How To Open Compare Dialog With Comparison
This is only valid since release 2.1M4.
In this page you will learn how to open a dialog displaying the result of a comparison.
Contents
Preparing the input
The first thing to do is to choose an EMF Compare sub-implementation of the class of CompareEditorInput.
Two implementations are provided:
- ComparisonEditorInput, that should be use when you want to display a pre-computed Comparison (the results of EMFCompare).
- ComparisonScopeEditorInput, that should be use when you want to open the compare editor or dialog and to let it perform the comparison.
Both are available from the org.eclipse.emf.compare.ide.ui plug-in, in the package org.eclipse.emf.compare.ide.ui.internal.editor. This is still provisional API so we may break it any time.
Preparing the configuration
When instantiating an EMF Compare specific implementation of CompareEditorInput, you have to give it at least three paramaters:
- a CompareConfiguration. This is a standard CompareConfiguration (no specific implementation needed) so you just instantiated it like this:
CompareConfiguration configuration = new CompareConfiguration();
- an EMFCompareEditingDomain (located in plugin org.eclipse.emf.compare.edit). It is not an implementation of EditingDomain from EMF. It shares similar concepts (it has a command stack, it can create some commands) but is much simpler. You can create it through the factory method:
// ancestor may be null ICompareEditingDomain editingDomain = EMFCompareEditingDomain.create(left, right, ancestor);
You can even give your own command(s) stack(s) if you need to know about executed merge commands.
- An AdapterFactory used by the framework to adapt EObjects to be nicely displayed. Most of the time, a ComposedAdapterFactory with the global registry is sufficient as created in the example below:
AdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
Depending on the choosen sub-implementation of CompareEditorInput, you may need to provide additional parameters.
ComparisonEditorInput
You must provide a Comparison object, the result of the comparison computation of EMFCompare.
EMFCompare comparator = EMFCompare.builder().build(); Comparison comparison = comparator.compare(EMFCompare.createDefaultScope(left, right, ancestor));
ComparisonScopeEditorInput
You must provide the comparator (instance of EMFCompare) and the scope of the comparison.
EMFCompare comparator = EMFCompare.builder().build(); IComparisonScope scope = EMFCompare.createDefaultScope(left, right, ancestor);
Opening the compare UI
Then, you can call the black magic method from Eclipse Compare framework. You have two choices. You may either open the compare UI wihtin a modal dialog or within an editor. Just call one of the two following methods:
- CompareUI.openCompareEditorOnPage(CompareEditorInput, IWorkbenchPage), to open an editor.
- CompareUI.openCompareDialog(CompareEditorInput), to open a modal dialog.
End-to-end examples
With pre-computed comparison
public void compare(Notifier left, Notifier right, Notifier ancestor) { EMFCompare comparator = EMFCompare.builder().build(); Comparison comparison = comparator.compare(EMFCompare.createDefaultScope(left, right, ancestor)); ICompareEditingDomain editingDomain = EMFCompareEditingDomain.create(left, right, ancestor); AdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); CompareEditorInput input = new ComparisonEditorInput(new CompareConfiguration(), comparison, editingDomain, adapterFactory); CompareUI.openCompareDialog(input); // or CompareUI.openCompareEditor(input); }
With a comparison scope
public void compare(Notifier left, Notifier right, Notifier ancestor) { EMFCompare comparator = EMFCompare.builder().build(); IComparisonScope scope = EMFCompare.createDefaultScope(left, right, ancestor)); ICompareEditingDomain editingDomain = EMFCompareEditingDomain.create(left, right, ancestor); AdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); CompareEditorInput input = new ComparisonScopeEditorInput(new CompareConfiguration(), editingDomain, adapterFactory, comparator, scope); CompareUI.openCompareDialog(input); // or CompareUI.openCompareEditor(input); }