Browse Source

* Added another FileSystemManager.resolveFile() convenience method.

* Made a heap of stuff final.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271360 13f79535-47bb-0310-9956-ffa450edef68
master
adammurdoch 23 years ago
parent
commit
8c22fa33f3
3 changed files with 64 additions and 25 deletions
  1. +18
    -1
      proposal/myrmidon/src/java/org/apache/aut/vfs/FileSystemManager.java
  2. +27
    -15
      proposal/myrmidon/src/java/org/apache/aut/vfs/impl/DefaultFileSystemManager.java
  3. +19
    -9
      proposal/myrmidon/src/java/org/apache/aut/vfs/provider/local/LocalFileSystemProvider.java

+ 18
- 1
proposal/myrmidon/src/java/org/apache/aut/vfs/FileSystemManager.java View File

@@ -8,6 +8,7 @@
package org.apache.aut.vfs; package org.apache.aut.vfs;


import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.Component;
import java.io.File;


/** /**
* A FileSystemManager is manages a set of file systems. This interface is * A FileSystemManager is manages a set of file systems. This interface is
@@ -85,10 +86,26 @@ public interface FileSystemManager
* The name of the file. * The name of the file.
* *
* @param baseFile * @param baseFile
* The base file to use to resolve paths.
* The base file to use to resolve relative paths.
* *
* @throws FileSystemException * @throws FileSystemException
* On error parsing the file name. * On error parsing the file name.
*/ */
FileObject resolveFile( FileObject baseFile, String name ) throws FileSystemException; FileObject resolveFile( FileObject baseFile, String name ) throws FileSystemException;

/**
* Locates a file by name. See {@link #resolveFile(FileObject, String)}
* for details.
*
* @param baseFile
* The base file to use to resolve relative paths.
*
* @param name
* The name of the file.
*
* @throws FileSystemException
* On error parsing the file name.
*
*/
FileObject resolveFile ( File baseFile, String name ) throws FileSystemException;
} }

+ 27
- 15
proposal/myrmidon/src/java/org/apache/aut/vfs/impl/DefaultFileSystemManager.java View File

@@ -34,13 +34,13 @@ public class DefaultFileSystemManager
= ResourceManager.getPackageResources( DefaultFileSystemManager.class ); = ResourceManager.getPackageResources( DefaultFileSystemManager.class );


/** The default provider. */ /** The default provider. */
private LocalFileSystemProvider m_localFileProvider;
private final LocalFileSystemProvider m_localFileProvider;


/** Mapping from URI scheme to FileSystemProvider. */ /** Mapping from URI scheme to FileSystemProvider. */
private Map m_providers = new HashMap();
private final Map m_providers = new HashMap();


/** The provider context. */ /** The provider context. */
private ProviderContextImpl m_context = new ProviderContextImpl();
private final ProviderContextImpl m_context = new ProviderContextImpl();


/** The base file to use for relative URI. */ /** The base file to use for relative URI. */
private FileObject m_baseFile; private FileObject m_baseFile;
@@ -49,7 +49,7 @@ public class DefaultFileSystemManager
* The cached file systems. This is a mapping from root URI to * The cached file systems. This is a mapping from root URI to
* FileSystem object. * FileSystem object.
*/ */
private Map m_fileSystems = new HashMap();
private final Map m_fileSystems = new HashMap();


