blob: 59eaa63c1ecf8ca3f36b6c9ca9bc14ce8a896a5d [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.match.eobject;
import java.util.Map;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.ecore.EObject;
/**
* An EObjectIndex has for responsability to store/remove EObjects and return the closest EObject from another
* one (each one being registered with a different Side.
*
* @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a>
*/
public interface EObjectIndex {
/**
* return the list of EObjects of a given side still available in the index.
*
* @param side
* the side we are looking for.
* @return the list of EObjects of a given side still available in the index.
*/
Iterable<EObject> getValuesStillThere(Side side);
/**
* Return the closest EObjects found in other sides than the one given.
*
* @param inProgress
* the comparison currently being computed. It will not be changed directly but only queried to
* know if some element has already been matched or not.
* @param eObj
* the base EObject used to lookup similar ones.
* @param side
* the side of the passed EObject.
* @return a map of Side, EObjects, returning all the found objects (and the passed one) which are the
* closests.
*/
Map<Side, EObject> findClosests(Comparison inProgress, EObject eObj, Side side);
/**
* Remove an object from the index.
*
* @param eObj
* object to remove.
* @param side
* Side in which this object was.
*/
void remove(EObject eObj, Side side);
/**
* Register an Object in the index with the given side.
*
* @param eObj
* the {@link EObject} to register.
* @param side
* the side in which it should be registered.
*/
void index(EObject eObj, Side side);
/**
* An enumeration used in the API to specify sides.
*/
enum Side {
/**
* the left side.
*/
LEFT,
/**
* The right side.
*/
RIGHT,
/**
* The origin side (also known as ancestor).
*/
ORIGIN
}
}