org.eclipse.core.resources.IProject Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2000, 2012 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
* Francis Lynch (Wind River) - [301563] Save and load tree snapshots
* Broadcom Corporation - build configurations and references
*******************************************************************************/
package org.eclipse.core.resources;
import java.net.URI;
import java.util.Map;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.content.IContentTypeMatcher;
/**
* A project is a type of resource which groups resources
* into buildable, reusable units.
*
* Features of projects include:
*
* - A project collects together a set of files and folders.
* - A project's location controls where the project's resources are
* stored in the local file system.
* - A project's build spec controls how building is done on the project.
* - A project can carry session and persistent properties.
* - A project can be open or closed; a closed project is
* passive and has a minimal in-memory footprint.
* - A project can have one or more project build configurations.
* - A project can carry references to other project build configurations.
* - A project can have one or more project natures.
*
*
*
* Projects implement the IAdaptable
interface;
* extensions are managed by the platform's adapter manager.
*
*
* @see Platform#getAdapterManager()
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface IProject extends IContainer, IAdaptable {
/**
* Option constant (value 1) indicating that a snapshot to be
* loaded or saved contains a resource tree (refresh information).
* @see #loadSnapshot(int, URI, IProgressMonitor)
* @see #saveSnapshot(int, URI, IProgressMonitor)
* @since 3.6
*/
public static final int SNAPSHOT_TREE = 1;
/**
* Invokes the build
method of the specified builder
* for this project. Does nothing if this project is closed. If this project
* has multiple builders on its build spec matching the given name, only
* the first matching builder will be run. The build is run for the project's
* active build configuration.
*
* The builder name is declared in the extension that plugs in
* to the standard org.eclipse.core.resources.builders
* extension point. The arguments are builder specific.
*
*
* This method may change resources; these changes will be reported
* in a subsequent resource change event.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param kind the kind of build being requested. Valid values are:
*
* - {@link IncrementalProjectBuilder#FULL_BUILD}- indicates a full build.
* - {@link IncrementalProjectBuilder#INCREMENTAL_BUILD}- indicates a incremental build.
* - {@link IncrementalProjectBuilder#CLEAN_BUILD}- indicates a clean request. Clean does
* not actually build anything, but rather discards all problems and build states.
*
* @param builderName the name of the builder
* @param args a table of builder-specific arguments keyed by argument name
* (key type: String
, value type: String
);
* null
is equivalent to an empty map
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if the build fails.
* The status contained in the exception may be a generic {@link IResourceStatus#BUILD_FAILED}
* code, but it could also be any other status code; it might
* also be a {@link MultiStatus}.
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IProjectDescription
* @see IncrementalProjectBuilder#build(int, Map, IProgressMonitor)
* @see IncrementalProjectBuilder#FULL_BUILD
* @see IncrementalProjectBuilder#INCREMENTAL_BUILD
* @see IncrementalProjectBuilder#CLEAN_BUILD
* @see IResourceRuleFactory#buildRule()
*/
public void build(int kind, String builderName, Map args, IProgressMonitor monitor) throws CoreException;
/**
* Builds this project. Does nothing if the project is closed.
*
* Building a project involves executing the commands found
* in this project's build spec. The build is run for the project's
* active build configuration.
*
*
* This method may change resources; these changes will be reported
* in a subsequent resource change event.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param kind the kind of build being requested. Valid values are:
*
* -
IncrementalProjectBuilder.FULL_BUILD
- indicates a full build.
* -
IncrementalProjectBuilder.INCREMENTAL_BUILD
- indicates an incremental build.
* CLEAN_BUILD
- indicates a clean request. Clean does
* not actually build anything, but rather discards all problems and build states.
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if the build fails.
* The status contained in the exception may be a generic BUILD_FAILED
* code, but it could also be any other status code; it might
* also be a multi-status.
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IProjectDescription
* @see IncrementalProjectBuilder#FULL_BUILD
* @see IncrementalProjectBuilder#INCREMENTAL_BUILD
* @see IResourceRuleFactory#buildRule()
*/
public void build(int kind, IProgressMonitor monitor) throws CoreException;
/**
* Builds a specific build configuration of this project. Does nothing if the project is closed
* or the build configuration does not exist.
*
* Building a project involves executing the commands found
* in this project's build spec. The build is run for the specific project
* build configuration.
*
*
* This method may change resources; these changes will be reported
* in a subsequent resource change event.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
* @param config build configuration to build
* @param kind the kind of build being requested. Valid values are:
*
* -
IncrementalProjectBuilder.FULL_BUILD
- indicates a full build.
* -
IncrementalProjectBuilder.INCREMENTAL_BUILD
- indicates an incremental build.
* CLEAN_BUILD
- indicates a clean request. Clean does
* not actually build anything, but rather discards all problems and build states.
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if the build fails.
* The status contained in the exception may be a generic BUILD_FAILED
* code, but it could also be any other status code; it might
* also be a multi-status.
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IProjectDescription
* @see IncrementalProjectBuilder#FULL_BUILD
* @see IncrementalProjectBuilder#INCREMENTAL_BUILD
* @see IResourceRuleFactory#buildRule()
* @since 3.7
*/
public void build(IBuildConfiguration config, int kind, IProgressMonitor monitor) throws CoreException;
/**
* Closes this project. The project need not be open. Closing
* a closed project does nothing.
*
* Closing a project involves ensuring that all important project-related
* state is safely stored on disk, and then discarding the in-memory
* representation of its resources and other volatile state,
* including session properties.
* After this method, the project continues to exist in the workspace
* but its member resources (and their members, etc.) do not.
* A closed project can later be re-opened.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event that includes
* an indication that this project has been closed and its members
* have been removed.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This resource does not exist.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
* @see #open(IProgressMonitor)
* @see #isOpen()
* @see IResourceRuleFactory#modifyRule(IResource)
*/
public void close(IProgressMonitor monitor) throws CoreException;
/**
* Creates a new project resource in the workspace using the given project
* description. Upon successful completion, the project will exist but be closed.
*
* Newly created projects have no session or persistent properties.
*
*
* If the project content area given in the project description does not
* contain a project description file, a project description file is written
* in the project content area with the natures, build spec, comment, and
* referenced projects as specified in the given project description.
* If there is an existing project description file, it is not overwritten.
* In either case, this method does not cause natures to be configured.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that the project has been added to the workspace.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param description the project description
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project already exists in the workspace.
* - The name of this resource is not valid (according to
*
IWorkspace.validateName
).
* - The project location is not valid (according to
*
IWorkspace.validateProjectLocation
).
* - The project description file could not be created in the project
* content area.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IWorkspace#validateProjectLocation(IProject, IPath)
* @see IResourceRuleFactory#createRule(IResource)
*/
public void create(IProjectDescription description, IProgressMonitor monitor) throws CoreException;
/**
* Creates a new project resource in the workspace with files in the default
* location in the local file system. Upon successful completion, the project
* will exist but be closed.
*
* Newly created projects have no session or persistent properties.
*
*
* If the project content area does not contain a project description file,
* an initial project description file is written in the project content area
* with the following information:
*
* - no references to other projects
* - no natures
* - an empty build spec
* - an empty comment
*
* If there is an existing project description file, it is not overwritten.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that this project has been added to the workspace.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project already exists in the workspace.
* - The name of this resource is not valid (according to
*
IWorkspace.validateName
).
* - The project location is not valid (according to
*
IWorkspace.validateProjectLocation
).
* - The project description file could not be created in the project
* content area.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IWorkspace#validateProjectLocation(IProject, IPath)
* @see IResourceRuleFactory#createRule(IResource)
*/
public void create(IProgressMonitor monitor) throws CoreException;
/**
* Creates a new project resource in the workspace using the given project
* description. Upon successful completion, the project will exist but be closed.
*
* Newly created projects have no session or persistent properties.
*
*
* If the project content area given in the project description does not
* contain a project description file, a project description file is written
* in the project content area with the natures, build spec, comment, and
* referenced projects as specified in the given project description.
* If there is an existing project description file, it is not overwritten.
* In either case, this method does not cause natures to be configured.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that the project has been added to the workspace.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* The {@link IResource#HIDDEN} update flag indicates that this resource
* should immediately be set as a hidden resource. Specifying this flag
* is equivalent to atomically calling {@link IResource#setHidden(boolean)}
* with a value of true
immediately after creating the resource.
*
*
* Update flags other than those listed above are ignored.
*
*
* @param description the project description
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project already exists in the workspace.
* - The name of this resource is not valid (according to
*
IWorkspace.validateName
).
* - The project location is not valid (according to
*
IWorkspace.validateProjectLocation
).
* - The project description file could not be created in the project
* content area.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see IWorkspace#validateProjectLocation(IProject, IPath)
* @see IResourceRuleFactory#createRule(IResource)
*
* @since 3.4
*/
public void create(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
/**
* Deletes this project from the workspace.
* No action is taken if this project does not exist.
*
* This is a convenience method, fully equivalent to:
*
* delete(
* (deleteContent ? IResource.ALWAYS_DELETE_PROJECT_CONTENT : IResource.NEVER_DELETE_PROJECT_CONTENT )
* | (force ? FORCE : IResource.NONE),
* monitor);
*
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param deleteContent a flag controlling how whether content is
* aggressively deleted
* @param force a flag controlling whether resources that are not
* in sync with the local file system will be tolerated
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project could not be deleted.
* - This project's contents could not be deleted.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
* @see IResource#delete(int, IProgressMonitor)
* @see #open(IProgressMonitor)
* @see #close(IProgressMonitor)
* @see IResource#delete(int,IProgressMonitor)
* @see IResourceRuleFactory#deleteRule(IResource)
*/
public void delete(boolean deleteContent, boolean force, IProgressMonitor monitor) throws CoreException;
/**
* Returns the active build configuration for the project.
*
* If at any point the active configuration is removed from the project, for example
* when updating the list of build configurations, the active build configuration will be set to
* the first build configuration specified by {@link IProjectDescription#setBuildConfigs(String[])}.
*
* If all of the build configurations are removed, the active build configuration will be set to the
* default configuration.
*
* @return the active build configuration
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @since 3.7
*/
public IBuildConfiguration getActiveBuildConfig() throws CoreException;
/**
* Returns the project {@link IBuildConfiguration} with the given name for this project.
* @param configName the name of the configuration to get
* @return a project configuration
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
* - The configuration does not exist in this project.
*
* @see #getBuildConfigs()
* @since 3.7
*/
public IBuildConfiguration getBuildConfig(String configName) throws CoreException;
/**
* Returns the build configurations for this project. A project always has at
* least one build configuration, so this will never return an empty list or null.
* The result will not contain duplicates.
* @return a list of project build configurations
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @since 3.7
*/
public IBuildConfiguration[] getBuildConfigs() throws CoreException;
/**
* Returns this project's content type matcher. This content type matcher takes
* project specific preferences and nature-content type associations into
* account.
*
* @return the content type matcher for this project
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @see IContentTypeMatcher
* @since 3.1
*/
public IContentTypeMatcher getContentTypeMatcher() throws CoreException;
/**
* Returns the description for this project.
* The returned value is a copy and cannot be used to modify
* this project. The returned value is suitable for use in creating,
* copying and moving other projects.
*
* @return the description for this project
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @see #create(IProgressMonitor)
* @see #create(IProjectDescription, IProgressMonitor)
* @see IResource#copy(IProjectDescription, int, IProgressMonitor)
* @see #move(IProjectDescription, boolean, IProgressMonitor)
*/
public IProjectDescription getDescription() throws CoreException;
/**
* Returns a handle to the file with the given name in this project.
*
* This is a resource handle operation; neither the resource nor
* the result need exist in the workspace.
* The validation check on the resource name/path is not done
* when the resource handle is constructed; rather, it is done
* automatically as the resource is created.
*
*
* @param name the string name of the member file
* @return the (handle of the) member file
* @see #getFolder(String)
*/
public IFile getFile(String name);
/**
* Returns a handle to the folder with the given name in this project.
*
* This is a resource handle operation; neither the container
* nor the result need exist in the workspace.
* The validation check on the resource name/path is not done
* when the resource handle is constructed; rather, it is done
* automatically as the resource is created.
*
*
* @param name the string name of the member folder
* @return the (handle of the) member folder
* @see #getFile(String)
*/
public IFolder getFolder(String name);
/**
* Returns the specified project nature for this project or null
if
* the project nature has not been added to this project.
* Clients may downcast to a more concrete type for more nature-specific methods.
* The documentation for a project nature specifies any such additional protocol.
*
* This may cause the plug-in that provides the given nature to be activated.
*
*
* @param natureId the fully qualified nature extension identifier, formed
* by combining the nature extension id with the id of the declaring plug-in.
* (e.g. "com.example.acmeplugin.coolnature"
)
* @return the project nature object
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
* - The project nature extension could not be found.
*
*/
public IProjectNature getNature(String natureId) throws CoreException;
/**
* Returns the location in the local file system of the project-specific
* working data area for use by the given plug-in or null
* if the project does not exist.
*
* The content, structure, and management of this area is
* the responsibility of the plug-in. This area is deleted when the
* project is deleted.
*
* This project needs to exist but does not need to be open.
*
* @param plugin the plug-in
* @return a local file system path
* @deprecated Use IProject.getWorkingLocation(plugin.getUniqueIdentifier())
.
*/
public IPath getPluginWorkingLocation(IPluginDescriptor plugin);
/**
* Returns the location in the local file system of the project-specific
* working data area for use by the bundle/plug-in with the given identifier,
* or null
if the project does not exist.
*
* The content, structure, and management of this area is
* the responsibility of the bundle/plug-in. This area is deleted when the
* project is deleted.
*
* This project needs to exist but does not need to be open.
*
* @param id the bundle or plug-in's identifier
* @return a local file system path
* @since 3.0
*/
public IPath getWorkingLocation(String id);
/**
* Returns the projects referenced by this project. This includes
* both the static and dynamic references of this project.
* The returned projects need not exist in the workspace.
* The result will not contain duplicates. Returns an empty
* array if there are no referenced projects.
*
* @return a list of projects
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @see #getReferencedBuildConfigs(String, boolean)
* @see IProjectDescription#getReferencedProjects()
* @see IProjectDescription#getDynamicReferences()
*/
public IProject[] getReferencedProjects() throws CoreException;
/**
* Returns the list of all open projects which reference
* this project. This project may or may not exist. Returns
* an empty array if there are no referencing projects.
*
* @return a list of open projects referencing this project
*/
public IProject[] getReferencingProjects();
/**
* Returns the build configurations referenced by the passed in build configuration
* on this project.
*
* This includes both the static and dynamic project level references. These are
* converted to build configurations pointing at the currently active referenced
* project configuration.
* The result will not contain duplicates.
*
*
* References to active configurations will be translated to references to actual
* build configurations, if the project is accessible. Note that if includeMissing
* is true BuildConfigurations which can't be resolved (i.e. exist on missing projects,
* or aren't listed on the referenced project) are still included in the returned
* IBuildConfiguration array.
*
*
* Returns an empty array if there are no references.
*
*
* @param configName the configuration to get the references for
* @param includeMissing boolean controls whether unresolved buildConfiguration should
* be included in the result
* @return an array of project build configurations
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
* - The build configuration does not exist in this project.
*
* @see IProjectDescription#getBuildConfigReferences(String)
* @since 3.7
*/
public IBuildConfiguration[] getReferencedBuildConfigs(String configName, boolean includeMissing) throws CoreException;
/**
* Checks whether the project has the specified build configuration.
*
* @param configName the configuration
* @return true
if the project has the specified configuration, false otherwise
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @since 3.7
*/
public boolean hasBuildConfig(String configName) throws CoreException;
/**
* Returns whether the project nature specified by the given
* nature extension id has been added to this project.
*
* @param natureId the nature extension identifier
* @return true
if the project has the given nature
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
*/
public boolean hasNature(String natureId) throws CoreException;
/**
* Returns true if the project nature specified by the given
* nature extension id is enabled for this project, and false otherwise.
*
*
Reasons for a nature not to be enabled include:
* - The nature is not available in the install.
* - The nature has not been added to this project.
* - The nature has a prerequisite that is not enabled
* for this project.
* - The nature specifies "one-of-nature" membership in
* a set, and there is another nature on this project belonging
* to that set.
* - The prerequisites for the nature form a cycle.
*
*
* @param natureId the nature extension identifier
* @return true
if the given nature is enabled for this project
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist.
* - This project is not open.
*
* @since 2.0
* @see IWorkspace#validateNatureSet(String[])
*/
public boolean isNatureEnabled(String natureId) throws CoreException;
/**
* Returns whether this project is open.
*
* A project must be opened before it can be manipulated.
* A closed project is passive and has a minimal memory
* footprint; a closed project has no members.
*
*
* @return true
if this project is open, false
if
* this project is closed or does not exist
* @see #open(IProgressMonitor)
* @see #close(IProgressMonitor)
*/
public boolean isOpen();
/**
* Loads a snapshot of project meta-data from the given location URI.
* Must be called after the project has been created, but before it is
* opened. The options constant controls what kind of snapshot information
* to load. Valid option values include:
* - {@link IProject#SNAPSHOT_TREE} - load resource tree (refresh info)
*
*
* @param options kind of snapshot information to load
* @param snapshotLocation URI to load from
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - The snapshot was not found at the specified URI.
*
* @exception OperationCanceledException if the operation is canceled.
* @see #saveSnapshot(int, URI, IProgressMonitor)
* @since 3.6
*/
public void loadSnapshot(int options, URI snapshotLocation,
IProgressMonitor monitor) throws CoreException;
/**
* Renames this project so that it is located at the name in
* the given description.
*
* This is a convenience method, fully equivalent to:
*
* move(description, (force ? FORCE : IResource.NONE), monitor);
*
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event that will include
* an indication that the resource has been removed from its parent
* and that a corresponding resource has been added to its new parent.
* Additional information provided with resource delta shows that these
* additions and removals are related.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param description the description for the destination project
* @param force a flag controlling whether resources that are not
* in sync with the local file system will be tolerated
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this resource could not be moved. Reasons include:
*
* - This resource is not accessible.
* - This resource or one of its descendents is not local.
* - This resource or one of its descendents is out of sync with the local file system
* and
force
is false
.
* - The workspace and the local file system are out of sync
* at the destination resource or one of its descendents.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
* @see IResourceDelta#getFlags()
* @see IResource#move(IProjectDescription,int,IProgressMonitor)
* @see IResourceRuleFactory#moveRule(IResource, IResource)
*/
public void move(IProjectDescription description, boolean force, IProgressMonitor monitor) throws CoreException;
/**
* Opens this project. No action is taken if the project is already open.
*
* Opening a project constructs an in-memory representation
* of its resources from information stored on disk.
*
*
* When a project is opened for the first time, initial information about the
* project's existing resources can be obtained in the following ways:
*
* - If a {@link #loadSnapshot(int, URI, IProgressMonitor)} call has been made
* before the open, resources are restored from that file (a file written by
* {@link #saveSnapshot(int, URI, IProgressMonitor)}). When the snapshot includes
* resource tree information and can be loaded without error, no refresh is initiated,
* so the project's resource tree will match what the snapshot provides.
*
- Otherwise, when the {@link IResource#BACKGROUND_REFRESH} flag is specified,
* resources on disk will be added to the project in the background after
* this method returns. Child resources of the project may not be available
* until this background refresh completes.
*
- Otherwise, resource information is obtained with a refresh operation in the
* foreground, before this method returns.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event that includes
* an indication that the project has been opened and its resources
* have been added to the tree. If the BACKGROUND_REFRESH
* update flag is specified, multiple resource change events may occur as
* resources on disk are discovered and added to the tree.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
* @see #close(IProgressMonitor)
* @see IResource#BACKGROUND_REFRESH
* @see IResourceRuleFactory#modifyRule(IResource)
* @since 3.1
*/
public void open(int updateFlags, IProgressMonitor monitor) throws CoreException;
/**
* Opens this project. No action is taken if the project is already open.
*
* This is a convenience method, fully equivalent to
* open(IResource.NONE, monitor)
.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event that includes
* an indication that the project has been opened and its resources
* have been added to the tree.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
* @see #close(IProgressMonitor)
* @see IResourceRuleFactory#modifyRule(IResource)
*/
public void open(IProgressMonitor monitor) throws CoreException;
/**
* Writes a snapshot of project meta-data into the given location URI.
* The options constant controls what kind of snapshot information to
* write. Valid option values include:
* - {@link IProject#SNAPSHOT_TREE} - save resource tree (refresh info)
*
*
* @param options kind of snapshot information to save
* @param snapshotLocation URI for saving the snapshot to
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - The URI is not writable or an error occurs writing the data.
*
* @exception OperationCanceledException if the operation is canceled.
* @see #loadSnapshot(int, URI, IProgressMonitor)
* @since 3.6
*/
public void saveSnapshot(int options, URI snapshotLocation,
IProgressMonitor monitor) throws CoreException;
/**
* Changes this project resource to match the given project
* description. This project should exist and be open.
*
* This is a convenience method, fully equivalent to:
*
* setDescription(description, KEEP_HISTORY, monitor);
*
*
*
* This method requires the {@link IWorkspaceRoot} scheduling rule.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that the project's content has changed.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param description the project description
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist in the workspace.
* - This project is not open.
* - The location in the local file system corresponding to the project
* description file is occupied by a directory.
* - The workspace is out of sync with the project description file
* in the local file system .
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
* - The file modification validator disallowed the change.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see #getDescription()
* @see IProjectNature#configure()
* @see IProjectNature#deconfigure()
* @see #setDescription(IProjectDescription,int,IProgressMonitor)
*/
public void setDescription(IProjectDescription description, IProgressMonitor monitor) throws CoreException;
/**
* Changes this project resource to match the given project
* description. This project should exist and be open.
*
* The given project description is used to change the project's
* natures, build spec, comment, and referenced projects.
* The name and location of a project cannot be changed using this method;
* these settings in the project description are ignored. To change a project's
* name or location, use {@link IResource#move(IProjectDescription, int, IProgressMonitor)}.
* The project's session and persistent properties are not affected.
*
*
* If the new description includes nature ids of natures that the project
* did not have before, these natures will be configured in automatically,
* which involves instantiating the project nature and calling
* {@link IProjectNature#configure()} on it. An internal reference to the
* nature object is retained, and will be returned on subsequent calls to
* getNature
for the specified nature id. Similarly, any natures
* the project had which are no longer required will be automatically
* de-configured by calling {@link IProjectNature#deconfigure}
* on the nature object and letting go of the internal reference to it.
*
*
* The FORCE
update flag controls how this method deals with
* cases where the workspace is not completely in sync with the local file
* system. If FORCE
is not specified, the method will only attempt
* to overwrite the project's description file in the local file system
* provided it is in sync with the workspace. This option ensures there is no
* unintended data loss; it is the recommended setting.
* However, if FORCE
is specified, an attempt will be made
* to write the project description file in the local file system, overwriting
* any existing one if need be.
*
*
* The KEEP_HISTORY
update flag controls whether or not a copy of
* current contents of the project description file should be captured in the
* workspace's local history. The local history mechanism serves as a safety net
* to help the user recover from mistakes that might otherwise result in data
* loss. Specifying KEEP_HISTORY
is recommended. Note that local
* history is maintained with each individual project, and gets discarded when
* a project is deleted from the workspace.
*
*
* The AVOID_NATURE_CONFIG
update flag controls whether or
* not added and removed natures should be configured or de-configured. If this
* flag is not specified, then added natures will be configured and removed natures
* will be de-configured. If this flag is specified, natures can still be added or
* removed, but they will not be configured or de-configured.
*
*
* The scheduling rule required for this operation depends on the
* AVOID_NATURE_CONFIG
flag. If the flag is specified the
* {@link IResourceRuleFactory#modifyRule} is required; If the flag is not specified,
* the {@link IWorkspaceRoot} scheduling rule is required.
*
*
* Update flags other than FORCE
, KEEP_HISTORY
,
* and AVOID_NATURE_CONFIG
are ignored.
*
*
* Prior to modifying the project description file, the file modification
* validator (if provided by the Team plug-in), will be given a chance to
* perform any last minute preparations. Validation is performed by calling
* IFileModificationValidator.validateSave
on the project
* description file. If the validation fails, then this operation will fail.
*
*
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that the project's content has changed.
*
*
* This method is long-running; progress and cancellation are provided
* by the given progress monitor.
*
*
* @param description the project description
* @param updateFlags bit-wise or of update flag constants
* (FORCE
, KEEP_HISTORY
and
* AVOID_NATURE_CONFIG
)
* @param monitor a progress monitor, or null
if progress
* reporting is not desired
* @exception CoreException if this method fails. Reasons include:
*
* - This project does not exist in the workspace.
* - This project is not open.
* - The location in the local file system corresponding to the project
* description file is occupied by a directory.
* - The workspace is not in sync with the project
* description file in the local file system and
FORCE
is not
* specified.
* - Resource changes are disallowed during certain types of resource change
* event notification. See
IResourceChangeEvent
for more details.
* - The file modification validator disallowed the change.
*
* @exception OperationCanceledException if the operation is canceled.
* Cancelation can occur even if no progress monitor is provided.
*
* @see #getDescription()
* @see IProjectNature#configure()
* @see IProjectNature#deconfigure()
* @see IResource#FORCE
* @see IResource#KEEP_HISTORY
* @see IResource#AVOID_NATURE_CONFIG
* @see IResourceRuleFactory#modifyRule(IResource)
* @since 2.0
*/
public void setDescription(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
}