blob: e882a56db2782f23c4c917510a1a7c63018908c9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.compare.scope;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
/**
* This class defines the expected contract of EMF Compare scopes.
* <p>
* The scope will be called on all three root Notifiers in order to determine the range of a given comparison;
* only those Notifiers will be matched by EMF Compare.
* </p>
* <p>
* An implementation using Predicates to filter out the children lists can be sub-classed instead, see
* {@link FilterComparisonScope}.
* </p>
*
* @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
* @see AbstractComparisonScope
* @see FilterComparisonScope
*/
public interface IComparisonScope {
/**
* This will be used by EMF Compare in order to retrieve the left "root" Notifier of this comparison; i.e
* the first object to be considered by the match engine, and from which the iteration over children
* should start.
*
* @return The left root of this comparison. May not be <code>null</code>.
*/
Notifier getLeft();
/**
* This will be used by EMF Compare in order to retrieve the right "root" Notifier of this comparison; i.e
* the first object to be considered by the match engine, and from which the iteration over children
* should start.
*
* @return The right root of this comparison. May not be <code>null</code>.
*/
Notifier getRight();
/**
* If EMF Compare should consider a Notifier as being the common ancestor of the "left" and "right"
* objects to compare, it should be returned from here.
*
* @return The origin root for this comparison. May be <code>null</code>.
*/
Notifier getOrigin();
/**
* This will be used by EMF Compare in order to determine the Resources that should be considered part of
* the comparison when it is launched on the given resource set.
* <p>
* Do note that this will only be called once per Resource. We will retrieve the set of EMF resources to
* include in the comparison, match them, then use {@link #getCoveredEObjects(Resource)} in order to
* determine the actual EObjects to cover during that comparison.
* </p>
*
* @param resourceSet
* The resource set for which we need to know all resources spanned by the comparison.
* @return An iterator over the {@link Resource}s which are part of this scope.
*/
Iterator<? extends Resource> getCoveredResources(ResourceSet resourceSet);
/**
* This will be used by EMF Compare in order to determine the EObjects that it should iterate over.
* <p>
* Do note that this will only be called once per comparison. EMF Compare expects this to return the whole
* set of EObjects that should be covered by the comparison when launched on the given Resource.
* </p>
*
* @param resource
* The resource for which we need to determine all EObjects spanned by the comparison.
* @return An iterator over the {@link EObject}s which are part of this scope.
*/
Iterator<? extends EObject> getCoveredEObjects(Resource resource);
/**
* This will be used by EMF Compare in order to know which EObjects should be considered to be part of the
* comparison scope when it is launched on the given EObject.
* <p>
* Do note that this will only be called once per comparison on EObjects, and never for comparisons
* launched on {@link ResourceSet}s or {@link Resource}s. EMF Compare expects the whole set of EObject
* that should be covered by the comparison to be returned by this.
* </p>
*
* @param eObject
* The EObject for which we need to determine the comparison scope.
* @return An iterator over the {@link EObject}s which are part of this scope.
*/
Iterator<? extends EObject> getChildren(EObject eObject);
/**
* This will be used by EMF Compare in order to retrieve the namespace uris detected in the scope.
*
* @return The namespace uris.
*/
Set<String> getNsURIs();
/**
* This will be used by EMF Compare in order to retrieve the resource uris detected in the scope.
*
* @return The resource uris.
*/
Set<String> getResourceURIs();
}