/*******************************************************************************
 * Copyright (c) 2001, 2005 IBM Corporation and others.
 * All rights reserved. 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
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/
package org.eclipse.wst.sse.core.internal.provisional;



/**
 * Interface for those wanting to listen to a model's state changing.
 */
public interface IModelStateListener {

	/**
	 * A model is about to be changed. This typically is initiated by one
	 * client of the model, to signal a large change and/or a change to the
	 * model's ID or base Location. A typical use might be if a client might
	 * want to suspend processing until all changes have been made.
	 */
	void modelAboutToBeChanged(IStructuredModel model);

	/**
	 * Signals that the changes foretold by modelAboutToBeChanged have been
	 * made. A typical use might be to refresh, or to resume processing that
	 * was suspended as a result of modelAboutToBeChanged.
	 */
	void modelChanged(IStructuredModel model);

	/**
	 * Notifies that a model's dirty state has changed, and passes that state
	 * in isDirty. A model becomes dirty when any change is made, and becomes
	 * not-dirty when the model is saved.
	 */
	void modelDirtyStateChanged(IStructuredModel model, boolean isDirty);

	/**
	 * A modelDeleted means the underlying resource has been deleted. The
	 * model itself is not removed from model management until all have
	 * released it. Note: baseLocation is not (necessarily) changed in this
	 * event, but may not be accurate.
	 */
	void modelResourceDeleted(IStructuredModel model);

	/**
	 * A model has been renamed or copied (as in saveAs..). In the renamed
	 * case, the two paramenters are the same instance, and only contain the
	 * new info for id and base location.
	 */
	void modelResourceMoved(IStructuredModel oldModel, IStructuredModel newModel);

	void modelAboutToBeReinitialized(IStructuredModel structuredModel);

	void modelReinitialized(IStructuredModel structuredModel);


}
