Mounting work in progress
diff --git a/bundles/org.eclipse.core.resources/.project b/bundles/org.eclipse.core.resources/.project
index 26047c9..fb58441 100644
--- a/bundles/org.eclipse.core.resources/.project
+++ b/bundles/org.eclipse.core.resources/.project
@@ -14,39 +14,6 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<arguments>
-				<dictionary>
-					<key>!{tool_args}</key>
-					<value>-DbuildType=${build_type}</value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_loc}</key>
-					<value>${workspace_loc:/org.eclipse.core.resources/scripts/buildExtraJAR.xml}</value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_dir}</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_refresh}</key>
-					<value>${none}</value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_name}</key>
-					<value>org.eclipse.core.resources extra builder</value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_type}</key>
-					<value>org.eclipse.ui.externaltools.type.ant</value>
-				</dictionary>
-				<dictionary>
-					<key>!{tool_show_log}</key>
-					<value>true</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
index 3ccc741..7177ae9 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
@@ -239,6 +239,8 @@
 	}
 }
 public IPath locationFor(IResource target) {
+	//note: this method is a critical performance path,
+	//code may be inlined to prevent method calls
 	switch (target.getType()) {
 		case IResource.ROOT :
 			return Platform.getLocation();
@@ -250,7 +252,22 @@
 			}
 			return getProjectDefaultLocation(project);
 		default:
-			//first get the location of the project (without the project name)
+			//check if the resource is mounted
+			IPath targetPath = target.getFullPath();
+			int numSegments = targetPath.segmentCount();
+			IResource mounted = target;
+			if (numSegments > 2) {
+				//parent could be a mounted resource
+				mounted = workspace.getRoot().getFolder(
+					targetPath.removeLastSegments(numSegments-2));
+			}
+			ResourceInfo mountedInfo = ((Resource)mounted).getResourceInfo(true, false);
+			if (mountedInfo != null && mountedInfo.isSet(M_MOUNTED)) {
+				String location = (String)mountedInfo.getSessionProperty(K_MOUNT_LOCATION);
+				return new Path(location).append(targetPath.removeFirstSegments(2));
+			}
+				
+			//not a mounted resource -- get location of project
 			description = ((Project)target.getProject()).internalGetDescription();
 			if (description != null && description.getLocation() != null) {
 				return description.getLocation().append(target.getProjectRelativePath());
@@ -259,6 +276,13 @@
 			}
 	}
 }
