/*******************************************************************************
* Copyright (c) 2007, 2011 Intel 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:
* Intel Corporation - Initial API and implementation
* James Blackburn (Broadcom Corp.)
* Kirk Beitz (Nokia) - [323094] documentation warnings
*******************************************************************************/
package org.eclipse.cdt.core.settings.model;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationDataProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* This interface represents the settings storage that can be used as the root
* of a settings tree of name-attribute-value holder elements ({@link ICStorageElement}s).
* <br /><br />
* In real terms this is a specialised node in the project description tree. It is specialised
* in that it can only contain ICStorageElements as children and has no associated attributes or
* value. The Xml model implements this as an element called 'storageModule' which contains
* other arbitrary Xml ICStorageElements.
* <br /><br />
* Both {@link ICProjectDescription} and {@link ICConfigurationDescription} implement this
* interface thus providing the capabilities to store custom project-wide and configuration-specific
* data in the storage file
* <br /><br />
* The format of the storage file is left up to the implementor. It may be an XML file
* (.cproject) a relational database (.cprojectdb) or any other format of the extenders choosing.
* <br /><br />
* These capabilities are used by the build system for persisting build configuration data
* as well as by the CoreModel {@link ICConfigurationDescription} storage trees. See
* {@link CConfigurationDataProvider#loadConfiguration(ICConfigurationDescription, IProgressMonitor)}
* and {@link CConfigurationDataProvider#applyConfiguration(ICConfigurationDescription, ICConfigurationDescription, CConfigurationData, IProgressMonitor)}
*
* @see ICStorageElement
* @see ICProjectDescription
* @see ICConfigurationDescription
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ICSettingsStorage {
/**
* returns the storage of the specified id
* @param id any custom string value uniquely representing the storage
* @return {@link ICStorageElement} if the settings storage does not contain the information of
* the specified id an empty storage is created and returned
* @throws CoreException
*
* @see {@link ICStorageElement}
*/
ICStorageElement getStorage(String id, boolean create) throws CoreException;
/**
* Remove the storage module with the given ID from this ICSettingsStorage
* @param id
* @throws CoreException
*/
void removeStorage(String id) throws CoreException;
/**
* Import an existing ICStorageElement storage module into the ICSettingsStorage
* Returns a handle on the newly imported ICSettingsStorage
*
* NB Storage IDs are unique in an ICSettingsStorage. Importing a storage
* will replace any other storage with equivalent id
* @param id name of the storage to be imported
* @param el ICStorageElement to be imported
* @return ICStorageElement representing the imported storage
* @throws UnsupportedOperationException
* @since 5.1
*/
public ICStorageElement importStorage(String id, ICStorageElement el) throws UnsupportedOperationException, CoreException;
/**
* Returns whether any non-persisted changes exist in this tree
* @return boolean indicating whether any elements in this tree have been modified
* @since 5.1
*/
public boolean isModified();
/**
* Return whether this Settings Storage is currently read only
* @return whether this storage is readonly
* @since 5.1
*/
public boolean isReadOnly();
/**
* Mark this Settings Storage as read only. If keepModify is set
* then modified flag will not be reset
* @param readOnly
* @param keepModify
* @since 5.1
*/
void setReadOnly(boolean readOnly, boolean keepModify);
}