/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.shared_core.resource_stubs; import java.io.File; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.python.pydev.shared_core.io.FileUtils; public class FolderStub extends AbstractIFolderStub implements IFolder { private File folder; private ProjectStub project; private IContainer parent; public FolderStub(ProjectStub stub, File parentFile) { this(stub, null, parentFile); } public FolderStub(ProjectStub stub, IContainer parent, File parentFile) { this(stub, parent, parentFile, true); } public FolderStub(ProjectStub stub, IContainer parent, File parentFile, boolean mustExist) { if (mustExist) { Assert.isTrue(parentFile.exists() && parentFile.isDirectory()); } this.project = stub; this.folder = parentFile; this.parent = parent; } @Override public IContainer getParent() { if (parent != null) { return parent; } return project.getFolder(this.folder.getParentFile()); } @Override public IFile getFile(IPath path) { if (path.segmentCount() != 1) { throw new RuntimeException("finish implementing"); } return new FileStub(project, new File(folder, path.segment(0))); } @Override public IFile getFile(String name) { return getFile(new Path(name)); } @Override public IFolder getFolder(IPath path) { String[] segments = path.segments(); IFolder f = null; File curr = this.folder; for (String string : segments) { File parentFile = new File(curr, string); f = (IFolder) project.getFolder(parentFile); curr = parentFile; } return f; } @Override public String getName() { return this.folder.getName(); } @Override public String toString() { return "FolderStub:" + this.folder; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((folder == null) ? 0 : folder.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final FolderStub other = (FolderStub) obj; if (folder == null) { if (other.folder != null) { return false; } } else if (!folder.equals(other.folder)) { return false; } return true; } @Override public IPath getFullPath() { // return Path.fromOSString(FileUtils.getFileAbsolutePath(this.folder)); String fileAbsolutePath = FileUtils.getFileAbsolutePath(this.folder); String workspaceAbsolutePath = FileUtils.getFileAbsolutePath(this.project.projectRoot.getParentFile()); IPath fromOSString = Path.fromOSString(fileAbsolutePath); IPath workspace = Path.fromOSString(workspaceAbsolutePath); return fromOSString.makeRelativeTo(workspace); } @Override public IPath getLocation() { return Path.fromOSString(FileUtils.getFileAbsolutePath(this.folder)); } @Override public IProject getProject() { return this.project; } }