/*******************************************************************************
 * Copyright (c) 2009 QNX Software Systems 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:
 *     QNX Software Systems - initial API and implementation
 *******************************************************************************/

package org.eclipse.cdt.internal.ui.workingsets;

import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistable;

/**
 * The protocol for elements of the working-set configuration model, which can be persisted via
 * {@linkplain IMemento mementos}.
 * 
 * @author Christian W. Damus (cdamus)
 * 
 * @since 6.0
 * 
 */
public interface IWorkingSetConfigurationElement extends IPersistable {
	/**
	 * Loads me from the specified memento.
	 * 
	 * @param memento
	 *            a memento in which I am persisted
	 */
	void loadState(IMemento memento);

	//
	// Nested types
	//

	/**
	 * The protocol for mutable working-copies ("snapshots") of working set configuration model elements.
	 * 
	 * @author Christian W. Damus (cdamus)
	 * 
	 * @since 6.0
	 * 
	 * @see WorkspaceSnapshot
	 */
	interface ISnapshot {
		/**
		 * Obtains the workspace snapshot that describes the baseline state of the working-set configuration
		 * editing session of which I am a part.
		 * 
		 * @return my base workspace snapshot
		 */
		WorkspaceSnapshot getWorkspaceSnapshot();
	}
}
