If you have two EMF models contained in two EObjects you can compare them easily by feeding the Comparator with them as shown below.
/*
* This method compares two emf models given as EObjects.
* It also maps both models and computes the differences between them.
*/
public void compare(EObject model1, EObject model2) {
//this Hashtable contains the weighting-scheme for the comparators used
//for detailed information please refer to the documentation.
Hashtable<String, Double> weightings = null;
//indicates whether to use a full cross product between both models for comparison
boolean crossProd = false;
//indicates whether to use the position of compared elements for critical
//mapping-decisions
boolean useTreePos = false;
//now initialize the ModelComparator with the weighting-scheme, and the flags for
//cross product and tree position usage
ModelComparator comparator = new ModelComparator(weightings, crossProd, treePos);
//after that you have to initialize both models
//in this step the comparator builds up the models for comparison
comparator.initModels(model1, model2);
//calling the method 'compareTo()' will execute the matching of both models and will
//return a Matching containing pairs of elements with the associated matching-values
Matching matching =
comparator.compareTo(comparator.getLeftModel(), comparator.getRightModel());
//after that you can retrieve the mapping and the difference-model
//therefore you just have to initialize the ModelMatcher with the matching
//and the comparator from the previous step.
ModelMatcher matcher = new ModelMatcher(matching, comparator);
//then you can easily get the mapping and diff by calling the appropriate methods
//both results are given as EMF models for ensuring the ease of your further work
MapModel mapping = matcher.getMapping();
DiffModel diffModel = matcher.getDiff(mapping);
}
The next snippet shows you how to compare two models which are serialized to files.
/*
* This method compares two emf models which are serialized to the given files.
* It also maps both models and computes the differences between them.
*/
public void compare(String model1Path, String model2Path, String metaModelPath) {
//this Hashtable contains the weighting-scheme for the comparators used
//for detailed information please refer to the documentation.
Hashtable<String, Double> weightings = null;
//indicates whether to use a full cross product between both models for comparison
boolean crossProd = false;
//indicates whether to use the position of compared elements for critical
//mapping-decisions
boolean useTreePos = false;
//now initialize the ModelComparator with the weighting-scheme, and the flags for
//cross product and tree position usage
ModelComparator comparator = new ModelComparator(weightings, crossProd, treePos);
/*
* after that you have to initialize both models
* in this step the comparator builds up the models for comparison
* just hand over the paths of both models (the path for the metamodel can be ""
* because the mm is currently not used for comparison
*/
comparator.initModels(model1Path, model2Path, metaModelPath);
//calling the method 'compareTo()' will execute the matching of both models and will
//return a Matching containing pairs of elements with the associated matching-values
Matching matching =
comparator.compareTo(comparator.getLeftModel(), comparator.getRightModel());
/*
* after that you can retrieve the mapping and the difference-model
* therefore you just have to initialize the ModelMatcher with the matching
* and the comparator from the previous step.
*/
ModelMatcher matcher = new ModelMatcher(matching, comparator);
//then you can easily get the mapping and diff by calling the appropriate methods
//both results are given as EMF models for ensuring the ease of your further work
MapModel mapping = matcher.getMapping();
DiffModel diffModel = matcher.getDiff(mapping);
}