Skip to main content
Jump to: navigation, search

Difference between revisions of "EMF Compare FAQ"

(Is EMF Compare, as EMF, able to run outside of Eclispe ?)
(Is EMF Compare, as EMF, able to run outside of Eclispe ?)
Line 58: Line 58:
 
// Creates the match then the diff model for those two models
 
// Creates the match then the diff model for those two models
 
final MatchModel match = new DifferencesServices().modelMatch(model1, model2, new NullProgressMonitor());
 
final MatchModel match = new DifferencesServices().modelMatch(model1, model2, new NullProgressMonitor());
final DiffModel diff = new DiffMaker().doDiff(match, false);
+
final DiffModel diff = new DiffMaker().doDiff(match);
 
 
 
// Prints the results
 
// Prints the results

Revision as of 10:46, 10 August 2007

Users

My model is compared as a text-file, how can EMF compare know what file it should handle ?

Q : My model is compared as a text-file, how can EMF compare know what file it should handle ?

A : EMF compare uses a content-type to know if it should be started or not. By default this content-type is composed of *.ecore and *.uml file but you may add your own extension using the Preferences view / Global / Content-types and adding your file extension in the "Model File" content-type.


EMFComparePreferences-content-type.png

Developpers

How can I programatically add my model file extension in EMF Compare so that it is called automatically ?

Q : How can I programatically add my model file extension in EMF Compare so that it is called automatically ?

A : Using the "Model File" content-type defined with EMF Compare, here is a sample from a plugin.xml:

 <extension
        point="org.eclipse.core.contenttype.contentTypes">
     <file-association
           content-type="org.eclipse.emf.compare.ui.contenttype.ModelContentType"
           file-extensions="uml13"
           file-names="*"/>
  </extension>

Is EMF Compare, as EMF, able to run outside of Eclispe ?

Q : Is EMF Compare able to compare "in-memory" objects, and can it be run without Eclispe ?

A: Yes, here is a snippet doing that:

 /**
 * This application will try and launch an headless model comparison.
 * 
 * @author Cedric Brun <a href="mailto:cedric.brun@obeo.fr">cedric.brun@obeo.fr</a>
 */
public final class ExampleLauncher {
	/**
	 * This class doesn't need to be instantiated.
	 */
	private ExampleLauncher() {
		// prevents instantiation
	}

	/**
	 * Launcher of this application.
	 * 
	 * @param args
	 *            Arguments of the launch.
	 */
	public static void main(String[] args) {
		if (args.length == 2 && new File(args[0]).canRead() && new File(args[1]).canRead()) {
			// Creates the resourceSet where we'll load the models
			final ResourceSet resourceSet = new ResourceSetImpl();
			try {
				// Loads the two models passed as arguments
				final EObject model1 = ModelUtils.load(new File(args[0]), resourceSet);
				final EObject model2 = ModelUtils.load(new File(args[1]), resourceSet);
				
				// Creates the match then the diff model for those two models
				final MatchModel match = new DifferencesServices().modelMatch(model1, model2, new NullProgressMonitor());
				final DiffModel diff = new DiffMaker().doDiff(match);
				
				// Prints the results
				try {
					System.out.println(ModelUtils.serialize(match));
					System.out.println(ModelUtils.serialize(diff));
				} catch (IOException e) {
					e.printStackTrace();
				}
				
//				System.out.println("saving diff as \"result.diff\"");
//				ModelUtils.save(diff, "result.diff");
//				System.out.println("saving match as \"result.match\"");
//				ModelUtils.save(match, "result.match");
				
				// Serializes the result as "result.emfdiff" in the directory this class has been called from.
				System.out.println("saving emfdiff as \"result.emfdiff\""); //$NON-NLS-1$
				final ModelInputSnapshot snapshot = DiffFactory.eINSTANCE.createModelInputSnapshot();
				snapshot.setDate(Calendar.getInstance().getTime());
				snapshot.setMatch(match);
				snapshot.setDiff(diff);
				ModelUtils.save(snapshot, "result.emfdiff"); //$NON-NLS-1$
			} catch (IOException e) {
				// shouldn't be thrown
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("usage : Launcher <Model1> <Model2>"); //$NON-NLS-1$
		}
	}
}

Back to the top