Home » Modeling » EMF » EMF Compare plugin does not compile
EMF Compare plugin does not compile [message #1193240] |
Mon, 18 November 2013 00:45 |
Gabriel P Messages: 3 Registered: September 2013 |
Junior Member |
|
|
am trying to encode the emf compare plugin presents on (Standalone part):
http://www.eclipse.org/emf/compare/doc/21/developer/Default%20Behavior%20and%20Extensibility.html
But, when I run my code, I got the message:
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:192)
at org.eclipse.emf.compare.impl.Comparador.<init>(Comparador.java:43)
at org.eclipse.emf.compare.impl.Mcompare.main(Mcompare.java:78)
What I do? How I solve this problem?
Line problem:
public Comparador(IEObjectMatcher matcher, IComparisonFactory comparisonFactory)
{
this.eObjectMatcher = checkNotNull(matcher);
this.comparisonFactory = checkNotNull(comparisonFactory);
}
Full code
package org.eclipse.emf.compare.impl.gabriel;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.CompareFactory;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.match.DefaultComparisonFactory;
import org.eclipse.emf.compare.match.DefaultEqualityHelperFactory;
import org.eclipse.emf.compare.match.DefaultMatchEngine;
import org.eclipse.emf.compare.match.IComparisonFactory;
import org.eclipse.emf.compare.match.IMatchEngine;
import org.eclipse.emf.compare.match.eobject.CachingDistance;
import org.eclipse.emf.compare.match.eobject.EditionDistance;
import org.eclipse.emf.compare.match.eobject.IEObjectMatcher;
import org.eclipse.emf.compare.match.eobject.IdentifierEObjectMatcher;
import org.eclipse.emf.compare.match.eobject.ProximityEObjectMatcher;
import org.eclipse.emf.compare.match.resource.IResourceMatcher;
import org.eclipse.emf.compare.match.resource.StrategyResourceMatcher;
import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.emf.compare.utils.UseIdentifiers;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
public class Comparador implements IMatchEngine {
public static final int DEFAULT_EOBJECT_URI_CACHE_MAX_SIZE = 1024;
private final IEObjectMatcher eObjectMatcher;
private final IComparisonFactory comparisonFactory;
public Comparador(IEObjectMatcher matcher, IComparisonFactory comparisonFactory) {
// não pode passar valor nulo por parâmetro
this.eObjectMatcher = checkNotNull(matcher);
this.comparisonFactory = checkNotNull(comparisonFactory);
}
public Comparison match(IComparisonScope scope, Monitor monitor) {
Comparison comparison = comparisonFactory.createComparison();
final Notifier left = scope.getLeft();
final Notifier right = scope.getRight();
final Notifier origin = scope.getOrigin();
comparison.setThreeWay(origin != null);
match(comparison, scope, left, right, origin, monitor);
return comparison;
}
protected void match(Comparison comparison, IComparisonScope scope, final Notifier left,
final Notifier right, final Notifier origin, Monitor monitor) {
// FIXME side-effect coding
if (left instanceof ResourceSet || right instanceof ResourceSet) {
match(comparison, scope, (ResourceSet)left, (ResourceSet)right, (ResourceSet)origin, monitor);
} else if (left instanceof Resource || right instanceof Resource) {
match(comparison, scope, (Resource)left, (Resource)right, (Resource)origin, monitor);
} else if (left instanceof EObject || right instanceof EObject) {
match(comparison, scope, (EObject)left, (EObject)right, (EObject)origin, monitor);
} else {
// TODO Cannot happen ... for now. Should we log an exception?
}
}
protected void match(Comparison comparison, IComparisonScope scope, ResourceSet left, ResourceSet right,
ResourceSet origin, Monitor monitor) {
final Iterator<? extends Resource> leftChildren = scope.getCoveredResources(left);
final Iterator<? extends Resource> rightChildren = scope.getCoveredResources(right);
final Iterator<? extends Resource> originChildren;
if (origin != null) {
originChildren = scope.getCoveredResources(origin);
} else {
originChildren = Iterators.emptyIterator();
}
final IResourceMatcher resourceMatcher = createResourceMatcher();
final Iterable<MatchResource> mappings = resourceMatcher.createMappings(leftChildren, rightChildren,
originChildren);
final List<Iterator<? extends EObject>> leftIterators = Lists.newLinkedList();
final List<Iterator<? extends EObject>> rightIterators = Lists.newLinkedList();
final List<Iterator<? extends EObject>> originIterators = Lists.newLinkedList();
for (MatchResource mapping : mappings) {
comparison.getMatchedResources().add(mapping);
final Resource leftRes = mapping.getLeft();
final Resource rightRes = mapping.getRight();
final Resource originRes = mapping.getOrigin();
if (leftRes != null) {
leftIterators.add(scope.getCoveredEObjects(leftRes));
}
if (rightRes != null) {
rightIterators.add(scope.getCoveredEObjects(rightRes));
}
if (originRes != null) {
originIterators.add(scope.getCoveredEObjects(originRes));
}
}
final Iterator<? extends EObject> leftEObjects = Iterators.concat(leftIterators.iterator());
final Iterator<? extends EObject> rightEObjects = Iterators.concat(rightIterators.iterator());
final Iterator<? extends EObject> originEObjects = Iterators.concat(originIterators.iterator());
getEObjectMatcher().createMatches(comparison, leftEObjects, rightEObjects, originEObjects, monitor);
}
protected void match(Comparison comparison, IComparisonScope scope, Resource left, Resource right,
Resource origin, Monitor monitor) {
// Our "roots" are Resources. Consider them matched
final MatchResource match = CompareFactory.eINSTANCE.createMatchResource();
match.setLeft(left);
match.setRight(right);
match.setOrigin(origin);
if (left != null) {
URI uri = left.getURI();
if (uri != null) {
match.setLeftURI(uri.toString());
}
}
if (right != null) {
URI uri = right.getURI();
if (uri != null) {
match.setRightURI(uri.toString());
}
}
if (origin != null) {
URI uri = origin.getURI();
if (uri != null) {
match.setOriginURI(uri.toString());
}
}
comparison.getMatchedResources().add(match);
// We need at least two resources to match them
if (atLeastTwo(left == null, right == null, origin == null)) {
/*
* TODO But if we have only one resource, which is then unmatched, should we not still do
* something with it?
*/
return;
}
final Iterator<? extends EObject> leftEObjects;
if (left != null) {
leftEObjects = scope.getCoveredEObjects(left);
} else {
leftEObjects = Iterators.emptyIterator();
}
final Iterator<? extends EObject> rightEObjects;
if (right != null) {
rightEObjects = scope.getCoveredEObjects(right);
} else {
rightEObjects = Iterators.emptyIterator();
}
final Iterator<? extends EObject> originEObjects;
if (origin != null) {
originEObjects = scope.getCoveredEObjects(origin);
} else {
originEObjects = Iterators.emptyIterator();
}
getEObjectMatcher().createMatches(comparison, leftEObjects, rightEObjects, originEObjects, monitor);
}
protected void match(Comparison comparison, IComparisonScope scope, EObject left, EObject right,
EObject origin, Monitor monitor) {
if (left == null || right == null) {
throw new IllegalArgumentException();
}
final Iterator<? extends EObject> leftEObjects = Iterators.concat(Iterators.singletonIterator(left),
scope.getChildren(left));
final Iterator<? extends EObject> rightEObjects = Iterators.concat(
Iterators.singletonIterator(right), scope.getChildren(right));
final Iterator<? extends EObject> originEObjects;
if (origin != null) {
originEObjects = Iterators.concat(Iterators.singletonIterator(origin), scope.getChildren(origin));
} else {
originEObjects = Iterators.emptyIterator();
}
getEObjectMatcher().createMatches(comparison, leftEObjects, rightEObjects, originEObjects, monitor);
}
protected IResourceMatcher createResourceMatcher() {
return new StrategyResourceMatcher();
}
protected final IEObjectMatcher getEObjectMatcher() {
return eObjectMatcher;
}
private static boolean atLeastTwo(boolean condition1, boolean condition2, boolean condition3) {
// CHECKSTYLE:OFF This expression is alone in its method, and documented.
return condition1 && (condition2 || condition3) || (condition2 && condition3);
// CHECKSTYLE:ON
}
public static IMatchEngine create(UseIdentifiers useIDs) {
final IComparisonFactory comparisonFactory = new DefaultComparisonFactory(
new DefaultEqualityHelperFactory());
final IEObjectMatcher matcher = createDefaultEObjectMatcher(useIDs);
final IMatchEngine matchEngine = new DefaultMatchEngine(matcher, comparisonFactory);
return matchEngine;
}
public static IEObjectMatcher createDefaultEObjectMatcher(UseIdentifiers useIDs) {
final IEObjectMatcher matcher;
final EditionDistance editionDistance = new EditionDistance();
final CachingDistance cachedDistance = new CachingDistance(editionDistance);
switch (useIDs) {
case NEVER:
matcher = new ProximityEObjectMatcher(cachedDistance);
break;
case ONLY:
matcher = new IdentifierEObjectMatcher();
break;
case WHEN_AVAILABLE:
// fall through to default
default:
// Use an ID matcher, delegating to proximity when no ID is available
final IEObjectMatcher contentMatcher = new ProximityEObjectMatcher(cachedDistance);
matcher = new IdentifierEObjectMatcher(contentMatcher);
break;
}
return matcher;
}
}
Thank you very much!
[Updated on: Wed, 04 December 2013 16:13] Report message to a moderator
|
|
|
Goto Forum:
Current Time: Thu Apr 25 13:30:02 GMT 2024
Powered by FUDForum. Page generated in 0.03140 seconds
|