blob: 57480a2c9ea9fb7fea76693446a0dbd2981f2244 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 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.componentcore.internal.resources;
import java.util.ArrayList;
import java.util.List;
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.wst.common.componentcore.internal.ComponentResource;
import org.eclipse.wst.common.componentcore.internal.StructureEdit;
import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRoot;
import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
public class VirtualFile extends VirtualResource implements IVirtualFile {
private IFile underlyingFile;
public VirtualFile(IProject aComponentProject, IPath aRuntimePath) {
super(aComponentProject, aRuntimePath);
}
public VirtualFile(IProject aComponentProject, IPath aRuntimePath, IFile underlyingFile) {
super(aComponentProject, aRuntimePath);
this.underlyingFile = underlyingFile;
}
/**
* @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 {
StructureEdit moduleCore = null;
try {
IFile resource = getProject().getFile(aProjectRelativeLocation);
moduleCore = StructureEdit.getStructureEditForWrite(getProject());
WorkbenchComponent component = moduleCore.getComponent();
ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
if(resources.length == 0) {
ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource);
componentResource.setRuntimePath(getRuntimePath());
component.getResources().add(componentResource);
} else {
boolean foundMapping = false;
for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) {
if(aProjectRelativeLocation.equals(resources[resourceIndx].getSourcePath()))
foundMapping = true;
}
if(!foundMapping) {
ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource);
componentResource.setRuntimePath(getRuntimePath());
component.getResources().add(componentResource);
}
}
} finally {
if (moduleCore != null) {
moduleCore.saveIfNecessary(monitor);
moduleCore.dispose();
}
}
}
public int getType() {
return IVirtualResource.FILE;
}
public IResource getUnderlyingResource() {
return getUnderlyingFile();
}
public IResource[] getUnderlyingResources() {
return getUnderlyingFiles();
}
public IFile getUnderlyingFile() {
if (underlyingFile == null) {
underlyingFile = getProject().getFile(getProjectRelativePath());
}
return underlyingFile;
}
public IFile[] getUnderlyingFiles() {
IPath[] paths = getProjectRelativePaths();
List result = new ArrayList();
for (int i=0; i<paths.length; i++) {
IFile file = getProject().getFile(paths[i]);
if (file!=null && file.exists() && !result.contains(file))
result.add(file);
}
return (IFile[]) result.toArray(new IFile[result.size()]);
}
protected void doDeleteMetaModel(int updateFlags,IProgressMonitor monitor) {
//Default
}
protected void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException {
//Default
}
}