blob: 2198b8c3c8d89e8a86ddcb7fb3ad4ea80ef43458 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.vfs;
import java.io.File;
/**
* A file system, made up of a hierarchy of files.
*
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
* @version $Revision$ $Date$
*/
public interface FileSystem
{
/**
* Returns the root file of this file system.
* @return The root FileObject.
* @throws FileSystemException if an error occurs.
*/
FileObject getRoot() throws FileSystemException;
/**
* Returns the name of the root file of this file system. The root name always
* contains a path String of "/".
* @return the root FileName.
*/
FileName getRootName();
/**
* The root URI passed as a file system option or obtained from the rootName.
* @return The root URI.
*/
String getRootURI();
/**
* Determines if this file system has a particular capability.
*
* @param capability The capability to check for.
* @return true if this filesystem has the requested capability.
* Note that not all files in the file system may have the
* capability.
* @todo Move this to another interface, so that set of capabilities can be queried.
*/
boolean hasCapability(Capability capability);
/**
* Returns the parent layer if this is a layered file system.
*
* @return The parent layer, or null if this is not a layered file system.
* @throws FileSystemException if an error occurs.
*/
FileObject getParentLayer() throws FileSystemException;
/**
* Gets the value of an attribute of the file system.
* <p/>
* <p>TODO - change to <code>Map getAttributes()</code> instead?
* <p/>
* <p>TODO - define the standard attribute names, and define which attrs
* are guaranteed to be present.
*
* @param attrName The name of the attribute.
* @return The value of the attribute.
* @throws org.apache.commons.vfs.FileSystemException
* If the file does not exist, or is being written, or if the
* attribute is unknown.
* @see org.apache.commons.vfs.FileContent#getAttribute
*/
Object getAttribute(String attrName) throws FileSystemException;
/**
* Sets the value of an attribute of the file's content. Creates the
* file if it does not exist.
*
* @param attrName The name of the attribute.
* @param value The value of the attribute.
* @throws FileSystemException If the file is read-only, or is being read, or if the attribute
* is not supported, or on error setting the attribute.
* @see FileContent#setAttribute
*/
void setAttribute(String attrName, Object value)
throws FileSystemException;
/**
* Finds a file in this file system.
*
* @param name The name of the file.
* @return The file. Never returns null.
* @throws FileSystemException if an error occurs.
*/
FileObject resolveFile(FileName name) throws FileSystemException;
/**
* Finds a file in this file system.
*
* @param name The name of the file. This must be an absolute path.
* @return The file. Never returns null.
* @throws FileSystemException if an error occurs.
*/
FileObject resolveFile(String name) throws FileSystemException;
/**
* Adds a listener on a file in this file system.
*
* @param file The file to attach the listener to.
* @param listener The listener to add.
*/
void addListener(FileObject file, FileListener listener);
/**
* Removes a listener from a file in this file system.
*
* @param file The file to remove the listener from.
* @param listener The listener to remove.
*/
void removeListener(FileObject file, FileListener listener);
/**
* Adds a junction to this file system. A junction is a link that attaches
* the supplied file to a point in this file system, making it look like
* part of the file system.
*
* @param junctionPoint The point in this file system to add the junction.
* @param targetFile The file to link to.
* @throws FileSystemException If this file system does not support junctions, or the junction
* point or target file is invalid (the file system may not support
* nested junctions, for example).
*/
void addJunction(String junctionPoint, FileObject targetFile)
throws FileSystemException;
/**
* Removes a junction from this file system.
*
* @param junctionPoint The junction to remove.
* @throws FileSystemException On error removing the junction.
*/
void removeJunction(String junctionPoint) throws FileSystemException;
/**
* Creates a temporary local copy of a file and its descendents. If
* this file is already a local file, a copy is not made.
* <p/>
* <p>Note that the local copy may include additonal files, that were
* not selected by the given selector.
*
* @param file The file to replicate.
* @param selector The selector to use to select the files to replicate.
* @return The local copy of this file.
* @throws FileSystemException If this file does not exist, or on error replicating the file.
* @todo Add options to indicate whether the caller is happy to deal with
* extra files being present locally (eg if the file has been
* replicated previously), or whether the caller expects only
* the selected files to be present.
*/
File replicateFile(FileObject file, FileSelector selector)
throws FileSystemException;
/**
* Returns the FileSystemOptions used to instantiate this filesystem.
* @return The FileSystemOptions.
*/
FileSystemOptions getFileSystemOptions();
/**
* Returns a reference to the FileSytemManager.
* @return The FileSystemManager.
*/
FileSystemManager getFileSystemManager();
/**
* Returns the accuracy of the last modification time.
*
* @return ms 0 perfectly accurate, >0 might be off by this value e.g. sftp 1000ms.
*/
double getLastModTimeAccuracy();
}