/******************************************************************************* * Copyright (c) 2000, 2009 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 *******************************************************************************/ package org.eclipse.core.resources; import org.eclipse.core.runtime.CoreException; /** * Interface for project nature runtime classes. It can configure a project with the project nature, * or de-configure it. When a project is configured with a project nature, this is recorded in the * list of project natures on the project. Individual project natures may expose a more specific * runtime type, with additional API for manipulating the project in a nature-specific way. * <p> * Clients may implement this interface. * </p> * * @see IProject#getNature(String) * @see IProject#hasNature(String) * @see IProjectDescription#getNatureIds() * @see IProjectDescription#hasNature(String) * @see IProjectDescription#setNatureIds(String[]) */ public interface IProjectNature { /** * Configures this nature for its project. This is called by the workspace when natures are * added to the project using <code>IProject.setDescription</code> and should not be called * directly by clients. The nature extension id is added to the list of natures before this * method is called, and need not be added here. * * Exceptions thrown by this method will be propagated back to the caller of * <code>IProject.setDescription</code>, but the nature will remain in the project description. * * @exception CoreException if this method fails. */ public void configure() throws CoreException; /** * De-configures this nature for its project. This is called by the workspace when natures are * removed from the project using <code>IProject.setDescription</code> and should not be called * directly by clients. The nature extension id is removed from the list of natures before this * method is called, and need not be removed here. * * Exceptions thrown by this method will be propagated back to the caller of * <code>IProject.setDescription</code>, but the nature will still be removed from the project * description. * * * @exception CoreException if this method fails. */ public void deconfigure() throws CoreException; /** * Returns the project to which this project nature applies. * * @return the project handle */ public IProject getProject(); /** * Sets the project to which this nature applies. Used when instantiating this project nature * runtime. This is called by <code>IProject.create()</code> or * <code>IProject.setDescription()</code> and should not be called directly by clients. * * @param project the project to which this nature applies */ public void setProject(IProject project); }