blob: 350a1305bd8e7abe73faf05e5500d283e0c5a0fb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 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.rcp.ui.mergeviewer.item;
import com.google.common.base.Predicate;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.rcp.ui.mergeviewer.IMergeViewer.MergeViewerSide;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
import org.eclipse.emf.ecore.EObject;
/**
* An IMergeViewerItem associate a Diff and its left side, right side and ancestor side values. An
* IMergeViewerItem also known its parent.
*
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
* @since 4.0
*/
public interface IMergeViewerItem extends Adapter {
/**
* A predicate to know if the given Item is an insertion point.
*/
Predicate<IMergeViewerItem> IS_INSERTION_POINT = new Predicate<IMergeViewerItem>() {
public boolean apply(IMergeViewerItem item) {
return item.isInsertionPoint();
}
};
/**
* The Diff associated with the Item.
*
* @return the Diff associated with the Item.
*/
Diff getDiff();
/**
* Returns the left side value of the Diff.
*
* @return the left side value of the Diff.
*/
Object getLeft();
/**
* Returns the right side value of the Diff.
*
* @return the right side value of the Diff.
*/
Object getRight();
/**
* Returns the ancestor side value of the Diff.
*
* @return the ancestor side value of the Diff.
*/
Object getAncestor();
/**
* Returns the appropriate value according to the given side.
*
* @param side
* the given side.
* @return the appropriate value according to the given side.
*/
Object getSideValue(MergeViewerSide side);
/**
* Returns the side of the Diff.
*
* @return the side of the Diff.
*/
MergeViewerSide getSide();
/**
* Returns true if the Item is an insertion point, false otherwise.
*
* @return true if the Item is an insertion point, false otherwise.
*/
boolean isInsertionPoint();
/**
* Returns the parent of this element. If the object is the root of a hierarchy <code>null</code> is
* returned.
*
* @return the parent of this element, or <code>null</code> if the element has no parent
*/
Container getParent();
/**
* An IMergeViewerItem.Container knows its children.
*
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
* @since 4.0
* @deprecated IMergeViewerItem.Container is no longer needed since its functionality is now provided by
* {@link org.eclipse.emf.compare.rcp.ui.mergeviewer.item.provider.IMergeViewerItemContentProvider
* IMergeViewerItemContentProvider}. Use an {@link IMergeViewerItem} instead.
*/
@Deprecated
interface Container extends IMergeViewerItem {
/**
* Returns whether this container has at least one child. In some cases this methods avoids having to
* call the potential more costly <code>getChildren</code> method.
*
* @param group
* the active group provider.
* @param predicate
* the active predicate.
* @return <code>true</code> if this container has at least one child
*/
boolean hasChildren(IDifferenceGroupProvider group, Predicate<? super EObject> predicate);
/**
* Returns the children of this container. If this container has no children an empty array is
* returned (not <code>null</code>).
*
* @param group
* the active group provider.
* @param predicate
* the active predicate.
* @return the children of this container as an array
*/
IMergeViewerItem[] getChildren(IDifferenceGroupProvider group, Predicate<? super EObject> predicate);
}
}