Class DefaultFileSystemManager

java.lang.Object
org.apache.commons.vfs2.impl.DefaultFileSystemManager
All Implemented Interfaces:
AutoCloseable, FileSystemManager
Direct Known Subclasses:
StandardFileSystemManager

public class DefaultFileSystemManager extends Object implements FileSystemManager
The default file system manager implementation.
  • Field Details

    • providers

      private final Map<String,FileProvider> providers
      Mapping from URI scheme to FileProvider.
    • virtualFileSystemSchemes

      private final List<String> virtualFileSystemSchemes
      List of the schemes of virtual file systems added.
    • components

      private final ArrayList<Object> components
      All components used by this manager.
    • context

      private final DefaultVfsComponentContext context
      The context to pass to providers.
    • operationProviders

      private final Map<String,List<FileOperationProvider>> operationProviders
      Operations providers added to this manager.
    • typeMap

      private final FileTypeMap typeMap
      Mappings of file types.
    • localFileProvider

      private LocalFileProvider localFileProvider
      The provider for local files.
    • defaultProvider

      private FileProvider defaultProvider
      The default provider.
    • fileReplicator

      private FileReplicator fileReplicator
      The file replicator to use.
    • baseFile

      private FileObject baseFile
      The base file to use for relative URI.
    • filesCache

      private FilesCache filesCache
      The files cache
    • fileCacheStrategy

      private CacheStrategy fileCacheStrategy
      The cache strategy
    • fileObjectDecorator

      private Class<?> fileObjectDecorator
      Class which decorates all returned fileObjects
    • fileObjectDecoratorConst

      private Constructor<?> fileObjectDecoratorConst
      Reflection constructor extracted from fileObjectDecorator
    • fileContentInfoFactory

      private FileContentInfoFactory fileContentInfoFactory
      The class to use to determine the content-type (mime-type)
    • log

      private org.apache.commons.logging.Log log
      The logger to use. Default implementation.
    • tempFileStore

      private TemporaryFileStore tempFileStore
      The temporary file store to use.
    • vfsProvider

      private VirtualFileProvider vfsProvider
      The virtual file provider.
    • init

      private boolean init
      Flag, if manager is initialized (after init() and before close()).
  • Constructor Details

    • DefaultFileSystemManager

      public DefaultFileSystemManager()
  • Method Details

    • _closeFileSystem

      public void _closeFileSystem(FileSystem fileSystem)
      Closes the given file system.

      If you use VFS as singleton it is VERY dangerous to call this method

      Parameters:
      fileSystem - The FileSystem to close.
    • addExtensionMap

      public void addExtensionMap(String extension, String scheme)
      Adds an file name extension mapping.
      Parameters:
      extension - The file name extension.
      scheme - The scheme to use for files with this extension.
    • addMimeTypeMap

      public void addMimeTypeMap(String mimeType, String scheme)
      Adds a mime type mapping.
      Parameters:
      mimeType - The mime type.
      scheme - The scheme to use for files with this mime type.
    • addOperationProvider

      public void addOperationProvider(String scheme, FileOperationProvider operationProvider) throws FileSystemException
      Adds the specified FileOperationProvider for the specified scheme. Several FileOperationProvider's might be registered for the same scheme. For example, for "file" scheme we can register SvnWsOperationProvider and CvsOperationProvider.
      Specified by:
      addOperationProvider in interface FileSystemManager
      Parameters:
      scheme - The scheme the provider should be registered for.
      operationProvider - The FileOperationProvider.
      Throws:
      FileSystemException - if an error occurs adding the provider.
    • addOperationProvider

      public void addOperationProvider(String[] schemes, FileOperationProvider operationProvider) throws FileSystemException
      Specified by:
      addOperationProvider in interface FileSystemManager
      Parameters:
      schemes - The array of schemes the provider should apply to.
      operationProvider - The FileOperationProvider.
      Throws:
      FileSystemException - if an error occurs.
      See Also:
    • addProvider

      public void addProvider(String urlScheme, FileProvider provider) throws FileSystemException
      Registers a file system provider.

      The manager takes care of all lifecycle management. A provider may be registered multiple times. The first LocalFileProvider added will be remembered for getLocalFileProvider().

      Parameters:
      urlScheme - The scheme the provider will handle.
      provider - The provider.
      Throws:
      FileSystemException - if an error occurs adding the provider.
    • addProvider

      public void addProvider(String[] urlSchemes, FileProvider provider) throws FileSystemException
      Registers a file system provider.

      The manager takes care of all lifecycle management. A provider may be registered multiple times. The first LocalFileProvider added will be remembered for getLocalFileProvider().

      Parameters:
      urlSchemes - The schemes the provider will handle.
      provider - The provider.
      Throws:
      FileSystemException - if an error occurs adding the provider.
    • addVirtualFileSystemScheme

      protected void addVirtualFileSystemScheme(String rootUri)
    • canCreateFileSystem

      public boolean canCreateFileSystem(FileObject file) throws FileSystemException
      Determines if a layered file system can be created for a given file.
      Specified by:
      canCreateFileSystem in interface FileSystemManager
      Parameters:
      file - The file to check for.
      Returns:
      true if the FileSystem can be created.
      Throws:
      FileSystemException - if an error occurs.
    • close

      public void close()
      Closes the manager.

      This will close all providers (all files), it will also close all managed components including temporary files, replicator, file cache and file operations.

      The manager is in uninitialized state after this method.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface FileSystemManager
    • closeComponent

      private void closeComponent(Object component)
      Closes a component, if it has not already been closed.
      Parameters:
      component - The component to close.
    • closeFileSystem

      public void closeFileSystem(FileSystem fileSystem)
      Closes the given file system.

      If you use VFS as singleton it is VERY dangerous to call this method.

      Specified by:
      closeFileSystem in interface FileSystemManager
      Parameters:
      fileSystem - The FileSystem to close.
    • createFileSystem

      public FileObject createFileSystem(FileObject file) throws FileSystemException
      Creates a layered file system.
      Specified by:
      createFileSystem in interface FileSystemManager
      Parameters:
      file - The FileObject to use.
      Returns:
      The layered FileObject.
      Throws:
      FileSystemException - if an error occurs.
    • createFileSystem

      public FileObject createFileSystem(String scheme, FileObject file) throws FileSystemException
      Creates a layered file system.
      Specified by:
      createFileSystem in interface FileSystemManager
      Parameters:
      scheme - The scheme to use.
      file - The FileObject.
      Returns:
      The layered FileObject.
      Throws:
      FileSystemException - if an error occurs.
    • createVirtualFileSystem

      public FileObject createVirtualFileSystem(FileObject rootFile) throws FileSystemException
      Creates a virtual file system.
      Specified by:
      createVirtualFileSystem in interface FileSystemManager
      Parameters:
      rootFile - The FileObject to use.
      Returns:
      The FileObject in the VirtualFileSystem.
      Throws:
      FileSystemException - if an error occurs creating the file.
    • createVirtualFileSystem

      public FileObject createVirtualFileSystem(String rootUri) throws FileSystemException
      Creates an empty virtual file system.
      Specified by:
      createVirtualFileSystem in interface FileSystemManager
      Parameters:
      rootUri - The URI to use as the root of the FileSystem.
      Returns:
      A FileObject in the virtual FileSystem.
      Throws:
      FileSystemException - if an error occurs.
    • freeUnusedResources

      public void freeUnusedResources()
      Free all resources used by unused file systems created by this manager.
    • getBaseFile

      public FileObject getBaseFile() throws FileSystemException
      Returns the base file used to resolve relative URI.
      Specified by:
      getBaseFile in interface FileSystemManager
      Returns:
      The FileObject that represents the base file.
      Throws:
      FileSystemException - if an error occurs.
    • getCacheStrategy

      public CacheStrategy getCacheStrategy()
      Get the cache strategy used.
      Specified by:
      getCacheStrategy in interface FileSystemManager
      Returns:
      The CacheStrategy.
    • getFileContentInfoFactory

      public FileContentInfoFactory getFileContentInfoFactory()
      get the fileContentInfoFactory used to determine the infos of a file content.
      Specified by:
      getFileContentInfoFactory in interface FileSystemManager
      Returns:
      The FileContentInfoFactory.
    • getFileObjectDecorator

      public Class<?> getFileObjectDecorator()
      Get the file object decorator used.
      Specified by:
      getFileObjectDecorator in interface FileSystemManager
      Returns:
      The decorator.
    • getFileObjectDecoratorConst

      public Constructor<?> getFileObjectDecoratorConst()
      The constructor associated to the fileObjectDecorator. We cache it here for performance reasons.
      Specified by:
      getFileObjectDecoratorConst in interface FileSystemManager
      Returns:
      The decorator's Constructor.
    • getFilesCache

      public FilesCache getFilesCache()
      Returns the filesCache implementation used to cache files.
      Specified by:
      getFilesCache in interface FileSystemManager
      Returns:
      The FilesCache.
    • getFileSystemConfigBuilder

      public FileSystemConfigBuilder getFileSystemConfigBuilder(String scheme) throws FileSystemException
      Get the configuration builder for the given scheme.
      Specified by:
      getFileSystemConfigBuilder in interface FileSystemManager
      Parameters:
      scheme - The scheme to locate.
      Returns:
      The FileSystemConfigBuilder for the scheme.
      Throws:
      FileSystemException - if the given scheme is not konwn
    • getLocalFileProvider

      private LocalFileProvider getLocalFileProvider() throws FileSystemException
      Locates the local file provider.

      The local file provider is the first provider added implementing LocalFileProvider.

      Returns:
      The LocalFileProvider.
      Throws:
      FileSystemException - if no local file provider was set.
    • getLogger

      protected org.apache.commons.logging.Log getLogger()
      Returns the logger used by this manager.
      Returns:
      the Logger.
    • getOperationProviders

      public FileOperationProvider[] getOperationProviders(String scheme) throws FileSystemException
      Description copied from interface: FileSystemManager
      Gets Providers for file operations.
      Specified by:
      getOperationProviders in interface FileSystemManager
      Parameters:
      scheme - the scheme for wich we want to get the list af registered providers.
      Returns:
      the registered FileOperationProviders for the specified scheme. If there were no providers registered for the scheme, it returns null.
      Throws:
      FileSystemException - if an error occurs.
    • getProviderCapabilities

      public Collection<Capability> getProviderCapabilities(String scheme) throws FileSystemException
      Get the capabilities for a given scheme.
      Specified by:
      getProviderCapabilities in interface FileSystemManager
      Parameters:
      scheme - The scheme to located.
      Returns:
      A Collection of capabilities.
      Throws:
      FileSystemException - if the given scheme is not konwn
    • getReplicator

      public FileReplicator getReplicator() throws FileSystemException
      Returns the file replicator.
      Returns:
      The file replicator. Never returns null.
      Throws:
      FileSystemException - if there is no FileReplicator.
    • getSchemes

      public String[] getSchemes()
      Get the schemes currently available.
      Specified by:
      getSchemes in interface FileSystemManager
      Returns:
      The array of scheme names.
    • getTemporaryFileStore

      public TemporaryFileStore getTemporaryFileStore() throws FileSystemException
      Returns the temporary file store.
      Returns:
      The file store. Never returns null.
      Throws:
      FileSystemException - if there is no TemporaryFileStore.
    • getURLStreamHandlerFactory

      public URLStreamHandlerFactory getURLStreamHandlerFactory()
      Get the URLStreamHandlerFactory.
      Specified by:
      getURLStreamHandlerFactory in interface FileSystemManager
      Returns:
      The URLStreamHandlerFactory.
    • hasProvider

      public boolean hasProvider(String scheme)
      Returns true if this manager has a provider for a particular scheme.
      Specified by:
      hasProvider in interface FileSystemManager
      Parameters:
      scheme - The scheme to check.
      Returns:
      true if a provider is configured for this scheme, false otherwise.
    • init

      public void init() throws FileSystemException
      Initializes this manager.

      If no value for the following properties was specified, it will use the following defaults:

      • fileContentInfoFactory = new FileContentInfoFilenameFactory()
      • filesCache = new SoftRefFilesCache()
      • fileCacheStrategy = CacheStrategy.ON_RESOLVE
      Throws:
      FileSystemException - if an error occurs during initialization.
    • removeProvider

      public void removeProvider(String urlScheme)
      Unregisters a file system provider.
      Parameters:
      urlScheme - The scheme of the provider.
      Since:
      2.8.0
    • resolveFile

      public FileObject resolveFile(File baseFile, String uri) throws FileSystemException
      Resolves a URI, relative to base file.

      Uses the local file provider to locate the system file.

      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      baseFile - The base File to use to locate the file.
      uri - The URI of the file to locate.
      Returns:
      The FileObject for the located file.
      Throws:
      FileSystemException - if the file cannot be located or an error occurs.
    • resolveFile

      public FileObject resolveFile(FileObject baseFile, String uri) throws FileSystemException
      Resolves a URI, relative to a base file.
      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      baseFile - The base FileOjbect to use to locate the file.
      uri - The URI of the file to locate.
      Returns:
      The FileObject for the located file.
      Throws:
      FileSystemException - if the file cannot be located or an error occurs.
    • resolveFile

      public FileObject resolveFile(FileObject baseFile, String uri, FileSystemOptions fileSystemOptions) throws FileSystemException
      Resolves a URI, relative to a base file with specified FileSystem configuration.
      Parameters:
      baseFile - The base file.
      uri - The file name. May be a fully qualified or relative path or a url.
      fileSystemOptions - Options to pass to the file system.
      Returns:
      A FileObject representing the target file.
      Throws:
      FileSystemException - if an error occurs accessing the file.
    • resolveFile

      public FileObject resolveFile(String uri) throws FileSystemException
      Locates a file by URI.
      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      uri - The URI of the file to locate.
      Returns:
      The FileObject for the located file.
      Throws:
      FileSystemException - if the file cannot be located or an error occurs.
    • resolveFile

      public FileObject resolveFile(String uri, FileSystemOptions fileSystemOptions) throws FileSystemException
      Locate a file by URI, use the FileSystemOptions for file-system creation.
      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      uri - The URI of the file to locate.
      fileSystemOptions - The options for the FileSystem.
      Returns:
      The FileObject for the located file.
      Throws:
      FileSystemException - if the file cannot be located or an error occurs.
    • resolveFile

      public FileObject resolveFile(URI uri) throws FileSystemException
      Converts a URI into a FileObject.
      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      uri - The URI to convert.
      Returns:
      The FileObject that represents the URI. Never returns null.
      Throws:
      FileSystemException - On error converting the URI.
      Since:
      2.1
    • resolveFile

      public FileObject resolveFile(URL url) throws FileSystemException
      Converts a URL into a FileObject.
      Specified by:
      resolveFile in interface FileSystemManager
      Parameters:
      url - The URL to convert.
      Returns:
      The FileObject that represents the URL. Never returns null.
      Throws:
      FileSystemException - On error converting the URL.
      Since:
      2.1
    • resolveName

      public FileName resolveName(FileName root, String path) throws FileSystemException
      Resolves a name, relative to the file. If the supplied name is an absolute path, then it is resolved relative to the root of the file system that the file belongs to. If a relative name is supplied, then it is resolved relative to this file name.
      Specified by:
      resolveName in interface FileSystemManager
      Parameters:
      root - The base FileName.
      path - The path to the file relative to the base FileName or an absolute path.
      Returns:
      The constructed FileName.
      Throws:
      FileSystemException - if an error occurs constructing the FileName.
    • resolveName

      public FileName resolveName(FileName base, String name, NameScope scope) throws FileSystemException
      Resolves a name, relative to the root.
      Specified by:
      resolveName in interface FileSystemManager
      Parameters:
      base - the base file name
      name - the name
      scope - the NameScope
      Returns:
      The FileName of the file.
      Throws:
      FileSystemException - if an error occurs.
    • resolveURI

      public FileName resolveURI(String uri) throws FileSystemException
      Resolve the uri to a file name.
      Specified by:
      resolveURI in interface FileSystemManager
      Parameters:
      uri - The URI to resolve.
      Returns:
      The FileName of the file.
      Throws:
      FileSystemException - if an error occurs.
    • setBaseFile

      public void setBaseFile(File baseFile) throws FileSystemException
      Sets the base file to use when resolving relative URI.
      Parameters:
      baseFile - The new base FileObject.
      Throws:
      FileSystemException - if an error occurs.
    • setBaseFile

      public void setBaseFile(FileObject baseFile)
      Sets the base file to use when resolving relative URI.
      Parameters:
      baseFile - The new base FileObject.
    • setCacheStrategy

      public void setCacheStrategy(CacheStrategy fileCacheStrategy) throws FileSystemException
      Set the cache strategy to use when dealing with file object data.

      Can only be set before the FileSystemManager is initialized.

      The default is CacheStrategy.ON_RESOLVE.

      Parameters:
      fileCacheStrategy - The CacheStrategy to use.
      Throws:
      FileSystemException - if this is not possible. e.g. it is already set.
    • setDefaultProvider

      public void setDefaultProvider(FileProvider provider) throws FileSystemException
      Sets the default provider. This is the provider that will handle URI with unknown schemes. The manager takes care of all lifecycle management.
      Parameters:
      provider - The FileProvider.
      Throws:
      FileSystemException - if an error occurs setting the provider.
    • setFileContentInfoFactory

      public void setFileContentInfoFactory(FileContentInfoFactory fileContentInfoFactory) throws FileSystemException
      set the fileContentInfoFactory used to determine the infos of a file content.

      Can only be set before the FileSystemManager is initialized.

      Parameters:
      fileContentInfoFactory - The FileContentInfoFactory.
      Throws:
      FileSystemException - if an error occurs setting the FileContentInfoFactory.
    • setFileObjectDecorator

      public void setFileObjectDecorator(Class<?> fileObjectDecorator) throws FileSystemException
      Set a fileObject decorator to be used for ALL returned file objects.

      Can only be set before the FileSystemManager is initialized.

      Parameters:
      fileObjectDecorator - must be inherted from DecoratedFileObject a has to provide a constructor with a single FileObject as argument
      Throws:
      FileSystemException - if an error occurs setting the decorator.
    • setFilesCache

      public void setFilesCache(FilesCache filesCache) throws FileSystemException
      Sets the filesCache implementation used to cache files.

      Can only be set before the FileSystemManager is initialized.

      The manager takes care of the lifecycle. If none is set, a default is picked in init().

      Parameters:
      filesCache - The FilesCache.
      Throws:
      FileSystemException - if an error occurs setting the cache..
    • setLogger

      public void setLogger(org.apache.commons.logging.Log log)
      Sets the logger to use.

      This overwrites the default logger for this manager and is not reset in close().

      Specified by:
      setLogger in interface FileSystemManager
      Parameters:
      log - The Logger to use.
    • setReplicator

      public void setReplicator(FileReplicator replicator) throws FileSystemException
      Sets the file replicator to use.

      The manager takes care of all lifecycle management.

      Parameters:
      replicator - The FileReplicator.
      Throws:
      FileSystemException - if an error occurs setting the replicator.
    • setTemporaryFileStore

      public void setTemporaryFileStore(TemporaryFileStore tempFileStore) throws FileSystemException
      Sets the temporary file store to use.

      The manager takes care of all lifecycle management.

      Parameters:
      tempFileStore - The temporary FileStore.
      Throws:
      FileSystemException - if an error occurs adding the file store.
    • setupComponent

      private void setupComponent(Object component) throws FileSystemException
      Initializes a component, if it has not already been initialized.
      Parameters:
      component - The component to setup.
      Throws:
      FileSystemException - if an error occurs.
    • toFileObject

      public FileObject toFileObject(File file) throws FileSystemException
      Converts a local file into a FileObject.
      Specified by:
      toFileObject in interface FileSystemManager
      Parameters:
      file - The input File.
      Returns:
      the create FileObject
      Throws:
      FileSystemException - if an error occurs creating the file.