/*******************************************************************************
 * Copyright (c) 2007, 2011 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.compare.patch;

import java.io.InputStream;

import org.eclipse.core.runtime.CoreException;

/**
 * A file patch result provides the results of an attempt to apply an
 * {@link IFilePatch2} to the contents of a file. *
 *
 * @see IFilePatch2
 * @since 3.3
 * @noimplement This interface is not intended to be implemented by clients.
 *              Clients can obtain patch results from an {@link IFilePatch2}.
 */
public interface IFilePatchResult {

	/**
	 * Return a stream the contains the original contents of the file before
	 * any portions of the patch have been applied.
	 * @return a stream to the original contents of the file before
	 * any portions of the patch have been applied
	 * @see #getPatchedContents()
	 */
	public InputStream getOriginalContents();

	/**
	 * Return a stream that contains the file with as much of the patch
	 * applied as possible. if {@link #hasMatches()} returns <code>false</code>
	 * then the patched contents will match the original contents. Otherwise,
	 * at least a portion of the patch could be successfully applied. if
	 * {@link #hasRejects()} returns <code>false</code>, then the entire patch was
	 * applied. Otherwise, portions could not be applied. The portions that could
	 * not be applied can be obtained by calling {@link #getRejects()}.
	 *
	 * @return a stream that contains the file with as much of the patch
	 * applied as possible.
	 */
	public InputStream getPatchedContents();

	/**
	 * Return whether the patch has portions that were successfully applied.
	 * @return whether the patch has portions that were successfully applied
	 * @see #getPatchedContents()
	 */
	public boolean hasMatches();

	/**
	 * Return whether the patch has portions that were not successfully applied.
	 * @return whether the patch has portions that were not successfully applied
	 * @see #getPatchedContents()
	 */
	public boolean hasRejects();

	/**
	 * Return the portions of the patch (referred to a hunks) that could not
	 * be applied.
	 * @return the portions of the patch (referred to a hunks) that could not
	 * be applied
	 * @see #getPatchedContents()
	 */
	public IHunk[] getRejects();

	/**
	 * Returns the name of a charset encoding to be used when decoding the contents
	 * of this result into characters. Returns <code>null</code> if a proper
	 * encoding cannot be determined.
	 * <p>
	 * Note that this method does not check whether the result is a supported
	 * charset name. Callers should be prepared to handle
	 * <code>UnsupportedEncodingException</code> where this charset is used.
	 * </p>
	 *
	 * @return the name of a charset, or <code>null</code>
	 * @exception CoreException if an error happens while determining
	 * the charset. See any refinements for more information.
	 */
	public String getCharset() throws CoreException;

}
