blob: dbc45167f3e37b1b5294996255b3962a7d2ad6af [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2014 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
* Broadcom Corporation - build configurations and references
*******************************************************************************/
package org.eclipse.core.resources;
import java.net.URI;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* A project description contains the meta-data required to define
* a project. In effect, a project description is a project's "content".
*
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface IProjectDescription {
/**
* Constant that denotes the name of the project description file (value
* <code>".project"</code>).
* The handle of a project's description file is
* <code>project.getFile(DESCRIPTION_FILE_NAME)</code>.
* The project description file is located in the root of the project's content area.
*
* @since 2.0
*/
public static final String DESCRIPTION_FILE_NAME = ".project"; //$NON-NLS-1$
/**
* Returns the build configurations referenced by the specified configuration for the
* described project.
* <p>
* These references are persisted by the workspace in a private location outside the
* project description file, and as such will not be shared when a project is exported
* or persisted in a repository. As such clients are always
* responsible for setting these references when a project is created or recreated.
* </p>
* <p>
* The referenced build configurations need not exist in the workspace.
* The result will not contain duplicates. The order of the references is preserved
* from the call to {@link #setBuildConfigReferences(String, IBuildConfiguration[])}.
* Returns an empty array if the provided config doesn't dynamically reference
* any other build configurations, or the given config does not exist in this description.
* </p>
* @param configName the configuration in the described project to get the references for
* @return a list of dynamic build configurations
* @see #setBuildConfigReferences(String, IBuildConfiguration[])
* @since 3.7
*/
public IBuildConfiguration[] getBuildConfigReferences(String configName);
/**
* Returns the list of build commands to run when building the described project.
* The commands are listed in the order in which they are to be run.
*
* @return the list of build commands for the described project
*/
public ICommand[] getBuildSpec();
/**
* Returns the descriptive comment for the described project.
*
* @return the comment for the described project
*/
public String getComment();
/**
* Returns the dynamic project references for the described project. Dynamic
* project references can be used instead of simple project references in cases
* where the reference information is computed dynamically be a third party.
* These references are persisted by the workspace in a private location outside
* the project description file, and as such will not be shared when a project is
* exported or persisted in a repository. A client using project references
* is always responsible for setting these references when a project is created
* or recreated.
* <p>
* The returned projects need not exist in the workspace. The result will not
* contain duplicates. Returns an empty array if there are no dynamic project
* references on this description.
*
* @see #getBuildConfigReferences(String)
* @see #getReferencedProjects()
* @see #setDynamicReferences(IProject[])
* @return a list of projects
* @since 3.0
*/
public IProject[] getDynamicReferences();
/**
* Returns the local file system location for the described project. The path
* will be either an absolute file system path, or a relative path whose first
* segment is the name of a workspace path variable. <code>null</code> is
* returned if the default location should be used. This method will return
* <code>null</code> if this project is not located in the local file system.
*
* @return the location for the described project or <code>null</code>
* @deprecated Since 3.2, project locations are not necessarily in the local file
* system. The more general {@link #getLocationURI()} method should be used instead.
*/
@Deprecated
public IPath getLocation();
/**
* Returns the location URI for the described project. <code>null</code> is
* returned if the default location should be used.
*
* @return the location for the described project or <code>null</code>
* @since 3.2
* @see #setLocationURI(URI)
*/
public URI getLocationURI();
/**
* Returns the name of the described project.
*
* @return the name of the described project
*/
public String getName();
/**
* Returns the list of natures associated with the described project.
* Returns an empty array if there are no natures on this description.
*
* @return the list of natures for the described project
* @see #setNatureIds(String[])
*/
public String[] getNatureIds();
/**
* Returns the projects referenced by the described project. These references
* are persisted in the project description file (&quot;.project&quot;) and as such
* will be shared whenever the project is exported to another workspace. For
* references that are likely to change from one workspace to another, dynamic
* references should be used instead.
* <p>
* The projects need not exist in the workspace.
* The result will not contain duplicates. Returns an empty
* array if there are no referenced projects on this description.
*
* @see #getDynamicReferences()
* @see #getBuildConfigReferences(String)
* @return a list of projects
*/
public IProject[] getReferencedProjects();
/**
* Returns whether the project nature specified by the given
* nature extension id has been added to the described project.
*
* @param natureId the nature extension identifier
* @return <code>true</code> if the described project has the given nature
*/
public boolean hasNature(String natureId);
/**
* Returns a new build command.
* <p>
* Note that the new command does not become part of this project
* description's build spec until it is installed via the <code>setBuildSpec</code>
* method.
* </p>
*
* @return a new command
* @see #setBuildSpec(ICommand[])
*/
public ICommand newCommand();
/**
* Sets the active configuration for the described project.
* <p>
* If a configuration with the specified name does not exist in the project then the
* first configuration in the project is treated as the active configuration.
* </p>
*
* @param configName the configuration to set as the active or default
* @since 3.7
*/
public void setActiveBuildConfig(String configName);
/**
* Sets the build configurations for the described project.
* <p>
* The passed in names must all be non-null.
* Before they are set, duplicates are removed.
* </p>
* <p>
* All projects have one default build configuration, and it is impossible to configure
* the project to have no build configurations.
* If the input is null or an empty list, the current configurations are removed,
* and a default build configuration is (re-)added.
* </p>
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @param configNames the configurations to set for the described project
* @see IProject#getActiveBuildConfig()
* @see IProject#getBuildConfigs()
* @see IProjectDescription#setActiveBuildConfig(String)
* @since 3.7
*/
public void setBuildConfigs(String[] configNames);
/**
* Sets the build configurations referenced by the specified configuration.
* <p>
* The configuration to which references are being added needs to exist in this
* description, but the referenced projects and build configurations need not exist.
* A reference with <code>null</code> configuration name is resolved to the active build configuration
* on use.
* Duplicates will be removed. The order of the referenced build configurations is preserved.
* If the given configuration does not exist in this description then this has no effect.
* </p>
* <p>
* References at the build configuration level take precedence over references at the project level.
* </p>
* <p>
* Like dynamic references, these build configuration references are persisted as part of workspace
* metadata.
* </p>
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @see #getBuildConfigReferences(String)
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @param configName the configuration in the described project to set the references for
* @param references list of build configuration references
* @since 3.7
*/
public void setBuildConfigReferences(String configName, IBuildConfiguration[] references);
/**
* Sets the list of build command to run when building the described project.
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @param buildSpec the array of build commands to run
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @see #getBuildSpec()
* @see #newCommand()
*/
public void setBuildSpec(ICommand[] buildSpec);
/**
* Sets the comment for the described project.
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @param comment the comment for the described project
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @see #getComment()
*/
public void setComment(String comment);
/**
* Sets the dynamic project references for the described project.
* The projects need not exist in the workspace. Duplicates will be
* removed.
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
* @deprecated please use {@link IDynamicReferenceProvider} with the builders extension point to supply dynamic references
* @see #getDynamicReferences()
* @see #setBuildConfigReferences(String, IBuildConfiguration[])
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @param projects list of projects
* @since 3.0
*/
@Deprecated
public void setDynamicReferences(IProject[] projects);
/**
* Sets the local file system location for the described project. The path must
* be either an absolute file system path, or a relative path whose first
* segment is the name of a defined workspace path variable. If
* <code>null</code> is specified, the default location is used.
* <p>
* Setting the location on a description for a project which already
* exists has no effect; the new project location is ignored when the
* description is set on the already existing project. This method is
* intended for use on descriptions for new projects or for destination
* projects for <code>copy</code> and <code>move</code>.
* </p>
* <p>
* This operation maps the root folder of the project to the exact location
* provided. For example, if the location for project named "P" is set
* to the path c:\my_plugins\Project1, the file resource at workspace path
* /P/index.html would be stored in the local file system at
* c:\my_plugins\Project1\index.html.
* </p>
*
* @param location the location for the described project or <code>null</code>
* @see #getLocation()
*/
public void setLocation(IPath location);
/**
* Sets the location for the described project.
* If <code>null</code> is specified, the default location is used.
* <p>
* Setting the location on a description for a project which already
* exists has no effect; the new project location is ignored when the
* description is set on the already existing project. This method is
* intended for use on descriptions for new projects or for destination
* projects for <code>copy</code> and <code>move</code>.
* </p>
* <p>
* This operation maps the root folder of the project to the exact location
* provided. For example, if the location for project named "P" is set
* to the URI file://c:/my_plugins/Project1, the file resource at workspace path
* /P/index.html would be stored in the local file system at
* file://c:/my_plugins/Project1/index.html.
* </p>
*
* @param location the location for the described project or <code>null</code>
* @see #getLocationURI()
* @see IWorkspace#validateProjectLocationURI(IProject, URI)
* @since 3.2
*/
public void setLocationURI(URI location);
/**
* Sets the name of the described project.
* <p>
* Setting the name on a description and then setting the
* description on the project has no effect; the new name is ignored.
* </p>
* <p>
* Creating a new project with a description name which doesn't
* match the project handle name results in the description name
* being ignored; the project will be created using the name
* in the handle.
* </p>
*
* @param projectName the name of the described project
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @see #getName()
*/
public void setName(String projectName);
/**
* Sets the list of natures associated with the described project.
* A project created with this description will have these natures
* added to it in the given order.
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @param natures the list of natures
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @see #getNatureIds()
*/
public void setNatureIds(String[] natures);
/**
* Sets the referenced projects, ignoring any duplicates.
* The order of projects is preserved.
* The projects need not exist in the workspace.
* <p>
* Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
* before changes made to this description take effect.
* </p>
*
* @param projects a list of projects
* @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
* @see #setBuildConfigReferences(String, IBuildConfiguration[])
* @see #getReferencedProjects()
*/
public void setReferencedProjects(IProject[] projects);
}