+public void mount(Folder target, IPath localLocation) {
+	//resource already exists when mounting -- just need to update sync info
+	long lastModified = CoreFileSystemLibrary.getLastModified(localLocation.toFile().getAbsolutePath());
+	ResourceInfo info = ((Resource) target).getResourceInfo(false, true);
+	updateLocalSync(info, lastModified, false);
+}
+
 public void move(IResource target, IPath destination, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
 	monitor = Policy.monitorFor(monitor);
 	try {
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
index 2945d18..afa4f92 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
@@ -80,59 +80,72 @@
 	IResource parent = node.getResource();
 
 	/* is there a possibility to have children? */
-	if (parent.getType() == IResource.FILE && node.isFile())
+	int parentType = parent.getType();
+	if (parentType == IResource.FILE && node.isFile())
 		return;
 
 	/* get the list of resources in the file system */
 	String parentLocalLocation = node.getLocalLocation();
 	Object[] list = getLocalList(node, parentLocalLocation);
-	int index = 0;
+	int localIndex = 0;
 
 	/* get the list of resources in the workspace */
-	if (node.existsInWorkspace() && (parent.getType() == IResource.FOLDER || parent.getType() == IResource.PROJECT)) {
+	if (node.existsInWorkspace() && (parentType == IResource.FOLDER || parentType == IResource.PROJECT)) {
 		IResource target = null;
-		boolean next = true;
 		UnifiedTreeNode child = null;
 		IResource[] members = ((IContainer) parent).members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS);
-		int i = 0;
-		while (true) {
-			if (next) {
-				if (i >= members.length)
-					break;
-				target = members[i++];
-			}
+		int workspaceIndex = 0;
+		//iterate simultaneously over file system and workspace members
+		while (workspaceIndex < members.length) {
+			target = members[workspaceIndex];
 			String name = target.getName();
-			String localName = (list != null && index < list.length) ? (String) list[index] : null;
+			String localName = (list != null && localIndex < list.length) ? (String) list[localIndex] : null;
 			int comp = localName != null ? name.compareTo(localName) : -1;
-			if (comp == 0) {
+			//special handling for mounted resources
+			if (parentType == IResource.PROJECT && target.isMounted()) {
+				child = createChildForMountedResource(target);
+				workspaceIndex++;
+				//if there is a matching local file, skip it - it will be blocked by the mounted resource
+				if (comp == 0)
+					localIndex++;
+			} else if (comp == 0) {
 				// resource exists in workspace and file system
 				String localLocation = createChildLocation(parentLocalLocation, localName);
 				long stat = CoreFileSystemLibrary.getStat(localLocation);
 				child = createNode(target, stat, localLocation, localName, true);
-				index++;
-				next = true;
+				localIndex++;
+				workspaceIndex++;
 			} else
 				if (comp > 0) {
 					// resource exists only in file system
 					child = createChildNodeFromFileSystem(node, parentLocalLocation, localName);
-					index++;
-					next = false;
+					localIndex++;
 				} else {
 					// resource exists only in the workspace
 					child = createNode(target, 0, null, null, true);
-					next = true;
+					workspaceIndex++;
 				}
 			addChildToTree(node, child);
 		}
 	}
 
 	/* process any remaining resource from the file system */
-	addChildrenFromFileSystem(node, parentLocalLocation, list, index);
+	addChildrenFromFileSystem(node, parentLocalLocation, list, localIndex);
 
 	/* if we added children, add the childMarker separator */
 	if (node.getFirstChild() != null)
 		addChildrenMarker();
 }
+/**
+ * Creates a tree node for a resource that is mounted in a different file system location.
+ */
+protected UnifiedTreeNode createChildForMountedResource(IResource target) {
+	IPath location = target.getLocation();
+	String locationString = location.toOSString();
+	String localName = location.lastSegment();
+	long stat = CoreFileSystemLibrary.getStat(locationString);
+	return new UnifiedTreeNode(this, target, stat, locationString, localName, true);
+}
 protected void addChildrenFromFileSystem(UnifiedTreeNode node, String parentLocalLocation, Object[] list, int index) throws CoreException {
 	if (list == null)
 		return;
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
index 7404193..1ccc22a 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
@@ -10,12 +10,10 @@
  ******************************************************************************/
 package org.eclipse.core.internal.resources;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.internal.localstore.CoreFileSystemLibrary;
 import org.eclipse.core.internal.utils.Policy;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
 
 public class Folder extends Container implements IFolder {
 protected Folder(IPath path, Workspace container) {
@@ -159,4 +157,63 @@
 	}
 }
 
+/**
+ * @see org.eclipse.core.resources.IFolder#mount(IPath, int, IProgressMonitor)
+ */
+public void mount(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
+	monitor = Policy.monitorFor(monitor);
+	try {
+		String message = Policy.bind("resources.mounting", getFullPath().toString()); //$NON-NLS-1$
+		monitor.beginTask(message, Policy.totalWork);
+		checkValidPath(path, FOLDER);
+		try {
+			workspace.prepareOperation();
+			assertMountRequirements(localLocation);
+			workspace.beginOperation(true);
+			ResourceInfo info = workspace.createResource(this, false);
+			info.setSessionProperty(K_MOUNT_LOCATION, localLocation.toString());
+			info.set(M_MOUNTED);
+			getLocalManager().mount(this, localLocation);
+			monitor.worked(Policy.opWork * 10 / 100);
+			refreshLocal(DEPTH_INFINITE, Policy.subMonitorFor(monitor, Policy.opWork * 90 / 100));
+		} catch (OperationCanceledException e) {
+			workspace.getWorkManager().operationCanceled();
+			throw e;
+		} finally {
+			workspace.endOperation(true, Policy.subMonitorFor(monitor, Policy.buildWork));
+		}
+	} finally {
+		monitor.done();
+	}
+}
+
+/**
+ * @see org.eclipse.core.resources.IFolder#unmount(int, IProgressMonitor)
+ */
+public void unmount(int updateFlags, IProgressMonitor monitor) throws CoreException {
+	monitor = Policy.monitorFor(monitor);
+	try {
+		String message = Policy.bind("resources.unmounting", getFullPath().toString()); //$NON-NLS-1$
+		monitor.beginTask(message, Policy.totalWork);
+		try {
+			workspace.prepareOperation();
+			ResourceInfo info = getResourceInfo(true, false);
+			checkExists(getFlags(info), true);
+			//check if mounted
+			if (!info.isSet(M_MOUNTED)) {
+				String msg = Policy.bind("resources.notMounted", getFullPath().toString());//$NON-NLS-1$
+				throw new ResourceException(IResourceStatus.RESOURCE_NOT_MOUNTED, getFullPath(), msg, null);
+			}
+			workspace.beginOperation(true);
+			deleteResource(true, null);
+		} catch (OperationCanceledException e) {
+			workspace.getWorkManager().operationCanceled();
+			throw e;
+		} finally {
+			workspace.endOperation(true, Policy.subMonitorFor(monitor, Policy.buildWork));
+		}
+	} finally {
+		monitor.done();
+	}
+}
 }
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
index c64d337..c6a040c 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
@@ -15,9 +15,11 @@
 
 public interface ICoreConstants {
 	
-	// Standard resource SessionProperties
+	// Standard resource properties
 	/** map of builders to their last built state. */
 	public static final QualifiedName K_BUILD_MAP = new QualifiedName(ResourcesPlugin.PI_RESOURCES, "BuildMap"); //$NON-NLS-1$
+	/** local file system location for mounted resources */
+	public static final QualifiedName K_MOUNT_LOCATION = new QualifiedName(ResourcesPlugin.PI_RESOURCES, "MountLocation"); //$NON-NLS-1$
 
 	// resource info constants
 	static final long I_UNKNOWN_SYNC_INFO = -2;
@@ -43,6 +45,11 @@
 	 * @since 2.0
 	 */
 	static final int M_TEAM_PRIVATE_MEMBER = 0x8000;
+	/** 
+	 * Marks this resource as a mounted resource.
+	 * @since 2.1
+	 */
+	static final int M_MOUNTED = 0x10000;
 	static final int NULL_FLAG = -1;
 
 	// Internal status codes	
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
index 9f8a21e..c24c5e3 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
@@ -12,6 +12,7 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
+
 import org.eclipse.core.internal.localstore.*;
 import org.eclipse.core.internal.properties.PropertyManager;
 import org.eclipse.core.internal.utils.Assert;
@@ -78,6 +79,27 @@
 		Assert.isTrue(false, status.getChildren()[0].getMessage());
 	}
 }
+protected void assertMountRequirements(IPath localLocation) throws CoreException {
+	checkDoesNotExist(getFlags(getResourceInfo(false, false)), true);
+	Container parent = (Container) getParent();
+	if (parent == null || parent.getType() != IResource.PROJECT) {
+		String msg = Policy.bind("resources.mountNonProject", getFullPath().toString());//$NON-NLS-1$
+		Assert.isLegal(false, msg);
+	}
+	parent.checkAccessible(getFlags(parent.getResourceInfo(false, false)));
+	java.io.File localFile = localLocation.toFile();
+	if (!localFile.exists()) {
+		String msg = Policy.bind("resources.mountDoesNotExist", getFullPath().toString());//$NON-NLS-1$
+		throw new ResourceException(IResourceStatus.NOT_FOUND_LOCAL, getFullPath(), msg, null);
+	}
+	//resource type and file system type must match
+	if ((getType() == IResource.FOLDER) != localFile.isDirectory()) {
+		String msg = Policy.bind("resources.mountWrongType", getFullPath().toString());//$NON-NLS-1$
+		throw new ResourceException(IResourceStatus.WRONG_TYPE_LOCAL, getFullPath(), msg, null);
+	}
+	//TODO:The corresponding location in the local file system is already 
+	//associated with a resource in this workspace.</li>
+}
 protected void assertMoveRequirements(IPath destination, int destinationType) throws CoreException {
 	IStatus status = checkMoveRequirements(destination, destinationType);
 	if (!status.isOK()) {
@@ -764,6 +786,13 @@
 		return flags != NULL_FLAG && ResourceInfo.isSet(flags, M_LOCAL_EXISTS);
 }
 /**
+ * @see org.eclipse.core.resources.IResource#isMounted()
+ */
+public boolean isMounted() {
+	ResourceInfo info = getResourceInfo(false, false);
+	return info != null && info.isSet(M_MOUNTED);
+}
+/**
  * @see IResource
  */
 public boolean isPhantom() {
@@ -1185,7 +1214,4 @@
 		}
 	}
 }
-
-
-
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
index beb92a0..6d43bf8 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
@@ -437,6 +437,54 @@
 public boolean isReadOnly();
 
 /**
+ * Creates a new file resource as a member of this handle's parent resource.
+ * The file's contents will be located in the file specified by the given
+ * file system path.  This resource must not already exist; the file
+ * specified by the given local location must already exist.  This handle's parent
+ * resource must be a project.
+ * <p>
+ * There are currently no update flags applicable for this operation.
+ * </p>
+ * <p>
+ * This method synchronizes this resource with the local file system at the given
+ * location.
+ * </p>
+ * <p>
+ * This method changes resources; these changes will be reported
+ * in a subsequent resource change event, including an indication 
+ * that the folder has been added to its parent.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ * 
+ * @param updateFlags bit-wise or of update flag constants
+ *   (none are currently applicable)
+ * @param localLocation a file system path where the file should be mounted
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource already exists in the workspace.</li>
+ * <li> The workspace contains a resource of a different type 
+ *      at the same path as this resource.</li>
+ * <li> The parent of this resource does not exist.</li>
+ * <li> The parent of this resource is a closed project.</li>
+ * <li> The name of this resource is not valid (according to 
+ *    <code>IWorkspace.validateName</code>).</li>
+ * <li> The corresponding location in the local file system is occupied
+ *    by a directory (as opposed to a file).</li>
+ * <li> The corresponding location in the local file system is already 
+ * 	associated with a resource in this workspace.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification.  See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see #unmount
+ * @since 2.1
+ */
+public void mount(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException;
+/**
  * Moves this resource to be at the given location.
  * <p>
  * This is a convenience method, fully equivalent to:
@@ -631,6 +679,42 @@
  * @since 2.0
  */
 public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException;
+/**
+ * Removes this mounted file from the workspace, but leaves the 
+ * contents in the file system intact.  This operation is only allowed
+ * on files that have been mounted with the <code>mount</code>
+ * method.
+ * <p>
+ * Unmounting a resource also deletes its session and persistent 
+ * properties and markers.
+ * </p>
+ * <p>
+ * Unmounting a resource which has sync information converts the resource 
+ * to a phantom and retains the sync information for future use.
+ * </p>
+ * <p>
+ * This method changes resources; these changes will be reported
+ * in a subsequent resource change event.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ * 
+ * @param updateFlags bit-wise or of update flag constants 
+ *   (none are currently applicable)
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see #mount
+ * @since 2.1
+ */
+public void unmount(int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 /**
  * Sets the contents of this file to the bytes in the given file state.
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFolder.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFolder.java
index 2999ec3..0df5caa 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFolder.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IFolder.java
@@ -200,6 +200,53 @@
  * @see #getFile
  */
 public IFolder getFolder(String name);
+/**
+ * Creates a new folder resource as a member of this handle's parent resource.
+ * The folder's contents will be located in the directory specified by the given
+ * file system path.
+ * <p>
+ * There are currently no update flags applicable for this operation.
+ * </p>
+ * <p>
+ * This method synchronizes this resource with the local file system at the given
+ * location.
+ * </p>
+ * <p>
+ * This method changes resources; these changes will be reported
+ * in a subsequent resource change event, including an indication 
+ * that the folder has been added to its parent.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ * 
+ * @param updateFlags bit-wise or of update flag constants
+ *   (none are currently applicable)
+ * @param localLocation a file system path where the folder should be mounted
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource already exists in the workspace.</li>
+ * <li> The workspace contains a resource of a different type 
+ *      at the same path as this resource.</li>
+ * <li> The parent of this resource does not exist.</li>
+ * <li> The parent of this resource is not an open project</li>
+ * <li> The name of this resource is not valid (according to 
+ *    <code>IWorkspace.validateName</code>).</li>
+ * <li> The corresponding location in the local file system does not exist.</li>
+ * <li> The corresponding location in the local file system is occupied
+ *    by a file (as opposed to a directory).</li>
+ * <li> The corresponding location in the local file system is already 
+ * 	associated with a resource in this workspace.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification.  See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see #unmount
+ * @since 2.1
+ */
+public void mount(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 /**
  * Moves this resource so that it is located at the given path.  
@@ -247,4 +294,42 @@
  * @see IResource#move(IPath,int,IProgressMonitor)
  */
 public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
+/**
+ * Removes this mounted folder from the workspace, but leaves the 
+ * contents in the file system intact.  This operation is only allowed
+ * on folders that have been mounted with the <code>mount</code>
+ * method.
+ * <p>
+ * Unmounting a resource also deletes its session and persistent 
+ * properties and markers.
+ * </p>
+ * <p>
+ * Unmounting a resource which has sync information converts the resource 
+ * to a phantom and retains the sync information for future use.
+ * </p>
+ * <p>
+ * This method changes resources; these changes will be reported
+ * in a subsequent resource change event.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ * 
+ * @param updateFlags bit-wise or of update flag constants 
+ *   (none are currently applicable)
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * <li> This resource is not a mounted folder.</li>
+ * </ul>
+ * @see #mount
+ * @see IResource#isMounted
+ * @since 2.1
+ */
+public void unmount(int updateFlags, IProgressMonitor monitor) throws CoreException;
 }
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
index ce2ec72..dd26f45 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
@@ -329,46 +329,6 @@
  *    reporting and cancellation are not desired
  */
 public void clearHistory(IProgressMonitor monitor) throws CoreException;
-
-/**
- * Makes a copy of this project using the given project description.
- * <p>
- * This is a convenience method, fully equivalent to:
- * <pre>
- *   copy(description, (force ? FORCE : IResource.NONE), monitor);
- * </pre>
- * </p>
- * <p> 
- * This operation changes resources; these changes will be reported
- * in a subsequent resource change event that will include 
- * an indication that the resource copy has been added to its new parent.
- * </p>
- * <p>
- * This operation is long-running; progress and cancellation are provided
- * by the given progress monitor. 
- * </p>
- *
- * @param description the destination project description
- * @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 <code>null</code> if progress
- *    reporting and cancellation are not desired
- * @exception CoreException if this resource could not be copied. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> This resource or one of its descendents is not local.</li>
- * <li> This resource is not a project.</li>
- * <li> The project described by the given description already exists.</li>
- * <li> This resource or one of its descendents is out of sync with the local file
- *      system and <code>force</code> is <code>false</code>.</li>
- * <li> The workspace and the local file system are out of sync
- *      at the destination resource or one of its descendents.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- */
-public void copy(IProjectDescription description, boolean force, IProgressMonitor monitor) throws CoreException;
-
 /**
  * Makes a copy of this resource at the given path. 
  * <p>
@@ -412,69 +372,6 @@
  * </ul>
  */
 public void copy(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException;
-
-/**
- * Makes a copy of this project using the given project description. 
- * The project's descendents are copied as well. The description 
- * specifies the name, location and attributes of the new project.
- * After successful completion, corresponding new resources will exist 
- * at the given path; their contents and properties will be copies of 
- * the originals. The original resources are not affected.
- * <p>
- * When a resource is copied, its persistent properties are 
- * copied with it. Session properties and markers are not copied.
- * </p>
- * <p>
- * The <code>FORCE</code> update flag controls how this method deals with
- * cases where the workspace is not completely in sync with the local file 
- * system. If <code>FORCE</code> is not specified, the method will only attempt
- * to copy resources that are in sync with the corresponding files and
- * directories in the local file system; it will fail if it
- * encounters a resource that is out of sync with the file system.
- * However, if <code>FORCE</code> is specified, the method
- * copies all corresponding files and directories from the local
- * file system, including ones that have been recently updated or created.
- * Note that in both settings of the <code>FORCE</code> flag,
- * the operation fails if the newly created resources in the 
- * workspace would be out of sync with the local file system; 
- * this ensures files in the file system cannot be accidentally
- * overwritten.
- * </p>
- * <p>
- * Update flags other than <code>FORCE</code> are ignored.
- * </p>
- * <p> 
- * This operation changes resources; these changes will be reported
- * in a subsequent resource change event that will include 
- * an indication that the resource copy has been added to its new parent.
- * </p>
- * <p>
- * This operation is long-running; progress and cancellation are provided
- * by the given progress monitor. 
- * </p>
- *
- * @param description the destination project description
- * @param updateFlags bit-wise or of update flag constants
- *   (only <code>FORCE</code> is relevant here)
- * @param monitor a progress monitor, or <code>null</code> if progress
- *    reporting and cancellation are not desired
- * @exception CoreException if this resource could not be copied. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> This resource or one of its descendents is not local.</li>
- * <li> This resource is not a project.</li>
- * <li> The project described by the given description already exists.</li>
- * <li> This resource or one of its descendents is out of sync with the local file
- *      system and <code>FORCE</code> is not specified.</li>
- * <li> The workspace and the local file system are out of sync
- *      at the destination resource or one of its descendents.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- * @since 2.0
- */
-public void copy(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
 /**
  * Makes a copy of this resource at the given path. The resource's
  * descendents are copied as well. 
@@ -557,6 +454,113 @@
  * @since 2.0
  */
 public void copy(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException;
+/**
+ * Makes a copy of this project using the given project description.
+ * <p>
+ * This is a convenience method, fully equivalent to:
+ * <pre>
+ *   copy(description, (force ? FORCE : IResource.NONE), monitor);
+ * </pre>
+ * </p>
+ * <p> 
+ * This operation changes resources; these changes will be reported
+ * in a subsequent resource change event that will include 
+ * an indication that the resource copy has been added to its new parent.
+ * </p>
+ * <p>
+ * This operation is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ *
+ * @param description the destination project description
+ * @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 <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this resource could not be copied. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> This resource or one of its descendents is not local.</li>
+ * <li> This resource is not a project.</li>
+ * <li> The project described by the given description already exists.</li>
+ * <li> This resource or one of its descendents is out of sync with the local file
+ *      system and <code>force</code> is <code>false</code>.</li>
+ * <li> The workspace and the local file system are out of sync
+ *      at the destination resource or one of its descendents.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ */
+public void copy(IProjectDescription description, boolean force, IProgressMonitor monitor) throws CoreException;
+
+
+
+
+
+
+/**
+ * Makes a copy of this project using the given project description. 
+ * The project's descendents are copied as well. The description 
+ * specifies the name, location and attributes of the new project.
+ * After successful completion, corresponding new resources will exist 
+ * at the given path; their contents and properties will be copies of 
+ * the originals. The original resources are not affected.
+ * <p>
+ * When a resource is copied, its persistent properties are 
+ * copied with it. Session properties and markers are not copied.
+ * </p>
+ * <p>
+ * The <code>FORCE</code> update flag controls how this method deals with
+ * cases where the workspace is not completely in sync with the local file 
+ * system. If <code>FORCE</code> is not specified, the method will only attempt
+ * to copy resources that are in sync with the corresponding files and
+ * directories in the local file system; it will fail if it
+ * encounters a resource that is out of sync with the file system.
+ * However, if <code>FORCE</code> is specified, the method
+ * copies all corresponding files and directories from the local
+ * file system, including ones that have been recently updated or created.
+ * Note that in both settings of the <code>FORCE</code> flag,
+ * the operation fails if the newly created resources in the 
+ * workspace would be out of sync with the local file system; 
+ * this ensures files in the file system cannot be accidentally
+ * overwritten.
+ * </p>
+ * <p>
+ * Update flags other than <code>FORCE</code> are ignored.
+ * </p>
+ * <p> 
+ * This operation changes resources; these changes will be reported
+ * in a subsequent resource change event that will include 
+ * an indication that the resource copy has been added to its new parent.
+ * </p>
+ * <p>
+ * This operation is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ *
+ * @param description the destination project description
+ * @param updateFlags bit-wise or of update flag constants
+ *   (only <code>FORCE</code> is relevant here)
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this resource could not be copied. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> This resource or one of its descendents is not local.</li>
+ * <li> This resource is not a project.</li>
+ * <li> The project described by the given description already exists.</li>
+ * <li> This resource or one of its descendents is out of sync with the local file
+ *      system and <code>FORCE</code> is not specified.</li>
+ * <li> The workspace and the local file system are out of sync
+ *      at the destination resource or one of its descendents.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @since 2.0
+ */
+public void copy(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
+
+
 
 /**
  * Creates and returns the marker with the specified type on this resource.
@@ -1101,6 +1105,16 @@
  */
 public boolean isAccessible();
 /**
+ * Returns whether this resource subtree is marked as derived. Returns
+ * <code>false</code> if this resource does not exist.
+ *
+ * @return <code>true</code> if this resource is marked as derived, and
+ *   <code>false</code> otherwise
+ * @see #setDerived
+ * @since 2.0
+ */
+public boolean isDerived();
+/**
  * Returns whether this resource and its members (to the 
  * specified depth) are expected to have their contents (and properties)
  * available locally.  Returns <code>false</code> in all other cases,
@@ -1120,6 +1134,19 @@
  */
 public boolean isLocal(int depth);
 /**
+ * Returns <code>true</code> if this resource has been mounted 
+ * in a location outside of the project's content area.  Returns <code>false</code> 
+ * in all other cases, including the case where this resource does not exist.
+ * The workspace root and projects are never mounted.
+ * 
+ * @return <code>true</code> if this resource is mounted, and 
+ *   <code>false</code> otherwise
+ *
+ * @see IFile#mount
+ * @see IFolder#mount
+ */
+public boolean isMounted();
+/**
  * Returns whether this resource is a phantom resource.
  * <p>
  * The workspace uses phantom resources to remember outgoing deletions and
@@ -1186,54 +1213,16 @@
  * @since 2.0
  */
 public boolean isSynchronized(int depth);
-
-
 /**
- * Renames or relocates this project so that it is the project specified by the given project 
- * description.
- * <p>
- * This is a convenience method, fully equivalent to:
- * <pre>
- *   move(description, (keepHistory ? KEEP_HISTORY : IResource.NONE) | (force ? FORCE : IResource.NONE), monitor);
- * </pre>
- * </p>
- * <p>
- * This operation 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.
- * </p>
- * <p>
- * This method is long-running; progress and cancellation are provided
- * by the given progress monitor. 
- * </p>
+ * Returns whether this resource is a team private member of its parent container.
+ * Returns <code>false</code> if this resource does not exist.
  *
- * @param description the destination project description
- * @param force a flag controlling whether resources that are not
- *    in sync with the local file system will be tolerated
- * @param keepHistory a flag indicating whether or not to keep
- *    local history for files
- * @param monitor a progress monitor, or <code>null</code> if progress
- *    reporting and cancellation are not desired
- * @exception CoreException if this resource could not be moved. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> This resource or one of its descendents is not local.</li>
- * <li> This resource is not a project.</li>
- * <li> The project at the destination already exists.</li>
- * <li> This resource or one of its descendents is out of sync with the local file
- *      system and <code>force</code> is <code>false</code>.</li>
- * <li> The workspace and the local file system are out of sync
- *      at the destination resource or one of its descendents.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- * @see IResourceDelta#getFlags
+ * @return <code>true</code> if this resource is a team private member, and
+ *   <code>false</code> otherwise
+ * @see #setTeamPrivateMember
+ * @since 2.0
  */
-public void move(IProjectDescription description, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
+public boolean isTeamPrivateMember();
 /**
  * Moves this resource so that it is located at the given path.  
  * <p>
@@ -1283,99 +1272,6 @@
  * @see IResourceDelta#getFlags
  */
 public void move(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException;
-
-/**
- * Renames or relocates this project so that it is the project specified by the given
- * project description.  The description specifies the name, location and attributes 
- * of the new project. After successful completion, the old project and 
- * any direct or indirect members will no longer exist; but corresponding 
- * new resources will now exist at the project.
- * <p>
- * When a resource moves, its session and persistent properties move
- * with it. Likewise for all the other attributes of the resource including
- * markers.
- * </p>
- * <p>
- * When this project's location is the default location, then the directories
- * and files on disk are moved to be in
- * the location specified by the given description. If the given description
- * specifies the default location for the project, the directories and files
- * are moved to the default location. In all other cases the directories and
- * files on disk are left untouched. If the name in the given description is
- * the same as this project's name and the location is different, then the 
- * project contents will be moved to the new location. All other parts of the
- * given description are ignored.
- * </p>
- * <p>
- * The <code>FORCE</code> update flag controls how this method deals with
- * cases where the workspace is not completely in sync with the local file 
- * system. If <code>FORCE</code> is not specified, the method will only attempt
- * to move resources that are in sync with the corresponding files and
- * directories in the local file system; it will fail if it
- * encounters a resource that is out of sync with the file system.
- * However, if <code>FORCE</code> is specified, the method
- * moves all corresponding files and directories from the local
- * file system, including ones that have been recently updated or created.
- * Note that in both settings of the <code>FORCE</code> flag,
- * the operation fails if the newly created resources in the 
- * workspace would be out of sync with the local file system; 
- * this ensures files in the file system cannot be accidentally
- * overwritten.
- * </p>
- * <p>
- * The <code>KEEP_HISTORY</code> update flag controls whether or not 
- * file that are about to be deleted from the local file system have their
- * current contents saved 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 <code>KEEP_HISTORY</code>
- * is recommended except in circumstances where past states of the files are of
- * no conceivable interested to the user. Note that local history is maintained
- * with each individual project, and gets discarded when a project is deleted
- * from the workspace. Hence <code>KEEP_HISTORY</code> is only really applicable
- * when moving files and folders, but not whole projects.
- * </p>
- * <p>
- * Update flags other than <code>FORCE</code> and <code>KEEP_HISTORY</code> 
- * are ignored.
- * </p>
- * <p>
- * 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.
- * </p>
- * <p>
- * This method is long-running; progress and cancellation are provided
- * by the given progress monitor. 
- * </p>
- *
- * @param description the destination project description
- * @param updateFlags bit-wise or of update flag constants
- *   (<code>FORCE</code> and <code>KEEP_HISTORY</code>)
- * @param monitor a progress monitor, or <code>null</code> if progress
- *    reporting and cancellation are not desired
- * @exception CoreException if this resource could not be moved. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> This resource or one of its descendents is not local.</li>
- * <li> This resource is not a project.</li>
- * <li> The project at the destination already exists.</li>
- * <li> This resource or one of its descendents is out of sync with the local file system
- *      and <code>FORCE</code> is not specified.</li>
- * <li> The workspace and the local file system are out of sync
- *      at the destination resource or one of its descendents.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- * @see IResourceDelta#getFlags
- * @see #FORCE
- * @see #KEEP_HISTORY
- * @since 2.0
- */
-public void move(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
 /**
  * Moves this resource so that it is located at the given path.  
  * The path of the resource must not be a prefix of the destination path.
@@ -1480,6 +1376,147 @@
  * @since 2.0
  */
 public void move(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException;
+/**
+ * Renames or relocates this project so that it is the project specified by the given project 
+ * description.
+ * <p>
+ * This is a convenience method, fully equivalent to:
+ * <pre>
+ *   move(description, (keepHistory ? KEEP_HISTORY : IResource.NONE) | (force ? FORCE : IResource.NONE), monitor);
+ * </pre>
+ * </p>
+ * <p>
+ * This operation 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.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ *
+ * @param description the destination project description
+ * @param force a flag controlling whether resources that are not
+ *    in sync with the local file system will be tolerated
+ * @param keepHistory a flag indicating whether or not to keep
+ *    local history for files
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this resource could not be moved. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> This resource or one of its descendents is not local.</li>
+ * <li> This resource is not a project.</li>
+ * <li> The project at the destination already exists.</li>
+ * <li> This resource or one of its descendents is out of sync with the local file
+ *      system and <code>force</code> is <code>false</code>.</li>
+ * <li> The workspace and the local file system are out of sync
+ *      at the destination resource or one of its descendents.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see IResourceDelta#getFlags
+ */
+public void move(IProjectDescription description, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
+
+
+
+/**
+ * Renames or relocates this project so that it is the project specified by the given
+ * project description.  The description specifies the name, location and attributes 
+ * of the new project. After successful completion, the old project and 
+ * any direct or indirect members will no longer exist; but corresponding 
+ * new resources will now exist at the project.
+ * <p>
+ * When a resource moves, its session and persistent properties move
+ * with it. Likewise for all the other attributes of the resource including
+ * markers.
+ * </p>
+ * <p>
+ * When this project's location is the default location, then the directories
+ * and files on disk are moved to be in
+ * the location specified by the given description. If the given description
+ * specifies the default location for the project, the directories and files
+ * are moved to the default location. In all other cases the directories and
+ * files on disk are left untouched. If the name in the given description is
+ * the same as this project's name and the location is different, then the 
+ * project contents will be moved to the new location. All other parts of the
+ * given description are ignored.
+ * </p>
+ * <p>
+ * The <code>FORCE</code> update flag controls how this method deals with
+ * cases where the workspace is not completely in sync with the local file 
+ * system. If <code>FORCE</code> is not specified, the method will only attempt
+ * to move resources that are in sync with the corresponding files and
+ * directories in the local file system; it will fail if it
+ * encounters a resource that is out of sync with the file system.
+ * However, if <code>FORCE</code> is specified, the method
+ * moves all corresponding files and directories from the local
+ * file system, including ones that have been recently updated or created.
+ * Note that in both settings of the <code>FORCE</code> flag,
+ * the operation fails if the newly created resources in the 
+ * workspace would be out of sync with the local file system; 
+ * this ensures files in the file system cannot be accidentally
+ * overwritten.
+ * </p>
+ * <p>
+ * The <code>KEEP_HISTORY</code> update flag controls whether or not 
+ * file that are about to be deleted from the local file system have their
+ * current contents saved 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 <code>KEEP_HISTORY</code>
+ * is recommended except in circumstances where past states of the files are of
+ * no conceivable interested to the user. Note that local history is maintained
+ * with each individual project, and gets discarded when a project is deleted
+ * from the workspace. Hence <code>KEEP_HISTORY</code> is only really applicable
+ * when moving files and folders, but not whole projects.
+ * </p>
+ * <p>
+ * Update flags other than <code>FORCE</code> and <code>KEEP_HISTORY</code> 
+ * are ignored.
+ * </p>
+ * <p>
+ * 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.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ *
+ * @param description the destination project description
+ * @param updateFlags bit-wise or of update flag constants
+ *   (<code>FORCE</code> and <code>KEEP_HISTORY</code>)
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this resource could not be moved. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> This resource or one of its descendents is not local.</li>
+ * <li> This resource is not a project.</li>
+ * <li> The project at the destination already exists.</li>
+ * <li> This resource or one of its descendents is out of sync with the local file system
+ *      and <code>FORCE</code> is not specified.</li>
+ * <li> The workspace and the local file system are out of sync
+ *      at the destination resource or one of its descendents.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see IResourceDelta#getFlags
+ * @see #FORCE
+ * @see #KEEP_HISTORY
+ * @since 2.0
+ */
+public void move(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException;
+
+
 
 /**
  * Refreshes the resource hierarchy from this resource and its 
@@ -1517,6 +1554,52 @@
  */
 public void refreshLocal(int depth, IProgressMonitor monitor) throws CoreException;
 /**
+ * Sets whether this resource subtree is marked as derived.
+ * <p>
+ * A <b>derived</b> resource is a regular file or folder that is
+ * created in the course of translating, compiling, copying, or otherwise 
+ * processing other files. Derived resources are not original data, and can be
+ * recreated from other resources. It is commonplace to exclude derived 
+ * resources from version and configuration management because they would
+ * otherwise clutter the team repository with version of these ever-changing
+ * files as each user regenerates them.
+ * </p>
+ * <p>
+ * If a resource or any of its ancestors is marked as derived, a team 
+ * provider should assume that the resource is not under version and
+ * configuration management <it>by default</it>. That is, the resource
+ * should only be stored in a team repository if the user explicitly indicates
+ * that this resource is worth saving.
+ * </p>
+ * <p>
+ * Newly-created resources are not marked as derived; rather, the mark must be
+ * set explicitly using <code>setDerived(true)</code>. Derived marks are maintained
+ * in the in-memory resource tree, and are discarded when the resources is deleted.
+ * Derived marks are saved to disk when a project is closed, or when the workspace
+ * is saved.
+ * </p>
+ * <p>
+ * Projects and the workspace root are never considered derived; attempts to
+ * mark them as derived are ignored.
+ * </p>
+ * <p>
+ * This operation does <b>not</b> result in a resource change event, and does not
+ * trigger auto-builds.
+ * </p>
+ * 
+ * @param isDerived <code>true</code> if this resource is to be marked
+ *   as derived, and <code>false</code> otherwise
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ * @see #isDerived
+ * @since 2.0
+ */
+public void setDerived(boolean isDerived) throws CoreException;
+/**
  * Set whether or not this resource and its members (to the 
  * specified depth) are expected to have their contents (and properties)
  * available locally.  The workspace root and projects are always local and 
@@ -1615,102 +1698,6 @@
  */
 public void setSessionProperty(QualifiedName key, Object value) throws CoreException;
 /**
- * Marks this resource as having changed even though its content
- * may not have changed. This method can be used to trigger 
- * the rebuilding of resources/structures derived from this resource.
- * Touching the workspace root has no effect.
- * </p>
- * <p>
- * This method changes resources; these changes will be reported
- * in a subsequent resource change event.
- * </p>
- * <p>
- * This method is long-running; progress and cancellation are provided
- * by the given progress monitor. 
- * </p>
- *
- * @param monitor a progress monitor, or <code>null</code> if progress
- *    reporting and cancellation are not desired
- * @exception CoreException if this method fails. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> This resource is not local.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- */ 
-public void touch(IProgressMonitor monitor) throws CoreException;
-
-/**
- * Returns whether this resource subtree is marked as derived. Returns
- * <code>false</code> if this resource does not exist.
- *
- * @return <code>true</code> if this resource is marked as derived, and
- *   <code>false</code> otherwise
- * @see #setDerived
- * @since 2.0
- */
-public boolean isDerived();
-
-/**
- * Sets whether this resource subtree is marked as derived.
- * <p>
- * A <b>derived</b> resource is a regular file or folder that is
- * created in the course of translating, compiling, copying, or otherwise 
- * processing other files. Derived resources are not original data, and can be
- * recreated from other resources. It is commonplace to exclude derived 
- * resources from version and configuration management because they would
- * otherwise clutter the team repository with version of these ever-changing
- * files as each user regenerates them.
- * </p>
- * <p>
- * If a resource or any of its ancestors is marked as derived, a team 
- * provider should assume that the resource is not under version and
- * configuration management <it>by default</it>. That is, the resource
- * should only be stored in a team repository if the user explicitly indicates
- * that this resource is worth saving.
- * </p>
- * <p>
- * Newly-created resources are not marked as derived; rather, the mark must be
- * set explicitly using <code>setDerived(true)</code>. Derived marks are maintained
- * in the in-memory resource tree, and are discarded when the resources is deleted.
- * Derived marks are saved to disk when a project is closed, or when the workspace
- * is saved.
- * </p>
- * <p>
- * Projects and the workspace root are never considered derived; attempts to
- * mark them as derived are ignored.
- * </p>
- * <p>
- * This operation does <b>not</b> result in a resource change event, and does not
- * trigger auto-builds.
- * </p>
- * 
- * @param isDerived <code>true</code> if this resource is to be marked
- *   as derived, and <code>false</code> otherwise
- * @exception CoreException if this method fails. Reasons include:
- * <ul>
- * <li> This resource does not exist.</li>
- * <li> Resource changes are disallowed during certain types of resource change 
- *       event notification. See IResourceChangeEvent for more details.</li>
- * </ul>
- * @see #isDerived
- * @since 2.0
- */
-public void setDerived(boolean isDerived) throws CoreException;
-
-/**
- * Returns whether this resource is a team private member of its parent container.
- * Returns <code>false</code> if this resource does not exist.
- *
- * @return <code>true</code> if this resource is a team private member, and
- *   <code>false</code> otherwise
- * @see #setTeamPrivateMember
- * @since 2.0
- */
-public boolean isTeamPrivateMember();
-
-/**
  * Sets whether this resource subtree is a team private member of its parent container.
  * <p>
  * A <b>team private member</b> resource is a special file or folder created by a team
@@ -1746,5 +1733,30 @@
  * @since 2.0
  */
 public void setTeamPrivateMember(boolean isTeamPrivate) throws CoreException;
-
+/**
+ * Marks this resource as having changed even though its content
+ * may not have changed. This method can be used to trigger 
+ * the rebuilding of resources/structures derived from this resource.
+ * Touching the workspace root has no effect.
+ * </p>
+ * <p>
+ * This method changes resources; these changes will be reported
+ * in a subsequent resource change event.
+ * </p>
+ * <p>
+ * This method is long-running; progress and cancellation are provided
+ * by the given progress monitor. 
+ * </p>
+ *
+ * @param monitor a progress monitor, or <code>null</code> if progress
+ *    reporting and cancellation are not desired
+ * @exception CoreException if this method fails. Reasons include:
+ * <ul>
+ * <li> This resource does not exist.</li>
+ * <li> This resource is not local.</li>
+ * <li> Resource changes are disallowed during certain types of resource change 
+ *       event notification. See IResourceChangeEvent for more details.</li>
+ * </ul>
+ */ 
+public void touch(IProgressMonitor monitor) throws CoreException;
 }
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
index c7cb34f..718386f 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
@@ -123,6 +123,13 @@
  	 */
 	public static final int CASE_VARIANT_EXISTS = 275;
 
+	/** Status code constant (value 276) indicating a file exists in the
+	 * file system but is not of the expected type (file instead of directory,
+	 * or vice-versa).
+ 	 * Severity: error. Category: workspace.
+ 	 */
+	public static final int WRONG_TYPE_LOCAL = 276;
+
 	// Workspace constants [300-398]
 	// Information Only [300-332]
 
@@ -184,7 +191,13 @@
  	 * Severity: error. Category: workspace.
  	 */
 	public static final int MARKER_NOT_FOUND = 376;
-		
+
+	/** Status code constant (value 377) indicating a resource is 
+	 * unexpectedly not mounted.
+ 	 * Severity: error. Category: workspace.
+ 	 */
+	public static final int RESOURCE_NOT_MOUNTED = 377;
+
 	// Internal constants [500-598]
 	// Information Only [500-532]