/*******************************************************************************
* Copyright (c) 2004, 2010 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
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
import org.eclipse.core.resources.IResource;
/**
* This class represents a project instance in the managed build system.
* Project instances are stored in the .cdtbuild file. Note that there
* is no reason to define a project element in a manifest file - it
* would never be used.
* <p>
* The following steps occur when a CDT user creates a new Managed Build
* project:
* 1. A new project element is created. Its projectType attribute is set
* to the projectType that the user selected. Its name attribute is
* set to the project name that the user entered.
* 2. When the user adds a default configuration, a configuration
* element is created as a child of the project element created in
* step 1.
* 3. Add a tool-chain element that specifies as its superClass the
* tool-chain that is the child of the selected configuration element.
* 4. For each tool element child of the tool-chain that is the child of
* the selected configuration element, create a tool element child of
* the cloned configuration's tool-chain element that specifies the
* original tool element as its superClass.
* This prepares the new project/configurations for modification by the user.
*
* @since 2.1
* @noextend This class is not intended to be subclassed by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IManagedProject extends IBuildObject, IBuildObjectPropertiesContainer {
public static final String MANAGED_PROJECT_ELEMENT_NAME = "project"; //$NON-NLS-1$
public static final String PROJECTTYPE = "projectType"; //$NON-NLS-1$
public static final String BUILD_PROPERTIES = "buildProperties"; //$NON-NLS-1$
public static final String BUILD_ARTEFACT_TYPE = "buildArtefactType"; //$NON-NLS-1$
/**
* Creates a configuration for this project populated with the tools
* and options settings from the parent configuration. As options and
* tools change in the parent, unoverridden values are updated in the
* child configuration as well.
* <p>
* This method performs steps 3 & 4 described above.
*
* @param parent The <code>IConfiguration</code> to use as a settings template
* @param id The unique id the new configuration will have
* @return IConfiguration of the new configuration
*/
public IConfiguration createConfiguration(IConfiguration parent, String id);
/**
* Creates a configuration for this project populated with the tools
* and options settings from the parent configuration. As opposed to the
* <code>createConfiguration</code> method, this method creates a configuration
* from an existing configuration in the project.
* <p>
* In this case, the new configuration is cloned from the existing configuration,
* and does not retain a pointer to the existing configuration.
*
* @param parent The <code>IConfiguration</code> to clone
* @param id The unique id the new configuration will have
* @return IConfiguration of the new configuration
*/
public IConfiguration createConfigurationClone(IConfiguration parent, String id);
/**
* Removes the configuration with the ID specified in the argument.
*
* @param id The unique id of the configuration
*/
public void removeConfiguration(String id);
/**
* Returns all of the configurations defined by this project-type.
*
* @return IConfiguration[]
*/
public IConfiguration[] getConfigurations();
/**
* Returns the configuration with the given id, or <code>null</code> if not found.
*
* @param id The unique id of the configuration
* @return IConfiguration
*/
public IConfiguration getConfiguration(String id);
/**
* Answers the <code>IProjectType</code> that is the superclass of this
* project-type, or <code>null</code> if the attribute was not specified.
*
* @return IProjectType
*/
public IProjectType getProjectType();
/**
* Returns the owner of the managed project (an IProject).
*
* @return IResource
*/
public IResource getOwner();
/**
* Sets the owner of the managed project.
*/
public void updateOwner(IResource resource);
/**
* Returns <code>true</code> if this project has changes that need to
* be saved in the project file, else <code>false</code>.
*
* @return boolean
*/
public boolean isDirty();
/**
* Sets the element's "dirty" (have I been modified?) flag.
*/
public void setDirty(boolean isDirty);
/**
* Returns <code>true</code> if this project is valid
* else <code>false</code>.
*
* @return boolean
*/
public boolean isValid();
/**
* Sets the element's "Valid" flag.
*/
public void setValid(boolean isValid);
// /**
// * Persist the managed project to the project file (.cdtbuild).
// *
// * @param doc
// * @param element
// */
// public void serialize(Document doc, Element element);
/**
* Returns the default build artifact name for the project
*
* @return String
*/
public String getDefaultArtifactName();
}