/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.core.filebuffers;

import org.eclipse.core.runtime.IStatus;

/**
 * Implementers of {@link org.eclipse.core.filebuffers.IFileBuffer} may also
 * implement <code>IStateValidationSupport</code> in order to allow a
 * {@link org.eclipse.core.filebuffers.IFileBufferManager} to batch the stages
 * of state validation when calling
 * {@link org.eclipse.core.filebuffers.IFileBufferManager#validateState(IFileBuffer[], org.eclipse.core.runtime.IProgressMonitor, Object)}.
 *
 * @see org.eclipse.core.filebuffers.IFileBuffer
 * @since 3.1
 */
public interface IStateValidationSupport {

	/**
	 * Tells this buffer that the validation state is about to be changed. File
	 * buffer listeners will receive a
	 * {@link IFileBufferListener#stateChanging(IFileBuffer)} notification in
	 * response.
	 */
	void validationStateAboutToBeChanged();

	/**
	 * Tells this buffer that the validation state has been changed to the given
	 * value. After that call, {@link IFileBuffer#isStateValidated()} will
	 * return the given value. Also {@link IFileBuffer#getStatus()} will returns
	 * the provided status. File buffer listeners will receive a
	 * {@link IFileBufferListener#stateValidationChanged(IFileBuffer, boolean)}
	 * notification.
	 *
	 * @param validationState <code>true</code> if validated,
	 *            <code>false</code> otherwise
	 * @param status the status of the executed validate state operation
	 */
	void validationStateChanged(boolean validationState, IStatus status);

	/**
	 * Tells this buffer that a initiated state validation failed. File buffer
	 * listeners will receive a
	 * {@link IFileBufferListener#stateChangeFailed(IFileBuffer)} notification
	 * in response.
	 */
	void validationStateChangeFailed();
}
