/******************************************************************************* * Copyright (c) 2005, 2008 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.core.filesystem; import java.net.URI; import org.eclipse.core.filesystem.provider.FileSystem; import org.eclipse.core.runtime.*; /** * This is the main interface to a single file system. Each file system instance * manages interaction with all files in the backing store represented by a * particular URI scheme. * <p> * File systems are registered using the "filesystems" extension point. * </p> * * @see EFS#getFileSystem(String) * @since org.eclipse.core.filesystem 1.0 * @noimplement This interface is not intended to be implemented by clients. File system * implementations must subclass {@link FileSystem} rather than implementing * this interface directly. */ public interface IFileSystem extends IAdaptable { /** * Returns the file attributes supported by this file system. This value * is a bit mask of the <code>EFS.ATTRIBUTE_*</code> constants. * * @return the file attributes supported by this file system. */ public int attributes(); /** * Returns whether this file system supports deletion * * @return <code>true</code> if this file system allows deletion * of files and directories, and <code>false</code> otherwise */ public boolean canDelete(); /** * Returns whether this file system supports modification. * * @return <code>true</code> if this file system allows modification * of files and directories, and <code>false</code> otherwise */ public boolean canWrite(); /** * Returns a file tree containing information about the complete sub-tree * rooted at the given store. Returns <code>null</code> if this file * system does not support the creation of such file trees. * <p> * A file tree accurately represents the state of a portion of a file system * at the time it is created, but it is never updated. Clients using a file * tree must tolerate the fact that the actual file system contents may * change after the tree is generated. * </p> * * @param root The store to use as the root of the file tree * @param monitor a progress monitor, or <code>null</code> if progress * reporting and cancellation are not desired * @return an {@link IFileTree} containing the sub-tree of the given store, * or <code>null</code> * @exception CoreException if this method fails. Reasons include: * <ul> * <li>Problems occurred while contacting the file system.</li> * </ul> * @see IFileTree */ public IFileTree fetchFileTree(IFileStore root, IProgressMonitor monitor) throws CoreException; /** * Returns the file store in this file system corresponding to the * given local file. Returns <code>null</code> if this file system * cannot provide an {@link IFileStore} corresponding to a local file. * * @param file The file to be converted * @return The {@link IFileStore} corresponding to the given file, or <code>null</code> * @see IFileStore#toLocalFile(int, IProgressMonitor) */ public IFileStore fromLocalFile(java.io.File file); /** * Returns the URI scheme of this file system. * * @return the URI scheme of this file system. */ public String getScheme(); /** * Returns a handle to a file store in this file system. This is a handle-only * method; this method succeeds regardless of whether a file exists at that * path in this file system. * <p> * This is a convenience method for file systems that do not make use * of the authority {@link java.net.URI} component, such as a host or user * information. The provided path argument is interpreted as the path component * of the file system's {@link java.net.URI}. For example, this method can * be used to safely navigate within the local file system. * </p> * * @param path A path to a file store within the scheme of this file system. * @return A handle to a file store in this file system * @see EFS#getLocalFileSystem() */ public IFileStore getStore(IPath path); /** * Returns a handle to a file store in this file system. This is a handle-only * method; this method succeeds regardless of whether a file exists at that * path in this file system. The provided URI must have the appropriate scheme * and component parts for the file system on which this method is called. * * @param uri The URI of the file store to return. * @return A handle to a file store in this file system */ public IFileStore getStore(URI uri); /** * Returns whether this file system is case sensitive. A case sensitive * file system treats files with names that differ only in case as different * files. For example, "HELLO", "Hello", and "hello" would be three different * files or directories in a case sensitive file system. * * @return <code>true</code> if this file system is case sensitive, and * <code>false</code> otherwise. */ public boolean isCaseSensitive(); }