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 ?)
(Redirecting to EMF Compare/FAQ)
 
(31 intermediate revisions by 6 users not shown)
Line 1: Line 1:
=Users=
+
#REDIRECT[[EMF_Compare/FAQ]]
====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 <tt>Preferences view / Global / Content-types</tt> and adding your file extension in the "Model File" content-type.
+
 
+
 
+
[[Image: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:
+
<pre>
+
<extension
+
        point="org.eclipse.core.contenttype.contentTypes">
+
    <file-association
+
          content-type="org.eclipse.emf.compare.ui.contenttype.ModelContentType"
+
          file-extensions="uml13"
+
          file-names="*"/>
+
  </extension>
+
</pre>
+
 
+
====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:
+
<pre>
+
  /**
+
* 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 {
+
private ExampleLauncher() {
+
// prevents instantiation
+
}
+
 
+
/**
+
* Loads a model from an {@link org.eclipse.emf.common.util.URI URI} in a given {@link ResourceSet}.
+
*
+
* @param file
+
*            {@link java.io.File File} containing the model to be loaded.
+
* @param resourceSet
+
*            The {@link ResourceSet} to load the model in.
+
* @return The model loaded from the file.
+
* @throws IOException
+
*            If the given file does not exist.
+
*/
+
@SuppressWarnings("unchecked")
+
public static EObject load(File file, ResourceSet resourceSet) throws IOException {
+
final URI modelURI = URI.createFileURI(file.getPath());
+
EObject result = null;
+
 
+
String fileExtension = modelURI.fileExtension();
+
if (fileExtension == null || fileExtension.length() == 0) {
+
fileExtension = Resource.Factory.Registry.DEFAULT_EXTENSION;
+
}
+
 
+
final Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
+
final Object resourceFactory = reg.getExtensionToFactoryMap().get(fileExtension);
+
if (resourceFactory != null) {
+
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(fileExtension, resourceFactory);
+
} else {
+
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(fileExtension, new XMIResourceFactoryImpl());
+
}
+
 
+
final Resource modelResource = resourceSet.createResource(modelURI);
+
modelResource.load(Collections.EMPTY_MAP);
+
if (modelResource.getContents().size() > 0)
+
result = (EObject)modelResource.getContents().get(0);
+
return result;
+
}
+
 
+
/**
+
* 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()) {
+
final ResourceSet resourceSet = new ResourceSetImpl();
+
try {
+
final EObject model1 = load(new File(args[0]), resourceSet);
+
final EObject model2 = load(new File(args[1]), resourceSet);
+
final MatchModel match = new DifferencesServices().modelMatch(model1, model2, new NullProgressMonitor());
+
final DiffModel diff = new DiffMaker().doDiff(match, false);
+
+
try {
+
System.out.println(ModelUtils.serialize(match));
+
System.out.println(ModelUtils.serialize(diff));
+
} catch (IOException e) {
+
e.printStackTrace();
+
}
+
} catch (IOException e) {
+
// cannot be thrown
+
e.printStackTrace();
+
} catch (InterruptedException e) {
+
e.printStackTrace();
+
}
+
} else {
+
System.out.println("usage : Launcher <Model1> <Model2>"); //$NON-NLS-1$
+
}
+
}
+
}
+
</pre>
+

Latest revision as of 09:48, 26 July 2010

Redirect to:

Back to the top