| package org.eclipse.cdt.core.model; |
| |
| /* |
| * (c) Copyright IBM Corp. 2000, 2001. |
| * All Rights Reserved. |
| */ |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| |
| /** |
| * Represent the root C element corresponding to the workspace. |
| * Since there is only one such root element, it is commonly referred to as |
| * <em>the</em> C model element. |
| * The C model element needs to be opened before it can be navigated or manipulated. |
| * The C model element has no parent (it is the root of the C element |
| * hierarchy). Its children are <code>ICProject</code>s. |
| * <p> |
| * This interface provides methods for performing copy, move, rename, and |
| * delete operations on multiple C elements. |
| * </p> |
| * |
| * @see CCore#create(org.eclipse.core.resources.IWorkspaceRoot) |
| */ |
| public interface ICModel extends ICElement, IParent, IOpenable { |
| /** |
| * Copies the given elements to the specified container(s). |
| * If one container is specified, all elements are copied to that |
| * container. If more than one container is specified, the number of |
| * elements and containers must match, and each element is copied to |
| * its associated container. |
| * <p> |
| * Optionally, each copy can positioned before a sibling |
| * element. If <code>null</code> is specified for a given sibling, the copy |
| * is inserted as the last child of its associated container. |
| * </p> |
| * <p> |
| * Optionally, each copy can be renamed. If |
| * <code>null</code> is specified for the new name, the copy |
| * is not renamed. |
| * </p> |
| * <p> |
| * Optionally, any existing child in the destination container with |
| * the same name can be replaced by specifying <code>true</code> for |
| * force. Otherwise an exception is thrown in the event that a name |
| * collision occurs. |
| * </p> |
| * |
| * @param elements the elements to copy |
| * @param containers the container, or list of containers |
| * @param siblings the list of siblings element any of which may be |
| * <code>null</code>; or <code>null</code> |
| * @param renamings the list of new names any of which may be |
| * <code>null</code>; or <code>null</code> |
| * @param replace <code>true</code> if any existing child in a target container |
| * with the target name should be replaced, and <code>false</code> to throw an |
| * exception in the event of a name collision |
| * @param monitor a progress monitor |
| * @exception CModelException if an element could not be copied. Reasons include: |
| * <ul> |
| * <li> A specified element, container, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li> |
| * <li> A <code>CoreException</code> occurred while updating an underlying resource |
| * <li> A container is of an incompatible type (<code>INVALID_DESTINATION</code>) |
| * <li> A sibling is not a child of it associated container (<code>INVALID_SIBLING</code>) |
| * <li> A new name is invalid (<code>INVALID_NAME</code>) |
| * <li> A child in its associated container already exists with the same |
| * name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>) |
| * <li> A container or element is read-only (<code>READ_ONLY</code>) |
| * </ul> |
| */ |
| void copy(ICElement[] elements, ICElement[] containers, ICElement[] siblings, String[] renamings, boolean replace, IProgressMonitor monitor) throws CModelException; |
| /** |
| * Deletes the given elements, forcing the operation if necessary and specified. |
| * |
| * @param elements the elements to delete |
| * @param force a flag controlling whether underlying resources that are not |
| * in sync with the local file system will be tolerated |
| * @param monitor a progress monitor |
| * @exception CModelException if an element could not be deleted. Reasons include: |
| * <ul> |
| * <li> A specified element does not exist (ELEMENT_DOES_NOT_EXIST)</li> |
| * <li> A <code>CoreException</code> occurred while updating an underlying resource |
| * <li> An element is read-only (<code>READ_ONLY</code>) |
| * </ul> |
| */ |
| void delete(ICElement[] elements, boolean force, IProgressMonitor monitor) throws CModelException; |
| |
| /** |
| * Moves the given elements to the specified container(s). |
| * If one container is specified, all elements are moved to that |
| * container. If more than one container is specified, the number of |
| * elements and containers must match, and each element is moved to |
| * its associated container. |
| * <p> |
| * Optionally, each element can positioned before a sibling |
| * element. If <code>null</code> is specified for sibling, the element |
| * is inserted as the last child of its associated container. |
| * </p> |
| * <p> |
| * Optionally, each element can be renamed. If |
| * <code>null</code> is specified for the new name, the element |
| * is not renamed. |
| * </p> |
| * <p> |
| * Optionally, any existing child in the destination container with |
| * the same name can be replaced by specifying <code>true</code> for |
| * force. Otherwise an exception is thrown in the event that a name |
| * collision occurs. |
| * </p> |
| * |
| * @param elements the elements to move |
| * @param containers the container, or list of containers |
| * @param siblings the list of siblings element any of which may be |
| * <code>null</code>; or <code>null</code> |
| * @param renamings the list of new names any of which may be |
| * <code>null</code>; or <code>null</code> |
| * @param replace <code>true</code> if any existing child in a target container |
| * with the target name should be replaced, and <code>false</code> to throw an |
| * exception in the event of a name collision |
| * @param monitor a progress monitor |
| * @exception CModelException if an element could not be moved. Reasons include: |
| * <ul> |
| * <li> A specified element, container, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li> |
| * <li> A <code>CoreException</code> occurred while updating an underlying resource |
| * <li> A container is of an incompatible type (<code>INVALID_DESTINATION</code>) |
| * <li> A sibling is not a child of it associated container (<code>INVALID_SIBLING</code>) |
| * <li> A new name is invalid (<code>INVALID_NAME</code>) |
| * <li> A child in its associated container already exists with the same |
| * name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>) |
| * <li> A container or element is read-only (<code>READ_ONLY</code>) |
| * </ul> |
| * |
| * @exception IllegalArgumentException any element or container is <code>null</code> |
| */ |
| void move(ICElement[] elements, ICElement[] containers, ICElement[] siblings, String[] renamings, boolean replace, IProgressMonitor monitor) throws CModelException; |
| |
| /** |
| * Renames the given elements as specified. |
| * If one container is specified, all elements are renamed within that |
| * container. If more than one container is specified, the number of |
| * elements and containers must match, and each element is renamed within |
| * its associated container. |
| * |
| * @param elements the elements to rename |
| * @param destinations the container, or list of containers |
| * @param names the list of new names |
| * @param replace <code>true</code> if an existing child in a target container |
| * with the target name should be replaced, and <code>false</code> to throw an |
| * exception in the event of a name collision |
| * @param monitor a progress monitor |
| * @exception CModelException if an element could not be renamed. Reasons include: |
| * <ul> |
| * <li> A specified element does not exist (ELEMENT_DOES_NOT_EXIST)</li> |
| * <li> A <code>CoreException</code> occurred while updating an underlying resource |
| * <li> A new name is invalid (<code>INVALID_NAME</code>) |
| * <li> A child already exists with the same name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>) |
| * <li> An element is read-only (<code>READ_ONLY</code>) |
| * </ul> |
| */ |
| void rename(ICElement[] elements, ICElement[] destinations, String[] names, boolean replace, IProgressMonitor monitor) throws CModelException; |
| |
| /** |
| * Returns the C project with the given name. This is a handle-only method. |
| * The project may or may not exist. |
| */ |
| ICProject getCProject(String name); |
| |
| /** |
| * Returns the C projects. |
| */ |
| ICProject[] getCProjects(); |
| |
| /** |
| * Returns an array of non-C resources (i.e. non-C projects) in |
| * the workspace. |
| * <p> |
| * Non-C projects include all projects that are closed (even if they have the |
| * C nature). |
| * </p> |
| * |
| * @return an array of non-C projects contained in the workspace. |
| * @throws CModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource |
| * @since 2.1 |
| */ |
| Object[] getNonCResources() throws CModelException; |
| |
| /** |
| * Returns the workspace associated with this C model. |
| */ |
| IWorkspace getWorkspace(); |
| |
| } |