public DefaultFileSystemManager() throws Exception public DefaultFileSystemManager() throws Exception
{ {
@@ -117,7 +117,7 @@ public class DefaultFileSystemManager
/** /**
* Sets the base file to use when resolving relative URI. * Sets the base file to use when resolving relative URI.
*/ */
public void setBaseFile( FileObject baseFile ) throws FileSystemException
public void setBaseFile( final FileObject baseFile ) throws FileSystemException
{ {
m_baseFile = baseFile; m_baseFile = baseFile;
} }
@@ -125,9 +125,9 @@ public class DefaultFileSystemManager
/** /**
* Sets the base file to use when resolving relative URI. * Sets the base file to use when resolving relative URI.
*/ */
public void setBaseFile( File baseFile ) throws FileSystemException
public void setBaseFile( final File baseFile ) throws FileSystemException
{ {
m_baseFile = m_localFileProvider.findFileByLocalName( baseFile.getAbsolutePath() );
m_baseFile = m_localFileProvider.findLocalFile( baseFile.getAbsolutePath() );
} }


/** /**
@@ -141,22 +141,33 @@ public class DefaultFileSystemManager
/** /**
* Locates a file by URI. * Locates a file by URI.
*/ */
public FileObject resolveFile( String URI ) throws FileSystemException
public FileObject resolveFile( final String uri ) throws FileSystemException
{ {
return resolveFile( m_baseFile, URI );
return resolveFile( m_baseFile, uri );
}

/**
* Locates a file by URI.
*/
public FileObject resolveFile( final File baseFile, final String uri )
throws FileSystemException
{
final FileObject baseFileObj = m_localFileProvider.findFileByLocalName( baseFile );
return resolveFile( baseFileObj, uri );
} }


/** /**
* Resolves a URI, relative to a base file. * Resolves a URI, relative to a base file.
*/ */
public FileObject resolveFile( FileObject baseFile, String uri ) throws FileSystemException
public FileObject resolveFile( final FileObject baseFile, final String uri )
throws FileSystemException
{ {
// Extract the scheme // Extract the scheme
String scheme = UriParser.extractScheme( uri );
final String scheme = UriParser.extractScheme( uri );
if( scheme != null ) if( scheme != null )
{ {
// An absolute URI - locate the provider // An absolute URI - locate the provider
FileSystemProvider provider = (FileSystemProvider)m_providers.get( scheme );
final FileSystemProvider provider = (FileSystemProvider)m_providers.get( scheme );
if( provider != null ) if( provider != null )
{ {
return provider.findFile( uri ); return provider.findFile( uri );
@@ -166,7 +177,7 @@ public class DefaultFileSystemManager
// Handle absolute file names // Handle absolute file names
if( m_localFileProvider.isAbsoluteLocalName( uri ) ) if( m_localFileProvider.isAbsoluteLocalName( uri ) )
{ {
return m_localFileProvider.findFileByLocalName( uri );
return m_localFileProvider.findLocalFile( uri );
} }


// Assume a bad scheme // Assume a bad scheme
@@ -194,7 +205,7 @@ public class DefaultFileSystemManager
/** /**
* Locates a cached file system by root URI. * Locates a cached file system by root URI.
*/ */
public FileSystem getFileSystem( String rootURI )
public FileSystem getFileSystem( final String rootURI )
{ {
// TODO - need to have a per-fs uri comparator // TODO - need to have a per-fs uri comparator
return (FileSystem)m_fileSystems.get( rootURI ); return (FileSystem)m_fileSystems.get( rootURI );
@@ -203,7 +214,8 @@ public class DefaultFileSystemManager
/** /**
* Registers a file system for caching. * Registers a file system for caching.
*/ */
public void putFileSystem( String rootURI, FileSystem fs ) throws FileSystemException
public void putFileSystem( final String rootURI, final FileSystem fs )
throws FileSystemException
{ {
// TODO - should really check that there's not one already cached // TODO - should really check that there's not one already cached
m_fileSystems.put( rootURI, fs ); m_fileSystems.put( rootURI, fs );


+ 19
- 9
proposal/myrmidon/src/java/org/apache/aut/vfs/provider/local/LocalFileSystemProvider.java View File

@@ -14,6 +14,7 @@ import org.apache.aut.vfs.provider.DefaultFileName;
import org.apache.aut.vfs.provider.FileSystem; import org.apache.aut.vfs.provider.FileSystem;
import org.apache.aut.vfs.provider.FileSystemProvider; import org.apache.aut.vfs.provider.FileSystemProvider;
import org.apache.aut.vfs.provider.ParsedUri; import org.apache.aut.vfs.provider.ParsedUri;
import java.io.File;


/** /**
* A file system provider, which uses direct file access. * A file system provider, which uses direct file access.
@@ -23,26 +24,35 @@ import org.apache.aut.vfs.provider.ParsedUri;
public class LocalFileSystemProvider extends AbstractFileSystemProvider public class LocalFileSystemProvider extends AbstractFileSystemProvider
implements FileSystemProvider implements FileSystemProvider
{ {
private LocalFileNameParser m_parser = new LocalFileNameParser();
private final LocalFileNameParser m_parser = new LocalFileNameParser();


/** /**
* Determines if a name is an absolute file name. * Determines if a name is an absolute file name.
*/ */
public boolean isAbsoluteLocalName( String name )
public boolean isAbsoluteLocalName( final String name )
{ {
return m_parser.isAbsoluteName( name ); return m_parser.isAbsoluteName( name );
} }


/** /**
* Finds a file by local file name.
* Finds a local file, from its local name.
*/ */
public FileObject findFileByLocalName( String name ) throws FileSystemException
public FileObject findLocalFile( final String name ) throws FileSystemException
{ {
// TODO - tidy this up, no need to turn the name into an absolute URI, // TODO - tidy this up, no need to turn the name into an absolute URI,
// and then straight back again // and then straight back again
return findFile( "file:" + name ); return findFile( "file:" + name );
} }


/**
* Finds a local file.
*/
public FileObject findFileByLocalName( final File file ) throws FileSystemException
{
// TODO - tidy this up, should build file object straight from the file
return findFile( "file:" + file.getAbsolutePath() );
}

/** /**
* Parses a URI into its components. The returned value is used to * Parses a URI into its components. The returned value is used to
* locate the file system in the cache (using the root prefix), and is * locate the file system in the cache (using the root prefix), and is
@@ -51,7 +61,7 @@ public class LocalFileSystemProvider extends AbstractFileSystemProvider
* <p>The provider can annotate this object with any additional * <p>The provider can annotate this object with any additional
* information it requires to create a file system from the URI. * information it requires to create a file system from the URI.
*/ */
protected ParsedUri parseURI( String uri ) throws FileSystemException
protected ParsedUri parseURI( final String uri ) throws FileSystemException
{ {
return m_parser.parseUri( uri ); return m_parser.parseUri( uri );
} }
@@ -59,14 +69,14 @@ public class LocalFileSystemProvider extends AbstractFileSystemProvider
/** /**
* Creates the filesystem. * Creates the filesystem.
*/ */
protected FileSystem createFileSystem( ParsedUri uri ) throws FileSystemException
protected FileSystem createFileSystem( final ParsedUri uri ) throws FileSystemException
{ {
// Build the name of the root file. // Build the name of the root file.
ParsedFileUri fileUri = (ParsedFileUri)uri;
String rootFile = fileUri.getRootFile();
final ParsedFileUri fileUri = (ParsedFileUri)uri;
final String rootFile = fileUri.getRootFile();


// Create the file system // Create the file system
DefaultFileName rootName = new DefaultFileName( m_parser, fileUri.getRootURI(), "/" );
final DefaultFileName rootName = new DefaultFileName( m_parser, fileUri.getRootURI(), "/" );
return new LocalFileSystem( rootName, rootFile ); return new LocalFileSystem( rootName, rootFile );
} }
} }

Loading…
Cancel
Save