/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.compare;
import java.util.List;
import org.eclipse.emf.ecore.EReference;
/**
* This interface represents a factory for {@link EObjectMatcher} instances. Extensions of the
* {@link org.teiid.designer.core.ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY#UNIQUE_ID }
*
* @since 8.0
*/
public interface EObjectMatcherFactory {
/**
* Create the {@link EObjectMatcher} instances that should be used to find matches between
* root-level objects in models. Many implementations might return the same
* matchers for all EReferences in a metaclass, and many implementations might return the same
* matchers for all EReferences in a metamodel. This method should return an empty list
* if this factory has no matchers for root-level objects.
* @return the list of EObjectMatcher instances; may not be null, but may be empty
*/
List createEObjectMatchersForRoots();
/**
* Create the {@link EObjectMatcher} instances that should be used to find matches between
* values of the supplied {@link EReference}. Many implementations might return the same
* matchers for all EReferences in a metaclass, and many implementations might return the same
* matchers for all EReferences in a metamodel. This method should return an empty list
* if this factory has no matchers for the supplied feature.
* @param reference the reference; never null
* @return the list of EObjectMatcher instances; may not be null, but may be empty
*/
List createEObjectMatchers( final EReference reference );
}