[nobug]: Updating ModuleCore API. Committed for MDE.
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/ModuleCore.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/ModuleCore.java
index 294c17a..941bd20 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/ModuleCore.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/ModuleCore.java
@@ -70,7 +70,6 @@
 public class ModuleCore implements IEditModelHandler {
 
 	public static final Class ADAPTER_TYPE = ModuleCore.class;
-	public static final int DELETE_METAMODEL_ONLY = 0x100000; 
 
 	static final String DEPLOYABLES_ROOT = ".deployables/"; //$NON-NLS-1$
 	static String MODULE_META_FILE_NAME = ".wtpmodules"; //$NON-NLS-1$
@@ -103,7 +102,8 @@
 	 * @return A ModuleCore edit facade to access the WTP Modules Model
 	 */
 	public static ModuleCore getModuleCoreForRead(IProject aProject) {
-		return new ModuleCore(ModuleCoreNature.getModuleCoreNature(aProject), true);
+		ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(aProject);
+		return nature != null ? new ModuleCore(nature, true) : null;
 	}
 
 	/**
@@ -122,7 +122,8 @@
 	 * @return A ModuleCore edit facade to access the WTP Modules Model
 	 */
 	public static ModuleCore getModuleCoreForWrite(IProject aProject) {
-		return new ModuleCore(ModuleCoreNature.getModuleCoreNature(aProject), false);
+		ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(aProject);
+		return nature != null ? new ModuleCore(nature, false) : null;
 	}
 
 	/**
@@ -150,8 +151,8 @@
 
 	/**
 	 * <p>
-	 * For {@see WorkbenchComponent}s that are contained within a project, the containing project can
-	 * be determined with the {@see WorkbenchComponent}'s fully-qualified module URI.
+	 * For {@see WorkbenchComponent}s that are contained within a project, the containing project
+	 * can be determined with the {@see WorkbenchComponent}'s fully-qualified module URI.
 	 * </p>
 	 * <p>
 	 * The following method will return the the corresponding project for the supplied module URI,
@@ -184,12 +185,11 @@
 	/**
 	 * <p>
 	 * Returns the corresponding Eclipse IResource, if it can be determined, for the given
-	 * {@see ComponentResource}. The {@see ComponentResource#getSourcePath()}
-	 * &nbsp;must return a valid resource path for This method to return a valid value. The returned
-	 * value may be either an {@see org.eclipse.core.resources.IFile}&nbsp;or
-	 * {@see org.eclipse.core.resources.IFolder}. A client may use the return value of
-	 * {@see IResource#getType()}&nbsp;to determine what type of resource was returned. (@see
-	 * IResource#FILE} or {@see IResource#FOLDER}).
+	 * {@see ComponentResource}. The {@see ComponentResource#getSourcePath()} &nbsp;must return a
+	 * valid resource path for This method to return a valid value. The returned value may be either
+	 * an {@see org.eclipse.core.resources.IFile}&nbsp;or {@see org.eclipse.core.resources.IFolder}.
+	 * A client may use the return value of {@see IResource#getType()}&nbsp;to determine what type
+	 * of resource was returned. (@see IResource#FILE} or {@see IResource#FOLDER}).
 	 * </p>
 	 * <p>
 	 * <b>This method may return null. </b>
@@ -210,8 +210,8 @@
 
 	/**
 	 * <p>
-	 * Returns a URI for the supplied {@see WorkbenchComponent}. The URI will be relative to project
-	 * root of the flexible project that contains the {@see WorkbenchComponent}.
+	 * Returns a URI for the supplied {@see WorkbenchComponent}. The URI will be relative to
+	 * project root of the flexible project that contains the {@see WorkbenchComponent}.
 	 * </p>
 	 * <p>
 	 * <b>This method may return null. </b>
@@ -236,8 +236,8 @@
 	 * <p>
 	 * Returns a collection of the output containers for the supplied project. The collection may be
 	 * a single root output container or an array of output containers without a common root. For
-	 * clients that are looking for an output container for a specific {@see WorkbenchComponent}, see
-	 * {@see #getOutputContainerRoot(WorkbenchComponent)}.
+	 * clients that are looking for an output container for a specific {@see WorkbenchComponent},
+	 * see {@see #getOutputContainerRoot(WorkbenchComponent)}.
 	 * </p>
 	 * <p>
 	 * If the project is not a ModuleCore project, or has no ModuleCore output containers, an empty
@@ -272,15 +272,15 @@
 	public static String getDeployedName(URI aFullyQualifiedModuleURI) throws UnresolveableURIException {
 		return ModuleURIUtil.getDeployedName(aFullyQualifiedModuleURI);
 	}
-	
+
 	public static IVirtualContainer create(IProject aProject, String aName) {
 		return new VirtualContainer(aProject, aName, new Path("/")); //$NON-NLS-1$
 	}
-	
+
 	public static IVirtualFolder create(IFolder aFolder, String aComponentName, IPath aRuntimePath) {
 		return new VirtualFolder(aFolder, aComponentName, aRuntimePath);
 	}
-	
+
 	public static ComponentType getComponentType(IVirtualContainer aComponent) {
 		ModuleCore moduleCore = null;
 		ComponentType componentType = null;
@@ -289,30 +289,29 @@
 			WorkbenchComponent wbComponent = moduleCore.findWorkbenchModuleByDeployName(aComponent.getComponentName());
 			componentType = wbComponent.getComponentType();
 		} finally {
-			if(moduleCore != null)
+			if (moduleCore != null)
 				moduleCore.dispose();
 		}
 		return componentType;
 	}
-	
-	
+
+
 	public static void setComponentType(IVirtualContainer component, ComponentType aComponentType) {
-		ModuleCore moduleCore = null; 
+		ModuleCore moduleCore = null;
 		try {
 			moduleCore = ModuleCore.getModuleCoreForWrite(component.getProject());
 			WorkbenchComponent wbComponent = moduleCore.findWorkbenchModuleByDeployName(component.getComponentName());
 			wbComponent.setComponentType(aComponentType);
 		} finally {
-			if(moduleCore != null) {
+			if (moduleCore != null) {
 				moduleCore.saveIfNecessary(null);
 				moduleCore.dispose();
 			}
-		} 
+		}
 	}
-	
+
 	public static URI createComponentURI(IProject aContainingProject, String aComponentName) {
-		return URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL+IPath.SEPARATOR+PlatformURLModuleConnection.RESOURCE_MODULE
-								+aContainingProject.getName()+IPath.SEPARATOR+aComponentName);
+		return URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + IPath.SEPARATOR + PlatformURLModuleConnection.RESOURCE_MODULE + aContainingProject.getName() + IPath.SEPARATOR + aComponentName);
 	}
 
 	protected ModuleCore(ModuleCoreNature aNature, boolean toAccessAsReadOnly) {
@@ -414,20 +413,22 @@
 	public ProjectComponents getModuleModelRoot() {
 		return (ProjectComponents) structuralModel.getPrimaryRootObject();
 	}
-	
+
 	/**
 	 * <p>
-	 * 	Return the an array of ComponentResource which basically represent the
-	 * source containers of a WorkbenchResource.
+	 * Return the an array of ComponentResource which basically represent the source containers of a
+	 * WorkbenchResource.
 	 * <p>
+	 * 
 	 * @param component
 	 * @return
 	 */
 	public ComponentResource[] getSourceContainers(WorkbenchComponent component) {
-		//TODO Api in progress: Need to return the Java Source containers of the project
+		// TODO Api in progress: Need to return the Java Source containers of the project
+		// TODO MDE: I don't know if I agree with the placement of this method.
 		return null;
 	}
- 
+
 	/**
 	 * <p>
 	 * Clients that wish to modify the individual {@see WorkbenchComponent}&nbsp;instances may use
@@ -444,9 +445,9 @@
 
 	/**
 	 * <p>
-	 * Create a {@see WorkbenchComponent}&nbsp;with the given deployed name. The returned module will
-	 * be contained by the root object of the current ModuleCore (so no need to re-add it to the
-	 * Module Module root object). The current ModuleCore must not be read-only to invoke This
+	 * Create a {@see WorkbenchComponent}&nbsp;with the given deployed name. The returned module
+	 * will be contained by the root object of the current ModuleCore (so no need to re-add it to
+	 * the Module Module root object). The current ModuleCore must not be read-only to invoke This
 	 * method.
 	 * </p>
 	 * 
@@ -477,8 +478,8 @@
 	 *            {@see ComponentResource}
 	 * @param aResource
 	 *            A non-null IResource that will be used to set the sourcePath
-	 * @return A {@see ComponentResource}associated with the current ModuleCore with its
-	 *         sourcePath equivalent to aResource
+	 * @return A {@see ComponentResource}associated with the current ModuleCore with its sourcePath
+	 *         equivalent to aResource
 	 * @throws IllegalStateException
 	 *             If the current ModuleCore was created as read-only
 	 */
@@ -494,15 +495,15 @@
 
 	/**
 	 * <p>
-	 * Create a {@see ComponentType}&nbsp;with the sourcePath of aResource. The returned resource will
-	 * be associated with the current ModuleCore. The current ModuleCore must not be read-only to
-	 * invoke This method.
+	 * Create a {@see ComponentType}&nbsp;with the sourcePath of aResource. The returned resource
+	 * will be associated with the current ModuleCore. The current ModuleCore must not be read-only
+	 * to invoke This method.
 	 * </p>
 	 * 
 	 * @param aResource
 	 *            A non-null IResource that will be used to set the sourcePath
-	 * @return A {@see ComponentResource}associated with the current ModuleCore with its
-	 *         sourcePath equivalent to aResource
+	 * @return A {@see ComponentResource}associated with the current ModuleCore with its sourcePath
+	 *         equivalent to aResource
 	 * @throws IllegalStateException
 	 *             If the current ModuleCore was created as read-only
 	 */
@@ -560,16 +561,15 @@
 
 	/**
 	 * <p>
-	 * Locates the {@see ComponentResource}s that contain the supplied resource in their
-	 * source path. There are no representations about the containment of the
-	 * {@see ComponentResource}s which are returned. The only guarantee is that the returned
-	 * elements are contained within the same project.
+	 * Locates the {@see ComponentResource}s that contain the supplied resource in their source
+	 * path. There are no representations about the containment of the {@see ComponentResource}s
+	 * which are returned. The only guarantee is that the returned elements are contained within the
+	 * same project.
 	 * </p>
 	 * <p>
-	 * The sourcePath of each {@see ComponentResource}&nbsp;will be mapped to either an IFile
-	 * or an IFolder. As a result, if the {@see ComponentResource}&nbsp;is a container
-	 * mapping, the path of the supplied resource may not be identical the sourcePath of the
-	 * {@see ComponentResource}.
+	 * The sourcePath of each {@see ComponentResource}&nbsp;will be mapped to either an IFile or an
+	 * IFolder. As a result, if the {@see ComponentResource}&nbsp;is a container mapping, the path
+	 * of the supplied resource may not be identical the sourcePath of the {@see ComponentResource}.
 	 * </p>
 	 * 
 	 * @param aWorkspaceRelativePath
@@ -590,25 +590,25 @@
 			module = (WorkbenchComponent) modules.get(i);
 			resources = module.findWorkbenchModuleResourceBySourcePath(aWorkspaceRelativePath);
 			if (resources != null && resources.length != 0)
-					foundResources.addAll(Arrays.asList(resources));
-			}
-			if (foundResources.size() > 0)
-				return (ComponentResource[]) foundResources.toArray(new ComponentResource[foundResources.size()]);
+				foundResources.addAll(Arrays.asList(resources));
+		}
+		if (foundResources.size() > 0)
+			return (ComponentResource[]) foundResources.toArray(new ComponentResource[foundResources.size()]);
 		return NO_RESOURCES;
 	}
 
 	/**
 	 * <p>
-	 * Returns the {@see WorkbenchComponent}&nbsp;contained by the current ModuleCore with the deploy
-	 * name aModuleName.
+	 * Returns the {@see WorkbenchComponent}&nbsp;contained by the current ModuleCore with the
+	 * deploy name aModuleName.
 	 * </p>
 	 * <p>
 	 * <b>This method may return null. </b>
 	 * </p>
 	 * 
 	 * @param aModuleName
-	 * @return The {@see WorkbenchComponent}contained by the current ModuleCore with the deploy name
-	 *         aModuleName
+	 * @return The {@see WorkbenchComponent}contained by the current ModuleCore with the deploy
+	 *         name aModuleName
 	 * @see WorkbenchComponent#getDeployedName()
 	 */
 	public WorkbenchComponent findWorkbenchModuleByDeployName(String aModuleName) {
@@ -644,12 +644,14 @@
 	 * <p>
 	 * Searches the available {@see WorkbenchComponent}s as available through
 	 * {@see #getWorkbenchModules()}&nbsp;for {@see WorkbenchComponent}s that have a
-	 * {@see WorkbenchComponent#getModuleType()}with a a module type Id as specified by aModuleTypeId.
+	 * {@see WorkbenchComponent#getModuleType()}with a a module type Id as specified by
+	 * aModuleTypeId.
 	 * </p>
 	 * 
 	 * @param aModuleTypeId
 	 *            A non-null module type id ({@see ComponentType#getModuleTypeId()})
-	 * @return A non-null array of the {@see WorkbenchComponent}s that match the given module type id
+	 * @return A non-null array of the {@see WorkbenchComponent}s that match the given module type
+	 *         id
 	 */
 	public WorkbenchComponent[] findWorkbenchModuleByType(String aModuleTypeId) {
 		WorkbenchComponent[] availableModules = getWorkbenchModules();
@@ -698,10 +700,10 @@
 			dependentCore = (ModuleCore) dependentCores.get(aModuleURI);
 			if (dependentCore == null) {
 				IProject container = getContainingProject(aModuleURI);
-				if(container != null) {
+				if (container != null) {
 					dependentCore = getModuleCoreForRead(container);
 					dependentCores.put(aModuleURI, dependentCore);
-				} else 
+				} else
 					throw new UnresolveableURIException(aModuleURI);
 			}
 		}
@@ -711,21 +713,23 @@
 	private void throwAttemptedReadOnlyModification() {
 		throw new IllegalStateException("Attempt to modify a ModuleCore edit facade that was loaded as read-only.");
 	}
-	
+
 	/**
 	 * temporary method to return first module in the project
+	 * 
 	 * @return first module in the project
 	 * @deprecated
 	 */
 	public WorkbenchComponent getFirstModule() {
-		if (getWorkbenchModules().length>0)
+		if (getWorkbenchModules().length > 0)
 			return getWorkbenchModules()[0];
 		return null;
 	}
-	
+
 	/**
-	 * temporary method to return artifact edit for first module in project
-	 * USERS MUST DISPOSE THE ARTIFACT EDIT
+	 * temporary method to return artifact edit for first module in project USERS MUST DISPOSE THE
+	 * ARTIFACT EDIT
+	 * 
 	 * @param project
 	 * @return the artifact edit for the first module
 	 * @deprecated
@@ -739,7 +743,7 @@
 			module = moduleCore.getFirstModule();
 			artEdit = ArtifactEdit.getArtifactEditForRead(module);
 		} finally {
-			if (moduleCore !=null)
+			if (moduleCore != null)
 				moduleCore.dispose();
 		}
 		return artEdit;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualContainer.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualContainer.java
index 3e65919..90f3e16 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualContainer.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualContainer.java
@@ -84,17 +84,7 @@
 		// moduleCore.dispose();
 		// }
 		return new VirtualFolder(getComponentHandle(), getRuntimePath().append(path));
-	}
-
-	public String getDefaultCharset() throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		// return null;
-	}
-
-	public String getDefaultCharset(boolean checkImplicit) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		// return null;
-	}
+	} 
 
 	/**
 	 * @see IContainer#getFile(org.eclipse.core.runtime.IPath)
@@ -179,7 +169,8 @@
 
 					if (fullRuntimePath.segmentCount() == 1) {
 						realResource = ModuleCore.getEclipseResource(componentResources[componentResourceIndex]);
-						addVirtualResource(virtualResources, realResource, newRuntimePath);
+						if(realResource != null)
+							addVirtualResource(virtualResources, realResource, newRuntimePath);
 					} else if (fullRuntimePath.segmentCount() > 1) {
 						virtualResources.add(new VirtualFolder(getComponentHandle(), newRuntimePath));
 					}
@@ -194,32 +185,11 @@
 		return (IVirtualResource[]) virtualResources.toArray(new IVirtualResource[virtualResources.size()]);
 	}
 
-	/**
-	 * @param virtualResources
-	 * @param realResource
-	 * @param newRuntimePath
-	 */
-	private void addVirtualResource(Set virtualResources, IResource realResource, IPath newRuntimePath) {
-		if (realResource.getType() == IResource.FOLDER)
-			virtualResources.add(new VirtualFolder(getComponentHandle(), newRuntimePath));
-		else
-			virtualResources.add(new VirtualFile(getComponentHandle(), newRuntimePath));
-	}
 
 	public IVirtualFile[] findDeletedMembersWithHistory(int depth, IProgressMonitor monitor) throws CoreException {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		// return null;
-	}
-
-	public void setDefaultCharset(String charset) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
-	public void setDefaultCharset(String charset, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
+	} 
 
 	public void commit() throws CoreException{
 		
@@ -236,11 +206,15 @@
 			}
 		} 
 	}
+	
+	public int getType() {
+		return IResource.ROOT;
+	}
 
 	protected void doDeleteMetaModel(int updateFlags, IProgressMonitor monitor) {
 		ModuleCore moduleCore = null;
 		try {
-			moduleCore = ModuleCore.getModuleCoreForRead(getComponentHandle().getProject());
+			moduleCore = ModuleCore.getModuleCoreForWrite(getComponentHandle().getProject());
 			WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentHandle().getName());
 			moduleCore.getModuleModelRoot().getComponents().remove(component);
 		} finally {
@@ -254,5 +228,18 @@
 	protected void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 	}
+	
+
+	/**
+	 * @param virtualResources
+	 * @param realResource
+	 * @param newRuntimePath
+	 */
+	private void addVirtualResource(Set virtualResources, IResource realResource, IPath newRuntimePath) {
+		if (realResource.getType() == IResource.FOLDER)
+			virtualResources.add(new VirtualFolder(getComponentHandle(), newRuntimePath));
+		else
+			virtualResources.add(new VirtualFile(getComponentHandle(), newRuntimePath));
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFile.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFile.java
index ea33452..7c9f6bc 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFile.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFile.java
@@ -8,45 +8,20 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.modulecore.internal.resources;
 
-import java.io.InputStream;
-
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFileState;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.content.IContentDescription;
 import org.eclipse.wst.common.modulecore.resources.IVirtualFile;
 
 public class VirtualFile extends VirtualResource implements IVirtualFile {
-	 
-	private final IFile realFile;
-	
-//	public VirtualFile(IFile aRealFile, String aComponentName, IPath aRuntimePath) {
-//		super(aRealFile.getProject(), aComponentName, aRuntimePath); 
-//	}
 
 	protected VirtualFile(ComponentHandle aComponentHandle, IPath aRuntimePath) {
-		super(aComponentHandle, aRuntimePath);
-		realFile = getProject().getFile(getProjectRelativePath());
+		super(aComponentHandle, aRuntimePath); 
 	}
 
-	public void appendContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {		
-		realFile.create(source, force, monitor);
-	}
-
-	public void appendContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		realFile.appendContents(source, updateFlags, monitor);
-	}
-
-	public void create(InputStream source, boolean force, IProgressMonitor monitor) throws CoreException {
-		realFile.create(source, force, monitor);
-	}
-
-	public void create(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		realFile.create(source, updateFlags, monitor);
-
-	}
+ 
 	public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 //		
@@ -75,73 +50,25 @@
 		
 		
 	}
-
-	public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException { 
-		realFile.delete(force, keepHistory, monitor);
-
-	}
-
-	public String getCharset() throws CoreException {
-		return realFile.getCharset();
-	}
-
-	public String getCharset(boolean checkImplicit) throws CoreException {
-		return realFile.getCharset(checkImplicit);
-	}
-
-	public IContentDescription getContentDescription() throws CoreException { 
-		return realFile.getContentDescription();
-	}
-
-	public InputStream getContents() throws CoreException { 
-		return realFile.getContents();
-	}
-
-	public InputStream getContents(boolean force) throws CoreException {
-		return realFile.getContents(force);
-	}
- 
-
-	public IFileState[] getHistory(IProgressMonitor monitor) throws CoreException { 
-		return realFile.getHistory(monitor);
-	}
-
-	public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
-	public void setCharset(String newCharset, IProgressMonitor monitor) throws CoreException { 
-		realFile.setCharset(newCharset, monitor);
-
-	}
-
-	public void setContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
-		realFile.setContents(source, force, keepHistory, monitor);
-	}
-
-	public void setContents(IFileState source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
-		realFile.setContents(source, force, keepHistory, monitor);
-	}
-
-	public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		realFile.setContents(source, updateFlags, monitor);
-	}
-
-	public void setContents(IFileState source, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		realFile.setContents(source, updateFlags, monitor);
+	
+	public int getType() {
+		return IResource.FILE;
 	}
 	
 	public IFile getRealFile() {
-		return realFile;
+		return getProject().getFile(getProjectRelativePath());
 	}
 	
 	public IFile[] getRealFiles() {
-		return new IFile[] {realFile};
+		return new IFile[] {getRealFile()};
 	}
+
+	protected void doDeleteMetaModel(int updateFlags,IProgressMonitor monitor) {
+		
+	}	
 	
 	protected void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException {
-		realFile.delete(updateFlags, monitor);
+
 	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFolder.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFolder.java
index 9bfe16f..6664947 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFolder.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualFolder.java
@@ -9,14 +9,12 @@
 package org.eclipse.wst.common.modulecore.internal.resources;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -27,7 +25,6 @@
 import org.eclipse.wst.common.modulecore.WorkbenchComponent;
 import org.eclipse.wst.common.modulecore.internal.impl.ResourceTreeRoot;
 import org.eclipse.wst.common.modulecore.resources.IVirtualContainer;
-import org.eclipse.wst.common.modulecore.resources.IVirtualFile;
 import org.eclipse.wst.common.modulecore.resources.IVirtualFolder;
 import org.eclipse.wst.common.modulecore.resources.IVirtualResource;
 
@@ -66,18 +63,13 @@
 	protected VirtualFolder(ComponentHandle aComponentHandle, IPath aRuntimePath) {
 		super(aComponentHandle, aRuntimePath);
 	}
-
+ 
 	// TODO WTP:Implement this method
-	public void create(boolean force, boolean local, IProgressMonitor monitor) throws CoreException {
-		create((force ? IResource.FORCE : IResource.NONE), local, monitor);
-	}
-
-	// TODO WTP:Implement this method
-	public void create(int updateFlags, boolean local, IProgressMonitor monitor) throws CoreException {
+	public void create(int updateFlags, IProgressMonitor monitor) throws CoreException {
 
 		IVirtualContainer container = ModuleCore.create(getProject(), getComponentHandle().getName());
 		IVirtualFolder root = container.getFolder(new Path("/"));  //$NON-NLS-1$		
-		IFolder realFolder = ResourcesPlugin.getWorkspace().getRoot().getFolder(root.getWorkspaceRelativePath()); 
+		IFolder realFolder = getProject().getFolder(root.getProjectRelativePath()); 
 		IFolder newFolder = realFolder.getFolder(getRuntimePath()); 
 		createResource(newFolder, updateFlags, monitor); 
 
@@ -136,11 +128,6 @@
 
 	}
 
-	public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
 	// TODO WTP:Implement this method
 	public boolean exists(IPath path) {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
@@ -170,53 +157,69 @@
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		// return null;
 	}
-
-	public String getDefaultCharset() throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		// return null;
-	}
-
-	public String getDefaultCharset(boolean checkImplicit) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		// return null;
-	}
-
-	public IVirtualFile[] findDeletedMembersWithHistory(int depth, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		// return null;
-	}
-
-	public void setDefaultCharset(String charset) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
-	public void setDefaultCharset(String charset, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
+ 
+	public int getType() {
+		return IResource.FOLDER;
 	}
 
 	public void commit() throws CoreException {
-
-		// ModuleCore moduleCore = null;
-		// try {
-		// moduleCore = ModuleCore.getModuleCoreForWrite(getProject());
-		// WorkbenchComponent component =
-		// moduleCore.findWorkbenchModuleByDeployName(getComponentHandle().getName());
-		// if(component == null)
-		// moduleCore.createWorkbenchModule(getComponentHandle().getName());
-		// } finally {
-		// if (moduleCore != null) {
-		// moduleCore.saveIfNecessary(null);
-		// moduleCore.dispose();
-		// }
-		// }
+ 
 	}
 
+	public IFolder getRealFolder() { 
+		return getProject().getFolder(getProjectRelativePath());
+	}
+	
+	public IFolder[] getRealFolders() {
+		return new IFolder[] {getRealFolder()};
+	}
+
+	protected void doDeleteMetaModel(int updateFlags, IProgressMonitor monitor) {
+
+		// only handles explicit mappings
+		ModuleCore moduleCore = null;
+		try {
+			URI runtimeURI = URI.createURI(getRuntimePath().toString());
+			moduleCore = ModuleCore.getModuleCoreForWrite(getProject());
+			WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentName());
+			ComponentResource[] resources = component.findWorkbenchModuleResourceByDeployPath(runtimeURI);
+			for (int i = 0; i < resources.length; i++) {
+				if(runtimeURI.equals(resources[i].getRuntimePath())) 
+					component.getResources().remove(resources[i]);								
+			}
+			
+		} finally {
+			if (moduleCore != null) {
+				moduleCore.saveIfNecessary(null);
+				moduleCore.dispose();
+			}
+		}
+	}	
+	
 	protected void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException {
-		for (Iterator iter = realFolders.iterator(); iter.hasNext();) {
-			IFolder realFolder = (IFolder) iter.next();
-			realFolder.delete(updateFlags, monitor);
+
+		// only handles explicit mappings
+		ModuleCore moduleCore = null;
+		try {
+			URI runtimeURI = URI.createURI(getRuntimePath().toString());
+			moduleCore = ModuleCore.getModuleCoreForWrite(getProject());
+			WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentName());
+			ComponentResource[] resources = component.findWorkbenchModuleResourceByDeployPath(runtimeURI);
+			IResource realResource;
+			for (int i = 0; i < resources.length; i++) {
+				if(runtimeURI.equals(resources[i].getRuntimePath())) {
+					realResource = ModuleCore.getEclipseResource(resources[i]);
+					if(realResource != null && realResource.getType() == getType())
+						realResource.delete(updateFlags, monitor);
+				}
+					
+			}
+			
+		} finally {
+			if (moduleCore != null) {
+				moduleCore.saveIfNecessary(null);
+				moduleCore.dispose();
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualResource.java
index 0194127..7fb9691 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/resources/VirtualResource.java
@@ -35,6 +35,7 @@
 	private IPath runtimePath;
 	private int hashCode;
 	private String toString;
+	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 	
 	protected VirtualResource(ComponentHandle aComponentHandle, IPath aRuntimePath) {
 		componentHandle = aComponentHandle;		
@@ -64,21 +65,10 @@
 	public void accept(IResourceVisitor visitor, int depth, int memberFlags) throws CoreException {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 
-	} 
-
-	public void copy(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
-	public void copy(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}  
-
+	}   
+	
 	public void delete(boolean force, IProgressMonitor monitor) throws CoreException {
 		delete(force ? IResource.FORCE : IResource.NONE, monitor);
-
 	}
 
 	public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
@@ -89,12 +79,12 @@
 
 
 	public void delete(int updateFlags, IProgressMonitor monitor) throws CoreException {
-		doDeleteMetaModel(updateFlags, monitor);
 		
-		
-		if( (updateFlags & ModuleCore.DELETE_METAMODEL_ONLY) == 0) {
+		if( (updateFlags & IVirtualResource.DELETE_METAMODEL_ONLY) == 0) {
 			doDeleteRealResources(updateFlags, monitor);
 		} 
+
+		doDeleteMetaModel(updateFlags, monitor);		
 	}
 
 	protected void doDeleteMetaModel(int updateFlags,IProgressMonitor monitor) {
@@ -117,82 +107,27 @@
 
 	// TODO WTP:Implement this method 
 	public boolean exists() {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		//return false;
+		return true;
 	}
 
 	public String getFileExtension() {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		//return null;
+		String name = getName();
+		int dot = name.lastIndexOf('.');
+		if (dot == -1)
+			return null;
+		if(dot == name.length()-1)
+			return EMPTY_STRING;		
+		return name.substring(dot+1);
 	}
-	
-	// TODO WTP:Implement this method 
+	 
 	public IPath getWorkspaceRelativePath() {
-		ModuleCore moduleCore = null;
-		try {
-			moduleCore = ModuleCore.getModuleCoreForRead(getProject());
-			WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentHandle().getName());
-			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
-			
-			ComponentResource[] componentResources = new ComponentResource[0];
-			IPath currentPath = null;
-			IPath potentialMatchRuntimePath = null; 
-			
-			do { 
-				currentPath = (currentPath == null) ? getRuntimePath() : currentPath.removeLastSegments(1);
-				componentResources = root.findModuleResources(currentPath, false);
-				for (int i = 0; i < componentResources.length; i++) {
-					potentialMatchRuntimePath = new Path(componentResources[i].getRuntimePath().path());					
-					if(isPotentalMatch(potentialMatchRuntimePath)) {
-						IPath sourcePath = new Path(componentResources[i].getSourcePath().path());
-						IPath subpath = getRuntimePath().removeFirstSegments(potentialMatchRuntimePath.segmentCount());
-						IPath finalPath = sourcePath.append(subpath);
-						// already workspace relative
-						if(finalPath.segment(0).equals(getComponentHandle().getProject().getName())) {
-							return finalPath;
-						} 
-						// make workspace relative
-						return new Path(IPath.SEPARATOR+getProject().getName()).append(finalPath);
-					}
-				}   
-			} while(currentPath.segmentCount() > 0 && componentResources.length == 0);
-		} finally {
-			if(moduleCore != null) {
-				moduleCore.dispose();
-			}
-		}
-		return getRuntimePath();
-	}
-
-	private boolean isPotentalMatch(IPath aRuntimePath) {
-		return aRuntimePath.isPrefixOf(getRuntimePath());
-	}
-
-	// TODO WTP:Implement this method 
-	public IPath getLocation() {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		//return null;
-	} 
-	
-	// TODO WTP:Implement this method 
-	public String getName() {
-		return getRuntimePath().lastSegment();
+		return getProject().getFullPath().append(getProjectRelativePath());
 	}
 	
-	public String getComponentName() {
-		return getComponentHandle().getName();
-	}
-
-	// TODO WTP:Implement this method 
-	public IVirtualContainer getParent() {
-		return new VirtualFolder(getComponentHandle(), getRuntimePath().removeLastSegments(1));
-	} 
-
-	public IProject getProject() {
-		return getComponentHandle().getProject();
-	}
-
-	// TODO WTP:Implement this method 
+	public IPath getRuntimePath() {
+		return runtimePath;
+	}  
+	 
 	public IPath getProjectRelativePath() {
 
 		ModuleCore moduleCore = null;
@@ -229,43 +164,31 @@
 			}
 		}
 		return getRuntimePath();
-	} 
-
-	public int getType() {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		//return 0;
+	}  
+	 
+	public String getName() {
+		return getRuntimePath().lastSegment();
+	}
+	
+	public String getComponentName() {
+		return getComponentHandle().getName();
 	}
  
+	public IVirtualContainer getParent() {
+		if(getRuntimePath().segmentCount() > 0)
+			return new VirtualFolder(getComponentHandle(), getRuntimePath().removeLastSegments(1));
+		return ModuleCore.create(getProject(), getComponentName());
+	} 
+
+	public IProject getProject() {
+		return getComponentHandle().getProject();
+	}
 
 	public boolean isAccessible() {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		//return false;
 	} 
-	
-	public boolean isReadOnly() {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-		//return false;
-	} 
-
-	public void move(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	}
-
-	public void move(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	} 
-
-	public void refreshLocal(int depth, IProgressMonitor monitor) throws CoreException {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	} 
-
-	public void setReadOnly(boolean readOnly) {
-		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
-
-	} 
+	 
 	public Object getAdapter(Class adapter) {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		//return null;
@@ -280,11 +203,7 @@
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		//return false;
 	}
-
-	public IPath getRuntimePath() {
-		return runtimePath;
-	}  
-
+  
 	public String toString() {
 		if(toString == null)
 			toString = "["+getComponentHandle()+":"+getRuntimePath()+"]";  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -301,7 +220,12 @@
 		return hashCode() == ((anOther != null && anOther instanceof VirtualResource) ? anOther.hashCode() : 0 );
 	} 
 
-	public ComponentHandle getComponentHandle() {
+	protected ComponentHandle getComponentHandle() {
 		return componentHandle;
 	} 
+
+	private boolean isPotentalMatch(IPath aRuntimePath) {
+		return aRuntimePath.isPrefixOf(getRuntimePath());
+	}
+ 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualContainer.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualContainer.java
index 5353d31..24f3b4a 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualContainer.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualContainer.java
@@ -12,7 +12,6 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 public interface IVirtualContainer extends IVirtualResource {
 
@@ -234,35 +233,6 @@
 	 * Returns a list of all member resources (projects, folders and files)
 	 * in this resource, in no particular order.
 	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   members(includePhantoms ? INCLUDE_PHANTOMS : IVirtualResource.NONE);
-	 * </pre>
-	 * Team-private member resources are <b>not</b> included in the result.
-	 * </p>
-	 *
-	 * @param includePhantoms <code>true</code> if phantom resources are
-	 *   of interest; <code>false</code> if phantom resources are not of
-	 *   interest
-	 * @return an array of members of this resource
-	 * @exception CoreException if this request fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> <code>includePhantoms</code> is <code>false</code> and
-	 *     this resource does not exist.</li>
-	 * <li> <code>includePhantoms</code> is <code>false</code> and
-	 *     this resource is a project that is not open.</li>
-	 * </ul>
-	 * @see #members(int)
-	 * @see IVirtualResource#exists()
-	 * @see IVirtualResource#isPhantom()
-	 */
-	public IVirtualResource[] members(boolean includePhantoms) throws CoreException;
-
-	/**
-	 * Returns a list of all member resources (projects, folders and files)
-	 * in this resource, in no particular order.
-	 * <p>
 	 * If the <code>INCLUDE_PHANTOMS</code> flag is not specified in the member 
 	 * flags (recommended), only member resources that exist will be returned.
 	 * If the <code>INCLUDE_PHANTOMS</code> flag is specified,
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFile.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFile.java
index 8ed564c..b5971f4 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFile.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFile.java
@@ -10,302 +10,15 @@
  *******************************************************************************/ 
 package org.eclipse.wst.common.modulecore.resources;
 
-import java.io.InputStream;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IEncodedStorage;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFileState;
-import org.eclipse.core.resources.IStorage;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.QualifiedName;
-import org.eclipse.core.runtime.content.IContentDescription;
-import org.eclipse.core.runtime.content.IContentTypeManager;
 
 public interface IVirtualFile extends IVirtualResource {
 
 	/**
-	 * Character encoding constant (value 0) which identifies
-	 * files that have an unknown character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_UNKNOWN = 0;
-	/**
-	 * Character encoding constant (value 1) which identifies
-	 * files that are encoded with the US-ASCII character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details 
-	 */
-	public int ENCODING_US_ASCII = 1;
-	/**
-	 * Character encoding constant (value 2) which identifies
-	 * files that are encoded with the ISO-8859-1 character encoding scheme,
-	 * also known as ISO-LATIN-1.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_ISO_8859_1 = 2;
-	/**
-	 * Character encoding constant (value 3) which identifies
-	 * files that are encoded with the UTF-8 character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_UTF_8 = 3;
-	/**
-	 * Character encoding constant (value 4) which identifies
-	 * files that are encoded with the UTF-16BE character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_UTF_16BE = 4;
-	/**
-	 * Character encoding constant (value 5) which identifies
-	 * files that are encoded with the UTF-16LE character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_UTF_16LE = 5;
-	/**
-	 * Character encoding constant (value 6) which identifies
-	 * files that are encoded with the UTF-16 character encoding scheme.
-	 * 
-	 * @see IVirtualFile#getEncoding()
-	 * @deprecated see getEncoding for details
-	 */
-	public int ENCODING_UTF_16 = 6;
-
-	/**
-	 * Appends the entire contents of the given stream to this file.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   appendContents(source, (keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's content have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancelation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source an input stream containing the new contents of the file
-	 * @param force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @param keepHistory a flag indicating whether or not to store
-	 *    the current contents in the local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>force </code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see #appendContents(java.io.InputStream,int,IProgressMonitor)
-	 */
-	public void appendContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Appends the entire contents of the given stream to this file.
-	 * The stream, which must not be <code>null</code>, will get closed 
-	 * whether this method succeeds or fails.
-	 * <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 overwrite a corresponding file in the local file system provided
-	 * it is in sync with the workspace. This option ensures there is no 
-	 * unintended data loss; it is the recommended setting.
-	 * However, if <code>FORCE</code> is specified, an attempt will be made
-	 * to write a corresponding file in the local file system, overwriting any
-	 * existing one if need be. In either case, if this method succeeds, the 
-	 * resource will be marked as being local (even if it wasn't before).
-	 * </p>
-	 * <p>
-	 * If this file is non-local then this method will always fail. The only exception
-	 * is when <code>FORCE</code> is specified and the file exists in the local 
-	 * file system. In this case the file is made local and the given contents are appended.
-	 * </p>
-	 * <p>
-	 * The <code>KEEP_HISTORY</code> update flag controls whether or not a copy of
-	 * current contents of this file should be captured in the workspace's local
-	 * history (properties are not recorded in the 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 interest to the user. Note that local history is maintained
-	 * with each individual project, and gets discarded when a project is deleted
-	 * from the workspace. This flag is ignored if the file was not previously local.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code> and <code>KEEP_HISTORY</code> 
-	 * are ignored.
-	 * </p>
-	 * <p>
-	 * Prior to modifying the contents of this file, the file modification validator (if provided 
-	 * by the VCM plug-in), will be given a chance to perform any last minute preparations.  Validation
-	 * is performed by calling <code>IVirtualFileModificationValidator.validateSave</code> on this file.
-	 * If the validation fails, then this operation will fail.
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's content have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancelation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source an input stream containing the new contents of the file
-	 * @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 is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>FORCE</code> is not specified.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualResourceRuleFactory#modifyRule(IVirtualResource)
-	 * @since 2.0
-	 */
-	public void appendContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Creates a new file resource as a member of this handle's parent resource.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   create(source, (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that the file 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 source an input stream containing the initial contents of the file,
-	 *    or <code>null</code> if the file should be marked as not local
-	 * @param force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource already exists in the workspace.</li>
-	 * <li> The parent of this resource does not exist.</li>
-	 * <li> The project of this resource is not accessible.</li>
-	 * <li> The parent contains a resource of a different type 
-	 *      at the same path as this resource.</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.</li>
-	 * <li> The corresponding location in the local file system is occupied
-	 *    by a file and <code>force </code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 */
-	public void create(InputStream source, boolean force, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Creates a new file resource as a member of this handle's parent resource.
-	 * The resource's contents are supplied by the data in the given stream.
-	 * This method closes the stream whether it succeeds or fails.
-	 * If the stream is <code>null</code> then a file is not created in the local
-	 * file system and the created file is marked as being non-local.
-	 * <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 write a file in the local file system if it does not already exist. 
-	 * This option ensures there is no unintended data loss; it is the recommended
-	 * setting. However, if <code>FORCE</code> is specified, this method will 
-	 * attempt to write a corresponding file in the local file system, 
-	 * overwriting any existing one if need be.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code> are ignored.
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that the file 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 source an input stream containing the initial contents of the file,
-	 *    or <code>null</code> if the file should be marked as not local
-	 * @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 is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource already exists in the workspace.</li>
-	 * <li> The parent of this resource does not exist.</li>
-	 * <li> The project of this resource is not accessible.</li>
-	 * <li> The parent contains a resource of a different type 
-	 *      at the same path as this resource.</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.</li>
-	 * <li> The corresponding location in the local file system is occupied
-	 *    by a file and <code>FORCE</code> is not specified.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualResourceRuleFactory#createRule(IVirtualResource)
-	 * @since 2.0
-	 */
-	public void create(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
-	/**
 	 * 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.  The given path must be either an absolute file system
@@ -370,507 +83,7 @@
 	 * @since 2.1
 	 */
 	public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Deletes this file from the workspace.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   delete((keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this folder has been removed from its parent.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 * 
-	 * @param force a flag controlling whether resources that are not
-	 *    in sync with the local file system will be tolerated
-	 * @param keepHistory a flag controlling whether files under this folder
-	 *    should be stored in the workspace's local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource could not be deleted for some reason.</li>
-	 * <li> This resource is out of sync with the local file system
-	 *      and <code>force</code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualResource#delete(int,IProgressMonitor)
-	 * @see IVirtualResourceRuleFactory#deleteRule(IVirtualResource)
-	 */
-	public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Returns the name of a charset to be used when decoding the contents of this 
-	 * file into characters. 
-	 * <p>
-	 * If checkImplicit is <code>false</code>, this method will return the 
-	 * charset defined by calling <code>setCharset</code>, provided this file 
-	 * exists, or <code>null</code> otherwise.
-	 * </p><p>
-	 * If checkImplicit is <code>true</code>, this method uses the following 
-	 * algorithm to determine the charset to be returned:
-	 * <ol>
-	 * <li>the charset defined by calling #setCharset, if any, and this file 
-	 * exists, or</li>
-	 * <li>the charset automatically discovered based on this file's contents,
-	 * if one can be determined, or</li>
-	 * <li>the default encoding for this file's parent (as defined by 
-	 * <code>IContainer#getDefaultCharset</code>).</li>
-	 * </ol>
-	 * </p><p>
-	 * <b>Note</b>:  this method does not check whether the result is a supported
-	 * charset name. Callers should be prepared to handle 
-	 * <code>UnsupportedEncodingException</code> where this charset is used. 
-	 * </p>
-	 *  
-	 * @return the name of a charset, or <code>null</code>
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource could not be read.</li>
-	 * <li> This resource is not local.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * </ul>
-	 * @see IEncodedStorage#getCharset()
-	 * @see IContainer#getDefaultCharset()
-	 * @since 3.0
-	 */
-	public String getCharset(boolean checkImplicit) throws CoreException;
-
-	/**
-	 * Returns a description for this file's current contents. Returns 
-	 * <code>null</code> if a description cannot be obtained.
-	 * <p>
-	 * Calling this method produces a similar effect as calling
-	 * <code>getDescriptionFor(getContents(), getName(), IContentDescription.ALL)</code> 
-	 * on <code>IContentTypeManager</code>, but provides better 
-	 * opportunities for improved performance. Therefore, when manipulating 
-	 * <code>IVirtualFile</code>s, clients should call this method instead of 
-	 * <code>IContentTypeManager.getDescriptionFor</code>. 
-	 * </p>
-	 *  
-	 * @return a description for this file's current contents, or 
-	 * <code>null</code>
-	 * @throws CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> This resource could not be read.</li>
-	 * <li> This resource is not local.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * </ul> 
-	 * @see IContentDescription
-	 * @see IContentTypeManager#getDescriptionFor(InputStream, String, QualifiedName[])
-	 * @since 3.0
-	 */
-	public IContentDescription getContentDescription() throws CoreException;
-
-	/**
-	 * Returns an open input stream on the contents of this file.
-	 * This refinement of the corresponding <code>IStorage</code> method 
-	 * returns an open input stream on the contents of this file.
-	 * The client is responsible for closing the stream when finished.
-	 *
-	 * @return an input stream containing the contents of the file
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> This resource is not local.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system.</li>
-	 * </ul>
-	 */
-	public InputStream getContents() throws CoreException;
-
-	/**
-	 * This refinement of the corresponding <code>IStorage</code> method 
-	 * returns an open input stream on the contents of this file.
-	 * The client is responsible for closing the stream when finished.
-	 * If force is <code>true</code> the file is opened and an input
-	 * stream returned regardless of the sync state of the file. The file
-	 * is not synchronized with the workspace.
-	 * If force is <code>false</code> the method fails if not in sync.
-	 *
-	 * @param force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @return an input stream containing the contents of the file
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> This resource is not local.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and force is <code>false</code>.</li>
-	 * </ul>
-	 */
-	public InputStream getContents(boolean force) throws CoreException;
-
-	/**
-	 * Returns the full path of this file. 
-	 * This refinement of the corresponding <code>IStorage</code> and <code>IVirtualResource</code>
-	 * methods links the semantics of resource and storage object paths such that
-	 * <code>IVirtualFile</code>s always have a path and that path is relative to the
-	 * containing workspace.
-	 *
-	 * @see IVirtualResource#getWorkspaceRelativePath()
-	 * @see IStorage#getFullPath()
-	 */
-	public IPath getWorkspaceRelativePath();
-
-	/**
-	 * Returns a list of past states of this file known to this workspace.
-	 * Recently added states first.
-	 * <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 is not desired
-	 * @return an array of states of this file
-	 * @exception CoreException if this method fails.
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 */
-	public IFileState[] getHistory(IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Returns the name of this file. 
-	 * This refinement of the corresponding <code>IStorage</code> and <code>IVirtualResource</code>
-	 * methods links the semantics of resource and storage object names such that
-	 * <code>IVirtualFile</code>s always have a name and that name equivalent to the
-	 * last segment of its full path.
-	 *
-	 * @see IVirtualResource#getName()
-	 * @see IStorage#getName()
-	 */
-	public String getName();
-
-	/**
-	 * Returns whether this file is read-only.
-	 * This refinement of the corresponding <code>IStorage</code> and <code>IVirtualResource</code>
-	 * methods links the semantics of read-only resources and read-only storage objects.
-	 *
-	 * @see IVirtualResource#isReadOnly()
-	 * @see IStorage#isReadOnly()
-	 */
-	public boolean isReadOnly();
-
-	/**
-	 * Moves this resource to be at the given location.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   move(destination, (keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file has been removed from its parent and a new file
-	 * has been added to the parent of the destination.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 * 
-	 * @param destination the destination path 
-	 * @param force a flag controlling whether resources that are not
-	 *    in sync with the local file system will be tolerated
-	 * @param keepHistory a flag controlling whether files under this folder
-	 *    should be stored in the workspace's local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this resource could not be moved. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> This resource is not local.</li>
-	 * <li> The resource corresponding to the parent destination path does not exist.</li>
-	 * <li> The resource corresponding to the parent destination path is a closed 
-	 *      project.</li>
-	 * <li> A resource at destination path does exist.</li>
-	 * <li> A resource of a different type exists at the destination path.</li>
-	 * <li> This resource 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 <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 *
-	 * @see IVirtualResource#move(IPath,int,IProgressMonitor)
-	 * @see IVirtualResourceRuleFactory#moveRule(IVirtualResource, IVirtualResource)
-	 */
-	public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Sets the charset for this file. Passing a value of <code>null</code>
-	 * will remove the charset setting for this resource.
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's encoding has changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 * 
-	 * @param newCharset a charset name, or <code>null</code>
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> An error happened while persisting this setting.</li> 
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See {@link IVirtualResourceChangeEvent} for more details.</li>
-	 * </ul>
-	 * @see #getCharset()
-	 * @see IVirtualResourceRuleFactory#charsetRule(IVirtualResource)
-	 * @since 3.0
-	 */
-	public void setCharset(String newCharset, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Sets the contents of this file to the bytes in the given input stream.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   setContents(source, (keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's contents have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source an input stream containing the new contents of the file
-	 * @param force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @param keepHistory a flag indicating whether or not store
-	 *    the current contents in the local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>force </code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see #setContents(java.io.InputStream,int,IProgressMonitor)
-	 */
-	public void setContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Sets the contents of this file to the bytes in the given file state.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   setContents(source, (keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's content have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source a previous state of this resource
-	 * @param force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @param keepHistory a flag indicating whether or not store
-	 *    the current contents in the local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The state does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>force </code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see #setContents(IFileState,int,IProgressMonitor)
-	 */
-	public void setContents(IFileState source, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Sets the contents of this file to the bytes in the given input stream.
-	 * The stream will get closed whether this method succeeds or fails.
-	 * If the stream is <code>null</code> then the content is set to be the
-	 * empty sequence of bytes.
-	 * <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 overwrite a corresponding file in the local file system provided
-	 * it is in sync with the workspace. This option ensures there is no 
-	 * unintended data loss; it is the recommended setting.
-	 * However, if <code>FORCE</code> is specified, an attempt will be made
-	 * to write a corresponding file in the local file system, overwriting any
-	 * existing one if need be. In either case, if this method succeeds, the 
-	 * resource will be marked as being local (even if it wasn't before).
-	 * </p>
-	 * <p>
-	 * The <code>KEEP_HISTORY</code> update flag controls whether or not a copy of
-	 * current contents of this file should be captured in the workspace's local
-	 * history (properties are not recorded in the 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 interest to the user. Note that local history is maintained
-	 * with each individual project, and gets discarded when a project is deleted
-	 * from the workspace.  This flag is ignored if the file was not previously local.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code> and <code>KEEP_HISTORY</code> 
-	 * are ignored.
-	 * </p>
-	 * <p>
-	 * Prior to modifying the contents of this file, the file modification validator (if provided 
-	 * by the VCM plug-in), will be given a chance to perform any last minute preparations.  Validation
-	 * is performed by calling <code>IVirtualFileModificationValidator.validateSave</code> on this file.
-	 * If the validation fails, then this operation will fail.
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's content have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source an input stream containing the new contents of the file
-	 * @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 is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>FORCE</code> is not specified.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualResourceRuleFactory#modifyRule(IVirtualResource)
-	 * @since 2.0
-	 */
-	public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Sets the contents of this file to the bytes in the given file state.
-	 * <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 overwrite a corresponding file in the local file system provided
-	 * it is in sync with the workspace. This option ensures there is no 
-	 * unintended data loss; it is the recommended setting.
-	 * However, if <code>FORCE</code> is specified, an attempt will be made
-	 * to write a corresponding file in the local file system, overwriting any
-	 * existing one if need be. In either case, if this method succeeds, the 
-	 * resource will be marked as being local (even if it wasn't before).
-	 * </p>
-	 * <p>
-	 * The <code>KEEP_HISTORY</code> update flag controls whether or not a copy of
-	 * current contents of this file should be captured in the workspace's local
-	 * history (properties are not recorded in the 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 interest to the user. Note that local history is maintained
-	 * with each individual project, and gets discarded when a project is deleted
-	 * from the workspace.  This flag is ignored if the file was not previously local.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code> and <code>KEEP_HISTORY</code> 
-	 * are ignored.
-	 * </p>
-	 * <p>
-	 * Prior to modifying the contents of this file, the file modification validator (if provided 
-	 * by the VCM plug-in), will be given a chance to perform any last minute preparations.  Validation
-	 * is performed by calling <code>IVirtualFileModificationValidator.validateSave</code> on this file.
-	 * If the validation fails, then this operation will fail.
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this file's content have been changed.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 *
-	 * @param source a previous state of this resource
-	 * @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 is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource does not exist.</li>
-	 * <li> The state does not exist.</li>
-	 * <li> The corresponding location in the local file system
-	 *       is occupied by a directory.</li>
-	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system and <code>FORCE</code> is not specified.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * <li> The file modification validator disallowed the change.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualResourceRuleFactory#modifyRule(IVirtualResource)
-	 * @since 2.0
-	 */
-	public void setContents(IFileState source, int updateFlags, IProgressMonitor monitor) throws CoreException;
+ 
 	
 	public IFile getRealFile();
 	
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFolder.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFolder.java
index 55c6c55..3cee793 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFolder.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualFolder.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.wst.common.modulecore.resources;
 
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -17,55 +18,6 @@
 
 public interface IVirtualFolder extends IVirtualContainer {
 
-
-	/**
-	 * Creates a new folder resource as a member of this handle's parent resource.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   create((force ? FORCE : IVirtualResource.NONE), local, monitor);
-	 * </pre>
-	 * </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 force a flag controlling how to deal with resources that
-	 *    are not in sync with the local file system
-	 * @param local a flag controlling whether or not the folder will be local
-	 *    after the creation
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is 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 project that is not open.</li>
-	 * <li> The parent contains a resource of a different type 
-	 *      at the same path as this resource.</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 file (as opposed to a directory).</li>
-	 * <li> The corresponding location in the local file system is occupied
-	 *    by a folder and <code>force </code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification.  See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 * @see IVirtualFolder#create(int,boolean,IProgressMonitor)
-	 */
-	public void create(boolean force, boolean local, IProgressMonitor monitor) throws CoreException;
-
 	/**
 	 * Creates a new folder resource as a member of this handle's parent resource.
 	 * <p>
@@ -122,7 +74,7 @@
 	 * @see IVirtualResourceRuleFactory#createRule(IVirtualResource)
 	 * @since 2.0
 	 */
-	public void create(int updateFlags, boolean local, IProgressMonitor monitor) throws CoreException;
+	public void create(int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 	/**
 	 * Creates a new folder resource as a member of this handle's parent resource.
@@ -191,46 +143,6 @@
 	public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException; 
 
 	/**
-	 * Deletes this resource from the workspace.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   delete((keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this folder has been removed from its parent.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 * 
-	 * @param force a flag controlling whether resources that are not
-	 *    in sync with the local file system will be tolerated
-	 * @param keepHistory a flag controlling whether files under this folder
-	 *    should be stored in the workspace's local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is not desired
-	 * @exception CoreException if this method fails. Reasons include:
-	 * <ul>
-	 * <li> This resource could not be deleted for some reason.</li>
-	 * <li> This resource is out of sync with the local file system
-	 *      and <code>force</code> is <code>false</code>.</li>
-	 * <li> Resource changes are disallowed during certain types of resource change 
-	 *       event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 *
-	 * @see IVirtualResourceRuleFactory#deleteRule(IVirtualResource)
-	 * @see IVirtualResource#delete(int,IProgressMonitor)
-	 */
-	public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
-
-	/**
 	 * Returns a handle to the file with the given name in this folder.
 	 * <p> 
 	 * This is a resource handle operation; neither the resource nor
@@ -262,53 +174,7 @@
 	 */
 	public IVirtualFolder getFolder(String name);
 
-	/**
-	 * Moves this resource so that it is located at the given path.  
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * <pre>
-	 *   move(destination, (keepHistory ? KEEP_HISTORY : IVirtualResource.NONE) | (force ? FORCE : IVirtualResource.NONE), monitor);
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * This method changes resources; these changes will be reported
-	 * in a subsequent resource change event, including an indication 
-	 * that this folder has been removed from its parent and a new folder
-	 * has been added to the parent of the destination.
-	 * </p>
-	 * <p>
-	 * This method is long-running; progress and cancellation are provided
-	 * by the given progress monitor. 
-	 * </p>
-	 * 
-	 * @param destination the destination path 
-	 * @param force a flag controlling whether resources that are not
-	 *    in sync with the local file system will be tolerated
-	 * @param keepHistory a flag controlling whether files under this folder
-	 *    should be stored in the workspace's local history
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting is 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> The resource corresponding to the parent destination path does not exist.</li>
-	 * <li> The resource corresponding to the parent destination path is a closed 
-	 *      project.</li>
-	 * <li> A resource at destination path does exist.</li>
-	 * <li> A resource of a different type exists at the destination path.</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 <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 * </ul>
-	 * @exception OperationCanceledException if the operation is canceled. 
-	 * Cancelation can occur even if no progress monitor is provided.
-	 *
-	 * @see IVirtualResourceRuleFactory#moveRule(IVirtualResource, IVirtualResource)
-	 * @see IVirtualResource#move(IPath,int,IProgressMonitor)
-	 */
-	public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException;
+	public IFolder getRealFolder();
+	
+	public IFolder[] getRealFolders();
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualResource.java
index f0a98c8..ede7775 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualResource.java
@@ -43,15 +43,7 @@
 	 * @see IVirtualResource#getType()
 	 * @see IVirtualFolder
 	 */
-	public static final int FOLDER = 0x2;
-
-	/**
-	 * Type constant (bit mask value 4) which identifies project resources.
-	 * 
-	 * @see IVirtualResource#getType()
-	 * @see IProject
-	 */
-	public static final int PROJECT = 0x4;
+	public static final int FOLDER = 0x2; 
 
 	/**
 	 * Type constant (bit mask value 8) which identifies the root resource.
@@ -178,6 +170,8 @@
 	 * @since 3.1
 	 */
 	public static final int BACKGROUND_REFRESH = 0x80;
+	
+	public static final int DELETE_METAMODEL_ONLY = 0x10000;
 
 	/*
 	 * ==================================================================== Other constants:
@@ -386,214 +380,8 @@
 	 * @see IResourceVisitor#visit(IVirtualResource)
 	 * @since 2.0
 	 */
-	public void accept(IResourceVisitor visitor, int depth, int memberFlags) throws CoreException; 
-
-	/**
-	 * Makes a copy of this resource at the given path.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * 
-	 * <pre>
-	 * copy(destination, (force ? FORCE : IVirtualResource.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 destination
-	 *            the destination path
-	 * @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 is 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> The source or destination is the workspace root.</li>
-	 *                <li> The source is a project but the destination is not.</li>
-	 *                <li> The destination is a project but the source is not.</li>
-	 *                <li> The resource corresponding to the parent destination path does not exist.</li>
-	 *                <li> The resource corresponding to the parent destination path is a closed
-	 *                project.</li>
-	 *                <li> A resource at destination path does exist.</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> The source resource is a file and the destination path specifies a
-	 *                project.</li>
-	 *                <li> Resource changes are disallowed during certain types of resource change
-	 *                event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 *                </ul>
-	 * @exception OperationCanceledException
-	 *                if the operation is canceled. Cancelation can occur even if no progress
-	 *                monitor is provided.
-	 */
-	public void copy(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Makes a copy of this resource at the given path. The resource's descendents are copied as
-	 * well. The path of this resource must not be a prefix of the destination path. The workspace
-	 * root may not be the source or destination location of a copy operation, and a project can
-	 * only be copied to another 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>
-	 * The supplied path may be absolute or relative. Absolute paths fully specify the new location
-	 * for the resource, including its project. Relative paths are considered to be relative to the
-	 * container of the resource being copied. A trailing separator is ignored.
-	 * </p>
-	 * <p>
-	 * Calling this method with a one segment absolute destination path is equivalent to calling:
-	 * 
-	 * <pre>
-	 * copy(workspace.newProjectDescription(folder.getName()), updateFlags, monitor);
-	 * </pre>
-	 * 
-	 * </p>
-	 * <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>
-	 * The <code>SHALLOW</code> update flag controls how this method deals with linked resources.
-	 * If <code>SHALLOW</code> is not specified, then the underlying contents of the linked
-	 * resource will always be copied in the file system. In this case, the destination of the copy
-	 * will never be a linked resource or contain any linked resources. If <code>SHALLOW</code> is
-	 * specified when a linked resource is copied into another project, a new linked resource is
-	 * created in the destination project that points to the same file system location. When a
-	 * project containing linked resources is copied, the new project will contain the same linked
-	 * resources pointing to the same file system locations. For both of these shallow cases, no
-	 * files on disk under the linked resource are actually copied. With the <code>SHALLOW</code>
-	 * flag, copying of linked resources into anything other than a project is not permitted. The
-	 * <code>SHALLOW</code> update flag is ignored when copying non- linked resources.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code> and <code>SHALLOW</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>
-	 * An attempt will be made to copy the local history for this resource and its children, to the
-	 * destination. Since local history existence is a safety-net mechanism, failure of this action
-	 * will not result in automatic failure of the copy operation.
-	 * </p>
-	 * <p>
-	 * This operation is long-running; progress and cancellation are provided by the given progress
-	 * monitor.
-	 * </p>
-	 * 
-	 * @param destination
-	 *            the destination path
-	 * @param updateFlags
-	 *            bit-wise or of update flag constants (<code>FORCE</code> and
-	 *            <code>SHALLOW</code>)
-	 * @param monitor
-	 *            a progress monitor, or <code>null</code> if progress reporting is 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> The source or destination is the workspace root.</li>
-	 *                <li> The source is a project but the destination is not.</li>
-	 *                <li> The destination is a project but the source is not.</li>
-	 *                <li> The resource corresponding to the parent destination path does not exist.</li>
-	 *                <li> The resource corresponding to the parent destination path is a closed
-	 *                project.</li>
-	 *                <li> The source is a linked resource, but the destination is not a project,
-	 *                and <code>SHALLOW</code> is specified.</li>
-	 *                <li> A resource at destination path does exist.</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> The source resource is a file and the destination path specifies a
-	 *                project.</li>
-	 *                <li> The source is a linked resource, and the destination path does not
-	 *                specify a project.</li>
-	 *                <li> The location of the source resource on disk is the same or a prefix of
-	 *                the location of the destination resource on disk.</li>
-	 *                <li> Resource changes are disallowed during certain types of resource change
-	 *                event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 *                </ul>
-	 * @exception OperationCanceledException
-	 *                if the operation is canceled. Cancelation can occur even if no progress
-	 *                monitor is provided.
-	 * @see #FORCE
-	 * @see #SHALLOW
-	 * @see IVirtualResourceRuleFactory#copyRule(IVirtualResource, IVirtualResource)
-	 * @since 2.0
-	 */
-	public void copy(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Deletes this resource from the workspace.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * 
-	 * <pre>
-	 * delete(force ? FORCE : IVirtualResource.NONE, monitor);
-	 * </pre>
-	 * 
-	 * </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 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 is not desired
-	 * @exception CoreException
-	 *                if this method fails. Reasons include:
-	 *                <ul>
-	 *                <li> This resource could not be deleted for some reason.</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> Resource changes are disallowed during certain types of resource change
-	 *                event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 *                </ul>
-	 * @exception OperationCanceledException
-	 *                if the operation is canceled. Cancelation can occur even if no progress
-	 *                monitor is provided.
-	 * 
-	 * @see IVirtualResource#delete(int,IProgressMonitor)
-	 */
-	public void delete(boolean force, IProgressMonitor monitor) throws CoreException;
-
+	public void accept(IResourceVisitor visitor, int depth, int memberFlags) throws CoreException;  
+	
 	/**
 	 * Deletes this resource from the workspace. Deletion applies recursively to all members of this
 	 * resource in a "best- effort" fashion. That is, all resources which can be deleted are
@@ -848,9 +636,7 @@
 	 * 
 	 * @return the project handle
 	 */
-	public IProject getProject();
-
- 
+	public IProject getProject(); 
 
 	/**
 	 * Returns the type of this resource. The returned value will be one of <code>FILE</code>,
@@ -887,204 +673,5 @@
 	 * @see IProject#isOpen()
 	 */
 	public boolean isAccessible();  
-	
-	/**
-	 * Returns whether this resource is marked as read-only in the file system.
-	 * 
-	 * @return <code>true</code> if this resource is read-only, <code>false</code> otherwise
-	 * @deprecated use <tt>IVirtualResource#getResourceAttributes()</tt>
-	 */
-	public boolean isReadOnly();  
-
-	/**
-	 * Moves this resource so that it is located at the given path.
-	 * <p>
-	 * This is a convenience method, fully equivalent to:
-	 * 
-	 * <pre>
-	 * move(destination, force ? FORCE : IVirtualResource.NONE, monitor);
-	 * </pre>
-	 * 
-	 * </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 destination
-	 *            the destination path
-	 * @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 is 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> The source or destination is the workspace root.</li>
-	 *                <li> The source is a project but the destination is not.</li>
-	 *                <li> The destination is a project but the source is not.</li>
-	 *                <li> The resource corresponding to the parent destination path does not exist.</li>
-	 *                <li> The resource corresponding to the parent destination path is a closed
-	 *                project.</li>
-	 *                <li> A resource at destination path does exist.</li>
-	 *                <li> A resource of a different type exists at the destination path.</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 <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 *                <li> The source resource is a file and the destination path specifies a
-	 *                project.</li>
-	 *                </ul>
-	 * @exception OperationCanceledException
-	 *                if the operation is canceled. Cancelation can occur even if no progress
-	 *                monitor is provided.
-	 * @see IVirtualResourceDelta#getFlags()
-	 */
-	public void move(IPath destination, boolean force, 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. The workspace root may not be the source or
-	 * destination location of a move operation, and a project can only be moved to another project.
-	 * After successful completion, the resource and any direct or indirect members will no longer
-	 * exist; but corresponding new resources will now exist at the given path.
-	 * <p>
-	 * The supplied path may be absolute or relative. Absolute paths fully specify the new location
-	 * for the resource, including its project. Relative paths are considered to be relative to the
-	 * container of the resource being moved. A trailing slash is ignored.
-	 * </p>
-	 * <p>
-	 * Calling this method with a one segment absolute destination path is equivalent to calling:
-	 * 
-	 * <pre>
-	 * IProjectDescription description = getDescription();
-	 * description.setName(path.lastSegment());
-	 * move(description, updateFlags, monitor);
-	 * </pre>
-	 * 
-	 * </p>
-	 * <p>
-	 * When a resource moves, its session and persistent properties move with it. Likewise for all
-	 * other attributes of the resource including markers.
-	 * </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
-	 * interest 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>
-	 * If this resource is not a project, an attempt will be made to copy the local history for this
-	 * resource and its children, to the destination. Since local history existence is a safety-net
-	 * mechanism, failure of this action will not result in automatic failure of the move operation.
-	 * </p>
-	 * <p>
-	 * The <code>SHALLOW</code> update flag controls how this method deals with linked resources.
-	 * If <code>SHALLOW</code> is not specified, then the underlying contents of the linked
-	 * resource will always be moved in the file system. In this case, the destination of the move
-	 * will never be a linked resource or contain any linked resources. If <code>SHALLOW</code> is
-	 * specified when a linked resource is moved into another project, a new linked resource is
-	 * created in the destination project that points to the same file system location. When a
-	 * project containing linked resources is moved, the new project will contain the same linked
-	 * resources pointing to the same file system locations. For either of these cases, no files on
-	 * disk under the linked resource are actually moved. With the <code>SHALLOW</code> flag,
-	 * moving of linked resources into anything other than a project is not permitted. The
-	 * <code>SHALLOW</code> update flag is ignored when moving non- linked resources.
-	 * </p>
-	 * <p>
-	 * Update flags other than <code>FORCE</code>, <code>KEEP_HISTORY</code>and
-	 * <code>SHALLOW</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 destination
-	 *            the destination path
-	 * @param updateFlags
-	 *            bit-wise or of update flag constants (<code>FORCE</code>,
-	 *            <code>KEEP_HISTORY</code> and <code>SHALLOW</code>)
-	 * @param monitor
-	 *            a progress monitor, or <code>null</code> if progress reporting is 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> The source or destination is the workspace root.</li>
-	 *                <li> The source is a project but the destination is not.</li>
-	 *                <li> The destination is a project but the source is not.</li>
-	 *                <li> The resource corresponding to the parent destination path does not exist.</li>
-	 *                <li> The resource corresponding to the parent destination path is a closed
-	 *                project.</li>
-	 *                <li> The source is a linked resource, but the destination is not a project and
-	 *                <code>SHALLOW</code> is specified.</li>
-	 *                <li> A resource at destination path does exist.</li>
-	 *                <li> A resource of a different type exists at the destination path.</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> The source resource is a file and the destination path specifies a
-	 *                project.</li>
-	 *                <li> The location of the source resource on disk is the same or a prefix of
-	 *                the location of the destination resource on disk.</li>
-	 *                <li> Resource changes are disallowed during certain types of resource change
-	 *                event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li>
-	 *                </ul>
-	 * @exception OperationCanceledException
-	 *                if the operation is canceled. Cancelation can occur even if no progress
-	 *                monitor is provided.
-	 * @see IVirtualResourceDelta#getFlags()
-	 * @see #FORCE
-	 * @see #KEEP_HISTORY
-	 * @see #SHALLOW
-	 * @see IVirtualResourceRuleFactory#moveRule(IVirtualResource, IVirtualResource)
-	 * @since 2.0
-	 */
-	public void move(IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException; 
-
-	/**
-	 * Sets or unsets this resource as read-only in the file system.
-	 * 
-	 * @param readOnly
-	 *            <code>true</code> to set it to read-only, <code>false</code> to unset
-	 * @deprecated use <tt>IVirtualResource#setResourceAttributes(ResourceAttributes)</tt>
-	 */
-	public void setReadOnly(boolean readOnly);
  
 }