[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 941bd20..16bab1b 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
@@ -28,10 +28,13 @@ import org.eclipse.wst.common.modulecore.internal.impl.ModuleURIUtil; import org.eclipse.wst.common.modulecore.internal.impl.PlatformURLModuleConnection; import org.eclipse.wst.common.modulecore.internal.resources.VirtualContainer; +import org.eclipse.wst.common.modulecore.internal.resources.VirtualFile; import org.eclipse.wst.common.modulecore.internal.resources.VirtualFolder; import org.eclipse.wst.common.modulecore.internal.util.EclipseResourceAdapter; 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.IVirtualReference; /** * <p> @@ -273,14 +276,22 @@ return ModuleURIUtil.getDeployedName(aFullyQualifiedModuleURI); } - public static IVirtualContainer create(IProject aProject, String aName) { - return new VirtualContainer(aProject, aName, new Path("/")); //$NON-NLS-1$ + public static IVirtualContainer createContainer(IProject aProject, String aComponentName) { + return new VirtualContainer(aProject, aComponentName, new Path("/")); //$NON-NLS-1$ } - public static IVirtualFolder create(IFolder aFolder, String aComponentName, IPath aRuntimePath) { - return new VirtualFolder(aFolder, aComponentName, aRuntimePath); + public static IVirtualFolder createFolder(IProject aProject, String aComponentName, IPath aRuntimePath) { + return new VirtualFolder(aProject, aComponentName, aRuntimePath); } + public static IVirtualFile createFile(IProject aProject, String aComponentName, IPath aRuntimePath) { + return new VirtualFile(aProject, aComponentName, aRuntimePath); + } + + public static IVirtualReference createReference(IVirtualContainer aContainer, IVirtualContainer aReferencedContainer) { + return null; + } + public static ComponentType getComponentType(IVirtualContainer aComponent) { ModuleCore moduleCore = null; ComponentType componentType = null; @@ -295,7 +306,6 @@ return componentType; } - public static void setComponentType(IVirtualContainer component, ComponentType aComponentType) { ModuleCore moduleCore = null; try {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/impl/ModuleCoreURIConverter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/impl/ModuleCoreURIConverter.java index 51ce08b..29a9585 100644 --- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/impl/ModuleCoreURIConverter.java +++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/impl/ModuleCoreURIConverter.java
@@ -85,7 +85,7 @@ try { String componentName = ModuleCore.getDeployedName(aNewURI); - IVirtualContainer component = ModuleCore.create(containingProject, componentName); + IVirtualContainer component = ModuleCore.createContainer(containingProject, componentName); URI deployPathSegment = ModuleURIUtil.trimToDeployPathSegment(aNewURI); IVirtualFile newFile = component.getFile(new Path(deployPathSegment.path()));
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/operation/ComponentCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/operation/ComponentCreationOperation.java index b52b8ed..e5c7a3d 100644 --- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/operation/ComponentCreationOperation.java +++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/internal/operation/ComponentCreationOperation.java
@@ -45,7 +45,7 @@ protected void setupComponentType(String typeID) { ComponentCreationDataModel dataModel = (ComponentCreationDataModel)operationDataModel; - IVirtualContainer component = ModuleCore.create(dataModel.getProject(), dataModel.getComponentDeployName()); + IVirtualContainer component = ModuleCore.createContainer(dataModel.getProject(), dataModel.getComponentDeployName()); ComponentType componentType = ModuleCoreFactory.eINSTANCE.createComponentType(); componentType.setModuleTypeId(typeID); componentType.setVersion(dataModel.getVersion());
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 1d9778c..50f308b 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
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.emf.common.util.URI; import org.eclipse.wst.common.modulecore.ComponentResource; import org.eclipse.wst.common.modulecore.ModuleCore; import org.eclipse.wst.common.modulecore.WorkbenchComponent; @@ -30,6 +31,7 @@ public class VirtualContainer extends VirtualResource implements IVirtualContainer { + public VirtualContainer(IProject aProject, String aName, IPath aRuntimePath) { super(aProject, aName, aRuntimePath); } @@ -105,14 +107,14 @@ * @see IFolder#getFile(java.lang.String) */ public IVirtualFile getFile(String name) { - return getFile(new Path(name)); + return new VirtualFile(getComponentHandle(), getRuntimePath().append(name)); } /** * @see IFolder#getFolder(java.lang.String) */ public IVirtualFolder getFolder(String name) { - return getFolder(new Path(name)); + return new VirtualFolder(getComponentHandle(), getRuntimePath().append(name)); } /** @@ -191,7 +193,7 @@ // return null; } - public void commit() throws CoreException{ + public void create(int updateFlags, IProgressMonitor aMonitor) throws CoreException { ModuleCore moduleCore = null; try { @@ -205,10 +207,62 @@ moduleCore.dispose(); } } + } + + /** + * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int, + * org.eclipse.core.runtime.IProgressMonitor) + */ + public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException { + + ModuleCore moduleCore = null; + try { + IFolder resource = getProject().getFolder(aProjectRelativeLocation); + + moduleCore = ModuleCore.getModuleCoreForWrite(getProject()); + WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentName()); + + ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component); + ComponentResource[] resources = root.findModuleResources(getRuntimePath(), false); + + if(resources.length == 0) { + ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); + componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); + component.getResources().add(componentResource); + } else { + URI projectRelativeURI = URI.createURI(aProjectRelativeLocation.toString()); + boolean foundMapping = false; + for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) { + if(projectRelativeURI.equals(resources[resourceIndx].getSourcePath())) + foundMapping = true; + } + if(!foundMapping) { + ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); + componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); + component.getResources().add(componentResource); + } + } + + createResource(resource, updateFlags, monitor); + + } finally { + if (moduleCore != null) { + moduleCore.saveIfNecessary(monitor); + moduleCore.dispose(); + } + } } public int getType() { - return IResource.ROOT; + return IVirtualResource.COMPONENT; + } + + public IResource getUnderlyingResource() { + return null; + } + + public IResource[] getUnderlyingResources() { + return NO_RESOURCES; } protected void doDeleteMetaModel(int updateFlags, IProgressMonitor monitor) {
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 7c9f6bc..58ae4b3 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
@@ -9,11 +9,19 @@ package org.eclipse.wst.common.modulecore.internal.resources; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; 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.emf.common.util.URI; +import org.eclipse.wst.common.modulecore.ComponentResource; +import org.eclipse.wst.common.modulecore.ModuleCore; +import org.eclipse.wst.common.modulecore.WorkbenchComponent; +import org.eclipse.wst.common.modulecore.internal.impl.ResourceTreeRoot; import org.eclipse.wst.common.modulecore.resources.IVirtualFile; +import org.eclipse.wst.common.modulecore.resources.IVirtualResource; public class VirtualFile extends VirtualResource implements IVirtualFile { @@ -21,46 +29,70 @@ super(aComponentHandle, aRuntimePath); } - + public VirtualFile(IProject aProject, String aComponentName, IPath aRuntimePath) { + super(ComponentHandle.create(aProject, aComponentName), aRuntimePath); + } + + /** + * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int, + * org.eclipse.core.runtime.IProgressMonitor) + */ public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException { - throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$ -// -// ModuleCore moduleCore = null; -// try { -// IResource resource = (getType() == IResource.FOLDER) ? -// (IResource) getProject().getFolder(aProjectRelativeLocation) : -// (IResource) getProject().getFile(aProjectRelativeLocation); -// -// moduleCore = ModuleCore.getModuleCoreForWrite(getProject()); -// WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentHandle().getName()); -// -// ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); -// componentResource.setRuntimePath(URI.createURI(getRuntimePath().toOSString())); -// -// if(!resource.exists()) { -// resource. -// } -// -// } finally { -// if(moduleCore != null) { -// moduleCore.saveIfNecessary(monitor); -// moduleCore.dispose(); -// } -// } - - - } - + + ModuleCore moduleCore = null; + try { + IFile resource = getProject().getFile(aProjectRelativeLocation); + + moduleCore = ModuleCore.getModuleCoreForWrite(getProject()); + WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentName()); + + ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component); + ComponentResource[] resources = root.findModuleResources(getRuntimePath(), false); + + if(resources.length == 0) { + ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); + componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); + component.getResources().add(componentResource); + } else { + URI projectRelativeURI = URI.createURI(aProjectRelativeLocation.toString()); + boolean foundMapping = false; + for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) { + if(projectRelativeURI.equals(resources[resourceIndx].getSourcePath())) + foundMapping = true; + } + if(!foundMapping) { + ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); + componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); + component.getResources().add(componentResource); + } + } + + } finally { + if (moduleCore != null) { + moduleCore.saveIfNecessary(monitor); + moduleCore.dispose(); + } + } + } + public int getType() { - return IResource.FILE; + return IVirtualResource.FILE; } - public IFile getRealFile() { + public IResource getUnderlyingResource() { + return getUnderlyingFile(); + } + + public IResource[] getUnderlyingResources() { + return getUnderlyingFiles(); + } + + public IFile getUnderlyingFile() { return getProject().getFile(getProjectRelativePath()); } - public IFile[] getRealFiles() { - return new IFile[] {getRealFile()}; + public IFile[] getUnderlyingFiles() { + return new IFile[] {getUnderlyingFile()}; } protected void doDeleteMetaModel(int updateFlags,IProgressMonitor 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 6664947..fd6ba7c 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
@@ -8,35 +8,21 @@ **************************************************************************************************/ package org.eclipse.wst.common.modulecore.internal.resources; -import java.util.HashSet; -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.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; import org.eclipse.wst.common.modulecore.ComponentResource; import org.eclipse.wst.common.modulecore.ModuleCore; 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.IVirtualFolder; import org.eclipse.wst.common.modulecore.resources.IVirtualResource; -public class VirtualFolder extends VirtualContainer implements IVirtualFolder { - - private final Set realFolders = new HashSet(); - - public VirtualFolder(IFolder aRealFolder, String aComponentName, IPath aRuntimePath) { - - super(aRealFolder.getProject(), aComponentName, aRuntimePath); - realFolders.add(aRealFolder); - } +public class VirtualFolder extends VirtualContainer implements IVirtualFolder { /** * <p> @@ -67,66 +53,11 @@ // TODO WTP:Implement this method 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 = getProject().getFolder(root.getProjectRelativePath()); + IVirtualContainer container = ModuleCore.createContainer(getProject(), getComponentHandle().getName()); + IFolder realFolder = getProject().getFolder(container.getProjectRelativePath()); IFolder newFolder = realFolder.getFolder(getRuntimePath()); - createResource(newFolder, updateFlags, monitor); - - } - - /** - * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int, - * org.eclipse.core.runtime.IProgressMonitor) - */ - public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException { - - ModuleCore moduleCore = null; - try { - IFolder resource = getProject().getFolder(aProjectRelativeLocation); - - moduleCore = ModuleCore.getModuleCoreForWrite(getProject()); - WorkbenchComponent component = moduleCore.findWorkbenchModuleByDeployName(getComponentHandle().getName()); - - ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component); - ComponentResource[] resources = root.findModuleResources(getRuntimePath(), false); - - if(resources.length == 0) { - ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); - componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); - component.getResources().add(componentResource); - } else { - URI projectRelativeURI = URI.createURI(aProjectRelativeLocation.toString()); - boolean foundMapping = false; - for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) { - if(projectRelativeURI.equals(resources[resourceIndx].getSourcePath())) - foundMapping = true; - } - if(!foundMapping) { - ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource); - componentResource.setRuntimePath(URI.createURI(getRuntimePath().toString())); - component.getResources().add(componentResource); - } - } - - createResource(resource, updateFlags, monitor); - - } finally { - if (moduleCore != null) { - moduleCore.saveIfNecessary(monitor); - moduleCore.dispose(); - } - } - } - - private void createResource(IContainer resource, int updateFlags, IProgressMonitor monitor) throws CoreException { - - if (!resource.getParent().exists()) - createResource(resource.getParent(), updateFlags, monitor); - if (!resource.exists()) - ((IFolder) resource).create(updateFlags, true, monitor); - - } + createResource(newFolder, updateFlags, monitor); + } // TODO WTP:Implement this method public boolean exists(IPath path) { @@ -159,19 +90,23 @@ } public int getType() { - return IResource.FOLDER; + return IVirtualResource.FOLDER; + } + + public IResource getUnderlyingResource() { + return getUnderlyingFolder(); + } + + public IResource[] getUnderlyingResources() { + return getUnderlyingFolders(); } - public void commit() throws CoreException { - - } - - public IFolder getRealFolder() { + public IFolder getUnderlyingFolder() { return getProject().getFolder(getProjectRelativePath()); } - public IFolder[] getRealFolders() { - return new IFolder[] {getRealFolder()}; + public IFolder[] getUnderlyingFolders() { + return new IFolder[] {getUnderlyingFolder()}; } protected void doDeleteMetaModel(int updateFlags, IProgressMonitor monitor) {
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 c9418ed..9d1e9a9 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
@@ -12,6 +12,8 @@ import java.util.Arrays; +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.IResourceProxyVisitor; @@ -31,12 +33,14 @@ public abstract class VirtualResource implements IVirtualResource { + protected static final IResource[] NO_RESOURCES = null; private ComponentHandle componentHandle; 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; runtimePath = aRuntimePath; @@ -177,7 +181,7 @@ public IVirtualContainer getParent() { if(getRuntimePath().segmentCount() > 0) return new VirtualFolder(getComponentHandle(), getRuntimePath().removeLastSegments(1)); - return ModuleCore.create(getProject(), getComponentName()); + return ModuleCore.createContainer(getProject(), getComponentName()); } public IProject getProject() { @@ -227,8 +231,17 @@ protected ComponentHandle getComponentHandle() { return componentHandle; } + + protected void createResource(IContainer resource, int updateFlags, IProgressMonitor monitor) throws CoreException { - private boolean isPotentalMatch(IPath aRuntimePath) { + if (!resource.getParent().exists()) + createResource(resource.getParent(), updateFlags, monitor); + if (!resource.exists() && resource.getType() == IResource.FOLDER) { + ((IFolder) resource).create(updateFlags, true, monitor); + } + } + + protected 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 1d9abf5..da10271 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,12 +12,15 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; - -public interface IVirtualContainer extends IVirtualResource { - - /*==================================================================== - * Constants defining which members are wanted: - *====================================================================*/ +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +/** + * + * <p> + * This interface is not intended to be implemented by clients. + * </p> + */ +public interface IVirtualContainer extends IVirtualResource { /** * Returns whether a resource of some type with the given path @@ -177,8 +180,7 @@ * @return the (handle of the) member folder * @see #getFile(IPath) */ - public IVirtualFolder getFolder(IPath path); - + public IVirtualFolder getFolder(IPath path); /** * Returns a handle to the file with the given name in this folder. @@ -274,6 +276,83 @@ */ public IVirtualResource[] members(int memberFlags) throws CoreException; - public void commit() throws CoreException; + /** + * Create the underlying model elements if they do not already exist. Resources + * may be created as a result of this method if the mapped path does not exist. + * + * @param updateFlags Any of IVirtualResource or IResource update flags. If a + * resource must be created, the updateFlags will be supplied to the + * resource creation operation. + * @param aMonitor + * @throws CoreException + */ + public void create(int updateFlags, IProgressMonitor aMonitor) 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 + * path, or a relative path whose first segment is the name of a workspace path + * variable. + * <p> + * The <code>ALLOW_MISSING_LOCAL</code> update flag controls how this + * method deals with cases where the local file system file to be linked does + * not exist, or is relative to a workspace path variable that is not defined. + * If <code>ALLOW_MISSING_LOCAL</code> is specified, the operation will suceed + * even if the local file is missing, or the path is relative to an undefined + * variable. If <code>ALLOW_MISSING_LOCAL</code> is not specified, the operation + * will fail in the case where the local file system file does not exist or the + * path is relative to an undefined variable. + * </p> + * <p> + * Update flags other than <code>ALLOW_MISSING_LOCAL</code> are ignored. + * </p> + * <p> + * This method synchronizes this resource with the local file system at the given + * location. + * </p> + * <p> + * This method changes resources; these changes will be reported + * in a subsequent resource change event, including an indication + * that the 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 localLocation a file system path where the file should be linked + * @param updateFlags bit-wise or of update flag constants + * (only ALLOW_MISSING_LOCAL 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 workspace contains a resource of a different type + * at the same path as this resource.</li> + * <li> The parent of this resource does not exist.</li> + * <li> The parent of this resource is not an open project</li> + * <li> The name of this resource is not valid (according to + * <code>IWorkspace.validateName</code>).</li> + * <li> The corresponding location in the local file system does not exist, or + * is relative to an undefined variable, and <code>ALLOW_MISSING_LOCAL</code> is + * not specified.</li> + * <li> The corresponding location in the local file system is occupied + * by a directory (as opposed to a file).</li> + * <li> Resource changes are disallowed during certain types of resource change + * event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li> + * <li>The team provider for the project which contains this folder does not permit + * linked resources.</li> + * <li>This folder's project contains a nature which does not permit linked resources.</li> + * </ul> + * @exception OperationCanceledException if the operation is canceled. + * Cancelation can occur even if no progress monitor is provided. + * @see IVirtualResource#isLinked() + * @see IVirtualResource#ALLOW_MISSING_LOCAL + * @since 2.1 + */ + public void createLink(IPath aProjectRelativePath, int updateFlags, IProgressMonitor monitor) throws CoreException; + }
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 b5971f4..25682ed 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
@@ -11,81 +11,16 @@ package org.eclipse.wst.common.modulecore.resources; import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -public interface IVirtualFile extends IVirtualResource { - - /** - * 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 - * path, or a relative path whose first segment is the name of a workspace path - * variable. - * <p> - * The <code>ALLOW_MISSING_LOCAL</code> update flag controls how this - * method deals with cases where the local file system file to be linked does - * not exist, or is relative to a workspace path variable that is not defined. - * If <code>ALLOW_MISSING_LOCAL</code> is specified, the operation will suceed - * even if the local file is missing, or the path is relative to an undefined - * variable. If <code>ALLOW_MISSING_LOCAL</code> is not specified, the operation - * will fail in the case where the local file system file does not exist or the - * path is relative to an undefined variable. - * </p> - * <p> - * Update flags other than <code>ALLOW_MISSING_LOCAL</code> are ignored. - * </p> - * <p> - * This method synchronizes this resource with the local file system at the given - * location. - * </p> - * <p> - * This method changes resources; these changes will be reported - * in a subsequent resource change event, including an indication - * that the 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 localLocation a file system path where the file should be linked - * @param updateFlags bit-wise or of update flag constants - * (only ALLOW_MISSING_LOCAL 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 workspace contains a resource of a different type - * at the same path as this resource.</li> - * <li> The parent of this resource does not exist.</li> - * <li> The parent of this resource is not an open project</li> - * <li> The name of this resource is not valid (according to - * <code>IWorkspace.validateName</code>).</li> - * <li> The corresponding location in the local file system does not exist, or - * is relative to an undefined variable, and <code>ALLOW_MISSING_LOCAL</code> is - * not specified.</li> - * <li> The corresponding location in the local file system is occupied - * by a directory (as opposed to a file).</li> - * <li> Resource changes are disallowed during certain types of resource change - * event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li> - * <li>The team provider for the project which contains this folder does not permit - * linked resources.</li> - * <li>This folder's project contains a nature which does not permit linked resources.</li> - * </ul> - * @exception OperationCanceledException if the operation is canceled. - * Cancelation can occur even if no progress monitor is provided. - * @see IVirtualResource#isLinked() - * @see IVirtualResource#ALLOW_MISSING_LOCAL - * @since 2.1 - */ - public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException; - +/** + * Represents a file that can be navigated through + * an abstract ("virtual") path. + * <p> + * This interface is not intended to be implemented by clients. + * </p> + */ +public interface IVirtualFile extends IVirtualResource { - public IFile getRealFile(); + public IFile getUnderlyingFile(); - public IFile[] getRealFiles(); + public IFile[] getUnderlyingFiles(); }
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 495545a..a03224a 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
@@ -11,138 +11,16 @@ 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; -import org.eclipse.core.runtime.OperationCanceledException; +/** + * Represents a folder that can be navigated through + * an abstract ("virtual") path. + * <p> + * This interface is not intended to be implemented by clients. + * </p> + */ +public interface IVirtualFolder extends IVirtualContainer { -public interface IVirtualFolder extends IVirtualContainer { - - /** - * Creates a new folder resource as a member of this handle's parent resource. - * <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 create a directory in the local file system if there isn't one already. - * This option ensures there is no unintended data loss; it is the recommended - * setting. However, if <code>FORCE</code> is specified, this method will - * be deemed a success even if there already is a corresponding directory. - * </p> - * <p> - * Update flags other than <code>FORCE</code> are ignored. - * </p> - * <p> - * This method synchronizes this resource with the local file system. - * </p> - * <p> - * This method changes resources; these changes will be reported - * in a subsequent resource change event, including an indication - * that the folder has been added to its parent. - * </p> - * <p> - * This method is long-running; progress and cancellation are provided - * by the given progress monitor. - * </p> - * - * @param updateFlags bit-wise or of update flag constants - * (only <code>FORCE</code> is relevant here) - * @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 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(int updateFlags, IProgressMonitor monitor) throws CoreException; - - /** - * Creates a new folder resource as a member of this handle's parent resource. - * The folder's contents will be located in the directory specified by the given - * file system path. The given path must be either an absolute file system - * path, or a relative path whose first segment is the name of a workspace path - * variable. - * <p> - * The <code>ALLOW_MISSING_LOCAL</code> update flag controls how this - * method deals with cases where the local file system directory to be linked does - * not exist, or is relative to a workspace path variable that is not defined. - * If <code>ALLOW_MISSING_LOCAL</code> is specified, the operation will suceed - * even if the local directory is missing, or the path is relative to an - * undefined variable. If <code>ALLOW_MISSING_LOCAL</code> is not specified, the - * operation will fail in the case where the local file system directory does - * not exist or the path is relative to an undefined variable. - * </p> - * <p> - * Update flags other than <code>ALLOW_MISSING_LOCAL</code> are ignored. - * </p> - * <p> - * This method synchronizes this resource with the local file system at the given - * location. - * </p> - * <p> - * This method changes resources; these changes will be reported - * in a subsequent resource change event, including an indication - * that the folder has been added to its parent. - * </p> - * <p> - * This method is long-running; progress and cancellation are provided - * by the given progress monitor. - * </p> - * - * @param localLocation a file system path where the folder should be linked - * @param updateFlags bit-wise or of update flag constants - * (only ALLOW_MISSING_LOCAL 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 workspace contains a resource of a different type - * at the same path as this resource.</li> - * <li> The parent of this resource does not exist.</li> - * <li> The parent of this resource is not an open project</li> - * <li> The name of this resource is not valid (according to - * <code>IWorkspace.validateName</code>).</li> - * <li> The corresponding location in the local file system does not exist, or - * is relative to an undefined variable, and <code>ALLOW_MISSING_LOCAL</code> is - * not specified.</li> - * <li> The corresponding location in the local file system is occupied - * by a file (as opposed to a directory).</li> - * <li> Resource changes are disallowed during certain types of resource change - * event notification. See <code>IVirtualResourceChangeEvent</code> for more details.</li> - * <li>The team provider for the project which contains this folder does not permit - * linked resources.</li> - * <li>This folder's project contains a nature which does not permit linked resources.</li> - * </ul> - * @exception OperationCanceledException if the operation is canceled. - * Cancelation can occur even if no progress monitor is provided. - * @see IVirtualResource#isLinked() - * @see IVirtualResource#ALLOW_MISSING_LOCAL - * @since 2.1 - */ - public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException; - - public IFolder getRealFolder(); + public IFolder getUnderlyingFolder(); - public IFolder[] getRealFolders(); + public IFolder[] getUnderlyingFolders(); }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualReference.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualReference.java new file mode 100644 index 0000000..fe70f4d --- /dev/null +++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/modulecore/resources/IVirtualReference.java
@@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2003, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.common.modulecore.resources; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; + +public interface IVirtualReference { + + public void create(int updateFlags, IProgressMonitor aMonitor); + + public void setRuntimePath(IPath aRuntimePath); + + public IPath getRuntimePath(); + + public void setDependencyType(int aDependencyType); + + public int getDependencyType(); + + + +}
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 0dcc87b..fba2463 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
@@ -14,7 +14,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.jobs.ISchedulingRule; @@ -45,7 +44,7 @@ * structures on disk, use {@link #IGNORE_UNDERLYING_RESOURCE}. * </p> * <p> - * The following class is experimental until fully documented. + * This interface is not intended to be implemented by clients. * </p> */ public interface IVirtualResource extends ISchedulingRule { @@ -122,7 +121,19 @@ * <a href="IVirtualResource.html#references">documentation on references</a> * for more information on why this flag is relevant. */ - public static final int IGNORE_UNDERLYING_RESOURCE = 0x400; + public static final int IGNORE_UNDERLYING_RESOURCE = 0x400; + + /** + * Create a mapping from the supplied location to the runtime path of this + * virtual resource. Model changes will occur as a result of this method, + * and potentially resource-level creations as well. + * + * @param aProjectRelativeLocation + * @param updateFlags + * @param monitor + * @throws CoreException + */ + public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException; /** * Remove the resource from the flexible structure. Removing the resource could require @@ -199,18 +210,12 @@ /** - * Returns a relative path of the underlying resource with respect to its project. Returns the empty path - * for projects and the workspace root. + * Returns a relative path of the underlying resource with respect to its project. * <p> * This is a resource handle operation; the resource need not exist. If this resource does * exist, its path can be safely assumed to be valid. * </p> * <p> - * A resource's project-relative path indicates the route from the project to the resource. - * Within a workspace, there is exactly one such path for any given resource. The returned path - * never has a trailing slash. - * </p> - * <p> * Project-relative paths are recommended over absolute paths, since the former are not affected * if the project is renamed. * </p> @@ -218,16 +223,22 @@ * @return the relative path of this resource with respect to its project * @see #getWorkspaceRelativePath() * @see #getProject() - * @see Path#EMPTY + * @see IResource#getProjectRelativePath() */ public IPath getProjectRelativePath(); + /** + * Returns the runtime path of this virtual resource. The runtime path + * is determined through the metamodel and represents the path that the + * underlying resource will be accessed at runtime. + * + * @return the runtime path of this virtual resource + */ public IPath getRuntimePath(); /** - * Returns the name of this resource. The name of a resource is synonymous with the last segment - * of its full (or project-relative) path for all resources other than the workspace root. The - * workspace root's name is the empty string. + * Returns the name of this virtual resource. The name of a virtual resource + * is synonymous with the last segment of its runtime path. * <p> * This is a resource handle operation; the resource need not exist. * </p> @@ -235,17 +246,28 @@ * If this resource exists, its name can be safely assumed to be valid. * </p> * - * @return the name of the resource - * @see #getWorkspaceRelativePath() - * @see #getProjectRelativePath() + * @return the name of the virtual resource + * @see #getRuntimePath() */ public String getName(); + /** + * Returns the name of the component that contains this virtual resource. + * <p> + * Each virtual resource is contained by at least one component. A component + * represents a logical collection of files. If the underlying resource is + * contained by multiple components, then the component name returned by + * this method will be determined by how the virtual resource was created. + * For each virtual resource, the component name will be the same as the + * component name of the parent. + * + * @return the name of the component that contains the virtual resource + */ public String getComponentName(); /** - * Returns the resource which is the parent of this resource, or <code>null</code> if it has - * no parent (that is, this resource is the workspace root). + * Returns the virtual resource which contains this virtual resource, or <code>null</code> if it has + * no parent (that is, the virtual resource represents the root of the component). * <p> * The full path of the parent resource is the same as this resource's full path with the last * segment removed. @@ -255,15 +277,15 @@ * exist. * </p> * - * @return the parent resource of this resource, or <code>null</code> if it has no parent + * @return the container of the virtual resource, or <code>null</code> if this virtual resource represents the root of the component */ public IVirtualContainer getParent(); /** - * Returns the project which contains this resource. Returns itself for projects and - * <code>null</code> for the workspace root. + * Returns the project which contains the component which contains this virtual resource. * <p> - * A resource's project is the one named by the first segment of its full path. + * The name of the project may not (and most likely will not) be referenced in the + * runtime path of this virtual path, but will be referenced by the workspace-relative path. * </p> * <p> * This is a resource handle operation; neither the resource nor the resulting project need @@ -276,13 +298,12 @@ /** * Returns the type of this resource. The returned value will be one of <code>FILE</code>, - * <code>FOLDER</code>, <code>PROJECT</code>, <code>ROOT</code>. + * <code>FOLDER</code>, <code>COMPONENT</code> * <p> * <ul> * <li> All resources of type <code>FILE</code> implement <code>IVirtualFile</code>.</li> * <li> All resources of type <code>FOLDER</code> implement <code>IVirtualFolder</code>.</li> - * <li> All resources of type <code>PROJECT</code> implement <code>IProject</code>.</li> - * <li> All resources of type <code>ROOT</code> implement <code>IWorkspaceRoot</code>.</li> + * <li> All resources of type <code>COMPONENT</code> implement <code>IVirtualContainer</code>.</li> * </ul> * </p> * <p> @@ -292,13 +313,37 @@ * @return the type of this resource * @see #FILE * @see #FOLDER - * @see #PROJECT - * @see #ROOT + * @see #COMPONENT */ public int getType(); + /** + * A virtual resource is a representation of one or more Eclipse Platform resources. + * <p> + * Returns the "primary" underlying resource. The resource may or may not exist. The resource + * will be contained by the project returned by {@link #getProject()}. + * </p> + * <p> + * Since a virtual resource could represent multiple resources, this method will return + * the "primary" resource. For clients that wish to take advantage of the multiple resources + * at a single path, use {@link #getUnderlyingResources()}. + * @return The primary resource that backs this virtual resource. + */ public IResource getUnderlyingResource(); - + + /** + * A virtual resource is a representation of one or more Eclipse Platform resources. + * <p> + * Returns all underlying resources. The resources may or may not exist. The resources + * will be contained by the project returned by {@link #getProject()}. + * </p> + * <p> + * Since a virtual resource could represent multiple resources, this method will return + * all underlying resources. For clients that prefer to acknowledge only one resource, + * at a single path, use {@link #getUnderlyingResource()}. + * @return All resources that back this virtual resource. + */ + public IResource[] getUnderlyingResources(); /** * Returns whether this resource is accessible. For files and folders, this is equivalent to