org.eclipse.team.core/src/org/eclipse/team/core/diff/ITwoWayDiff.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (download) (annotate)
Wed Jun 4 15:59:35 2008 UTC (17 months, 3 weeks ago) by tzarna
Branch: MAIN
CVS Tags: I20080604, I20080605, I20090323-1100, I20081202, I20090306-1030, I20090311-0800, I20080819, I20091006-0800, I20090427-0800, I20091013-0800, I20090407-0800, I20090721-0750, I20090803-1300, r34x_20080827, I20090630-2000, I20090224-0800, I20091028-0800, r34x_20080115, I20090331-0800, I20090929-0800, I20080803, I20090303-0800, I20080804, r34x_20090115, I20090825-0800, I20081014, r34x_20080107, I20090514-0808, I20090126-0800, R3_4, R3_5, I20080715, I20090714-0800, r34x_20080808, I20090521-1750, I20090522-1010, I20081021, I20090922-0800, r34x_20080723, I20090113, I20080820, I20080722, I20080826, I20090309-1300, I20090421, I20090916-0800, I20090428, I20090211, I20090106, I20080923, R3_5_1, I20090429-0800, I20091124-0800, I20090210-0800, I20081029, I20090309-1800, I20081125, I20090527-0620, I20091020-0800, I20080930, I20090217-0800, I20091117-0800, I20081216, I20081210, r34x_20081015, I20081118, I20090508-2000, r34x_20080902, I20090120, r35x_20090930-0800, I20090511-2000, I20090128-0800, I20080909, I20091026-1300, R3_4_2, R3_4_1, v20090210-0615, I20090430-0408, I20080915, I20080917, I20090317-1800, HEAD
Branch point for: R3_4_maintenance, R3_5_maintenance
Changes since 1.9: +6 -7 lines
bug 234375: Additional adopting of API Tooling by Team/Core
/*******************************************************************************
 * Copyright (c) 2000, 2008 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.team.core.diff;

import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IPath;
import org.eclipse.team.core.diff.provider.TwoWayDiff;

/**
 * A two-way diff represents the changes between two states of the same object,
 * referred to as the "before" state and the "after" state. It is modeled after
 * the {@link IResourceDelta} but is simplified.
 * 
 * @see IDiffTree
 * 
 * @since 3.2
 * @noimplement This interface is not intended to be implemented by clients.
 *              Clients that need to create two-way diffs should instead use or
 *              subclass {@link TwoWayDiff}
 */
public interface ITwoWayDiff extends IDiff {

	/*====================================================================
	 * Constants which describe resource changes:
	 *====================================================================*/

	/**
	 * Change constant (bit mask) indicating that the content of the object has changed.
	 * 
	 * @see ITwoWayDiff#getFlags() 
	 */
	public static final int CONTENT = 0x100;

	/**
	 * Change constant (bit mask) indicating that the object was moved from another location.
	 * The location in the "before" state can be retrieved using <code>getFromPath()</code>.
	 * 
	 * @see ITwoWayDiff#getFlags()
	 */
	public static final int MOVE_FROM = 0x200;

	/**
	 * Change constant (bit mask) indicating that the object was moved to another location.
	 * The location in the new state can be retrieved using <code>getToPath()</code>.
	 * 
	 * @see ITwoWayDiff#getFlags()
	 */
	public static final int MOVE_TO = 0x400;

	/**
	 * Change constant (bit mask) indicating that the object was copied from another location.
	 * The location in the "before" state can be retrieved using <code>getFromPath()</code>.
	 * 
	 * @see ITwoWayDiff#getFlags()
	 */
	public static final int COPY_FROM = 0x800;
	
	/**
	 * Change constant (bit mask) indicating that the object has been
	 * replaced by another at the same location (i.e., the object has 
	 * been deleted and then added). 
	 * 
	 * @see ITwoWayDiff#getFlags()
	 */
	public static final int REPLACE = 0x1000;
	
	/**
	 * Returns flags which describe in more detail how a object has been affected.
	 * <p>
	 * The following codes (bit masks) are used when kind is <code>CHANGE</code>, and
	 * also when the object is involved in a move:
	 * <ul>
	 * <li><code>CONTENT</code> - The bytes contained by the resource have 
	 * 		been altered.</li>
	 * <li><code>REPLACE</code> - The object
	 *  was deleted (either by a delete or move), and was subsequently re-created
	 *  (either by a create, move, or copy).</li>
	 * </ul>
	 * The following code is only used if kind is <code>REMOVE</code>
	 * (or <code>CHANGE</code> in conjunction with <code>REPLACE</code>):
	 * <ul>
	 * <li><code>MOVE_TO</code> - The object has moved.
	 * 	<code>getToPath</code> will return the path of where it was moved to.</li>
	 * </ul>
	 * The following code is only used if kind is <code>ADD</code>
	 * (or <code>CHANGE</code> in conjunction with <code>REPLACE</code>):
	 * <ul>
	 * <li><code>MOVE_FROM</code> - The object has moved.
	 * 	<code>getFromPath</code> will return the path of where it was moved from.</li>
	 * <li><code>COPY_FROM</code> - The object has copied.
	 * 	<code>getFromPath</code> will return the path of where it was copied from.</li>
	 * </ul>
	 * A simple move operation would result in the following diff information.
	 * If a object is moved from A to B (with no other changes to A or B), 
	 * then A will have kind <code>REMOVE</code>, with flag <code>MOVE_TO</code>, 
	 * and <code>getToPath</code> on A will return the path for B.  
	 * B will have kind <code>ADD</code>, with flag <code>MOVE_FROM</code>, 
	 * and <code>getFromPath</code> on B will return the path for A.
	 * B's other flags will describe any other changes to the resource, as compared
	 * to its previous location at A.
	 * </p>
	 * <p>
	 * Note that the move flags only describe the changes to a single object; they
	 * don't necessarily imply anything about the parent or children of the object.  
	 * If the children were moved as a consequence of a subtree move operation, 
	 * they will have corresponding move flags as well.
	 * </p>
	 *
	 * @return the flags
	 * @see ITwoWayDiff#CONTENT
	 * @see ITwoWayDiff#MOVE_TO
	 * @see ITwoWayDiff#MOVE_FROM
	 * @see ITwoWayDiff#COPY_FROM
	 * @see ITwoWayDiff#REPLACE
	 * @see #getKind()
	 * @see #getFromPath()
	 * @see #getToPath()
	 */
	public int getFlags();
	
	/**
	 * Returns the full path (in the "before" state) from which this resource 
	 * (in the "after" state) was moved.  This value is only valid 
	 * if the <code>MOVE_FROM</code> change flag is set; otherwise,
	 * <code>null</code> is returned.
	 * <p>
	 * Note: the returned path never has a trailing separator.
	 *
	 * @return a path, or <code>null</code>
	 * @see #getToPath()
	 * @see #getPath()
	 * @see #getFlags()
	 */
	public IPath getFromPath();

	/**
	 * Returns the full path (in the "after" state) to which this resource 
	 * (in the "before" state) was moved.  This value is only valid if the 
	 * <code>MOVE_TO</code> change flag is set; otherwise,
	 * <code>null</code> is returned.
	 * <p>
	 * Note: the returned path never has a trailing separator.
	 * 
	 * @return a path, or <code>null</code>
	 * @see #getFromPath()
	 * @see #getPath()
	 * @see #getFlags()
	 */
	public IPath getToPath();

}