Copyright (c) 2005, 2015 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2005, 2015 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.core.filesystem.provider; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.core.filesystem.*; import org.eclipse.core.runtime.*;
The common superclass for all file system implementations. Instances of this class are provided using the org.eclipse.core.filesystem.filesystems extension point.

On creation, the setInitializationData method is called with any parameter data specified in the declaring plug-in's manifest.

Clients may subclass this class.

Since:org.eclipse.core.filesystem 1.0
/** * The common superclass for all file system implementations. Instances * of this class are provided using the <code>org.eclipse.core.filesystem.filesystems</code> * extension point. * <p> * On creation, the <code>setInitializationData</code> method is called with * any parameter data specified in the declaring plug-in's manifest. * </p> * <p> * Clients may subclass this class. * </p> * @since org.eclipse.core.filesystem 1.0 */
public abstract class FileSystem extends PlatformObject implements IFileSystem { private String scheme;
Creates a new file system instance.
/** * Creates a new file system instance. */
public FileSystem() { super(); }
This is the default implementation of IFileSystem.attributes(). This implementation always returns 0. Subclasses may override this method.
See Also:
Returns:The attributes supported by this file system
/** * This is the default implementation of {@link IFileSystem#attributes()}. * This implementation always returns <code>0</code>. * Subclasses may override this method. * * @return The attributes supported by this file system * @see IFileSystem#attributes() */
@Override public int attributes() { return 0; }
This is the default implementation of IFileSystem.canDelete(). This implementation always returns false. Subclasses may override this method.
See Also:
Returns:true if this file system supports deletion, and false otherwise.
/** * This is the default implementation of {@link IFileSystem#canDelete()}. * This implementation always returns <code>false</code>. * Subclasses may override this method. * * @return <code>true</code> if this file system supports deletion, and * <code>false</code> otherwise. * @see IFileSystem#canDelete() */
@Override public boolean canDelete() { return false; }
This is the default implementation of IFileSystem.canWrite(). This implementation always returns false. Subclasses may override this method.
See Also:
Returns:true if this file system allows modification, and false otherwise.
/** * This is the default implementation of {@link IFileSystem#canWrite()}. * This implementation always returns <code>false</code>. * Subclasses may override this method. * * @return <code>true</code> if this file system allows modification, and * <code>false</code> otherwise. * @see IFileSystem#canWrite() */
@Override public boolean canWrite() { return false; } @Override public final String getScheme() { return scheme; }
This is the default implementation of IFileSystem.getStore(IPath). This implementation forwards to IFileSystem.getStore(URI), assuming that the provided path corresponds to the path component of the URI for the file store.

Subclasses may override this method. If it is not possible to create a file store corresponding to the provided path for this file system, a file store belonging to the null file system should be returned

Params:
  • path – A path to a file store within the scheme of this file system.
See Also:
Returns:A handle to a file store in this file system
/** * This is the default implementation of {@link IFileSystem#getStore(IPath)}. * This implementation forwards to {@link IFileSystem#getStore(URI)}, * assuming that the provided path corresponds to the path component of the * URI for the file store. * <p> * Subclasses may override this method. If it is not possible to create a file * store corresponding to the provided path for this file system, a file store * belonging to the null file system should be returned * </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 IFileSystem#getStore(IPath) * @see EFS#getNullFileSystem() */
@Override public IFileStore getStore(IPath path) { try { return getStore(new URI(scheme, path.toString(), null)); } catch (URISyntaxException e) { return EFS.getNullFileSystem().getStore(path); } }
Subclasses must implement this method to satisfy the contract of IFileSystem.getStore(URI). If it is not possible to create a file store corresponding to the provided URI for this file system, a file store belonging to the null file system should be returned
/** * Subclasses must implement this method to satisfy the contract * of {@link IFileSystem#getStore(URI)}. If it is not possible to create a file * store corresponding to the provided URI for this file system, a file store * belonging to the null file system should be returned */
@Override public abstract IFileStore getStore(URI uri);
{@inheritDoc}

This default implementation always returns null. Subclasses that can efficiently provide an IFileTree rooted at the given file store should override.

Throws:
See Also:
/** * {@inheritDoc} * <p> * This default implementation always returns <code>null</code>. Subclasses * that can efficiently provide an {@link IFileTree} rooted at the given file store * should override. * @throws CoreException if fails. * @see IFileSystem#fetchFileTree(IFileStore, IProgressMonitor) */
@Override public IFileTree fetchFileTree(IFileStore root, IProgressMonitor monitor) throws CoreException { return null; }
{@inheritDoc}

This default implementation always returns null. Subclasses may override to provide a concrete mapping from local files to an IFileStore in their file system.

/** * {@inheritDoc} * <p> * This default implementation always returns <code>null</code>. * Subclasses may override to provide a concrete mapping from local * files to an IFileStore in their file system. */
@Override public IFileStore fromLocalFile(java.io.File file) { return null; }
Initializes this file system instance with the provided scheme.

This method is called by the platform immediately after the file system instance is created. This method must not be called by clients.

Params:
  • aScheme – The scheme of the file system.
/** * Initializes this file system instance with the provided scheme. * <p> * This method is called by the platform immediately after the * file system instance is created. This method must not be * called by clients. * * @param aScheme The scheme of the file system. */
public final void initialize(String aScheme) { if (aScheme == null) throw new NullPointerException(); //scheme cannot be changed after creation if (this.scheme != null) throw new IllegalStateException("File system already initialized"); //$NON-NLS-1$ this.scheme = aScheme; }
This is the default implementation of IFileSystem.isCaseSensitive(). This implementation always returns true. Subclasses may override this method.
See Also:
Returns:true if this file system is case sensitive, and false otherwise.
/** * This is the default implementation of {@link IFileSystem#isCaseSensitive()}. * This implementation always returns <code>true</code>. Subclasses may override this method. * * @return <code>true</code> if this file system is case sensitive, and * <code>false</code> otherwise. * @see IFileSystem#isCaseSensitive() */
@Override public boolean isCaseSensitive() { return true; } }