Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EMF Compare/How To Open Compare Dialog With Comparison"

(Preparing the input)
(Preparing the configuration)
Line 65: Line 65:
 
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:
 
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.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.
+
*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 simpler.
  
 
Here is a code sample on how to create a CompareConfiguration suitable for EMFCompareEditorInput. The left, right and ancestor variables are the notifiers (EObject, Resource or ResourceSet) that have been given to EMFCompare to compute the Comparison (stored in the comparison variable).  
 
Here is a code sample on how to create a CompareConfiguration suitable for EMFCompareEditorInput. The left, right and ancestor variables are the notifiers (EObject, Resource or ResourceSet) that have been given to EMFCompare to compute the Comparison (stored in the comparison variable).  

Revision as of 07:43, 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 can be reused 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 simpler.

Here is a code sample on how to create a CompareConfiguration suitable for EMFCompareEditorInput. The left, right and ancestor variables are the notifiers (EObject, Resource or ResourceSet) that have been given to EMFCompare to compute the Comparison (stored in the comparison variable).

final CompareConfiguration configuration = new CompareConfiguration();
configuration.setProperty(EMFCompareConstants.COMPARE_RESULT, comparison);
configuration.setProperty(EMFCompareConstants.EDITING_DOMAIN, new EMFCompareEditingDomain(comparison, left, right, ancestor));

Wiring it all together

Then, you can call the black magic method from Eclipse Compare framework: CompareUI.openCompareDialog(CompareEditorInput).

final Notifier left = ..., right = ..., ancestor = ...;
final Comparison comparison =  ...;

final CompareConfiguration configuration = new CompareConfiguration();
configuration.setProperty(EMFCompareConstants.COMPARE_RESULT, comparison);
configuration.setProperty(EMFCompareConstants.EDITING_DOMAIN, new EMFCompareEditingDomain(comparison, left, right, ancestor));

final CompareEditorInput input = new EMFCompareEditorInput(configuration);
input.setTitle("My own compare dialog");

configuration.setContainer(input);
CompareUI.openCompareDialog(input);

Back to the top