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.
Difference between revisions of "EMF Compare/How To Open Compare Dialog With Comparison"
(→Preparing the input) |
|||
Line 18: | Line 18: | ||
* A custom implementation of the editor input. | * A custom implementation of the editor input. | ||
*/ | */ | ||
− | class | + | class EMFCompareEditorInput extends CompareEditorInput { |
private final Comparison comparison; | private final Comparison comparison; | ||
Line 59: | Line 59: | ||
}; | }; | ||
} | } | ||
+ | </pre> | ||
+ | |||
+ | == Preparing the configuration == | ||
+ | |||
+ | When instantiating an EMFCompareEditorInput, you have to give him a [http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcompare%2FCompareConfiguration.html CompareConfiguration]. This is a standard CompareConfiguration (no specific implementation needed). But you need to fill two EMFCompare specific properties: | ||
+ | *EMFCompareConstants.COMPARE_RESULT, the comparison itself. | ||
+ | *EMFCompareConstants.EDITING_DOMAIN, an EMFCompareEditingDomain. It is not an implementation of [http://download.eclipse.org/modeling/emf/emf/javadoc/2.5.0/org/eclipse/emf/edit/domain/EditingDomain.html EditingDomain] from EMF. It shares similar concepts (it has a command stack, it can create some commands) but is much more simpler. | ||
+ | |||
+ | Here is a code sample on how to create a CompareConfiguration suitable for EMFCompareEditorInput. | ||
+ | |||
+ | <pre> | ||
+ | final CompareConfiguration configuration = new CompareConfiguration(); | ||
+ | configuration.setProperty(EMFCompareConstants.COMPARE_RESULT, comparison); | ||
+ | configuration.setProperty(EMFCompareConstants.EDITING_DOMAIN, new EMFCompareEditingDomain(comparison, left, right, ancestor)); | ||
</pre> | </pre> |
Revision as of 04:47, 2 October 2012
This is only valid for the 2.0 release stream.
In this page you will learn how to open a dialog displaying the result of a comparison.
Preparing the input
The first thing to do is to implement your own class of CompareEditorInput.
You must override two methods :
- prepareInput(IProgressMonitor), that must return the Comparison object (result from the EMFCompare computation) adapted as an IDiffElement
- createDiffViewer(Composite), that must return a new instance of EMFCompareStructureMergeViewer.
Here is a sample implementation that you can reuse as is :
/** * A custom implementation of the editor input. */ class EMFCompareEditorInput extends CompareEditorInput { private final Comparison comparison; private final AdapterFactory adapterFactory; /** * Constructor. * * @param configuration * the compare configuration * @param comparison * the comparison */ public CustomCompareEditorInput(CompareConfiguration configuration) { super(configuration); this.comparison = (Comparison)configuration.getProperty(EMFCompareConstants.COMPARE_RESULT); this.adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); } /** * {@inheritDoc} * * @see org.eclipse.compare.CompareEditorInput#prepareInput(org.eclipse.core.runtime.IProgressMonitor) */ @Override protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { return adapterFactory.adapt(this.comparison, IDiffElement.class); } /** * {@inheritDoc} * * @see org.eclipse.compare.CompareEditorInput#createDiffViewer(org.eclipse.swt.widgets.Composite) */ @Override public Viewer createDiffViewer(Composite parent) { return new EMFCompareStructureMergeViewer(parent, getCompareConfiguration()); }; }
Preparing the configuration
When instantiating an EMFCompareEditorInput, you have to give him a CompareConfiguration. This is a standard CompareConfiguration (no specific implementation needed). But you need to fill two EMFCompare specific properties:
- EMFCompareConstants.COMPARE_RESULT, the comparison itself.
- EMFCompareConstants.EDITING_DOMAIN, an EMFCompareEditingDomain. 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 more simpler.
Here is a code sample on how to create a CompareConfiguration suitable for EMFCompareEditorInput.
final CompareConfiguration configuration = new CompareConfiguration(); configuration.setProperty(EMFCompareConstants.COMPARE_RESULT, comparison); configuration.setProperty(EMFCompareConstants.EDITING_DOMAIN, new EMFCompareEditingDomain(comparison, left, right, ancestor));