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;

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

/**
* A FileSystemManager is manages a set of file systems. This interface is
@@ -85,10 +86,26 @@ public interface FileSystemManager
* The name of the file.
*
* @param baseFile
* The base file to use to resolve paths.
* The base file to use to resolve relative paths.
*
* @throws FileSystemException
* On error parsing the file name.
*/
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 );

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

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

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

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

public DefaultFileSystemManager() throws Exception
{
@@ -117,7 +117,7 @@ public class DefaultFileSystemManager
/**
* 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;
}
@@ -125,9 +125,9 @@ public class DefaultFileSystemManager
/**
* 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.
*/
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.
*/
public FileObject resolveFile( FileObject baseFile, String uri ) throws FileSystemException
public FileObject resolveFile( final FileObject baseFile, final String uri )
throws FileSystemException
{
// Extract the scheme
String scheme = UriParser.extractScheme( uri );
final String scheme = UriParser.extractScheme( uri );
if( scheme != null )
{
// An absolute URI - locate the provider
FileSystemProvider provider = (FileSystemProvider)m_providers.get( scheme );
final FileSystemProvider provider = (FileSystemProvider)m_providers.get( scheme );
if( provider != null )
{
return provider.findFile( uri );
@@ -166,7 +177,7 @@ public class DefaultFileSystemManager
// Handle absolute file names
if( m_localFileProvider.isAbsoluteLocalName( uri ) )
{
return m_localFileProvider.findFileByLocalName( uri );
return m_localFileProvider.findLocalFile( uri );
}

// Assume a bad scheme
@@ -194,7 +205,7 @@ public class DefaultFileSystemManager
/**
* 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
return (FileSystem)m_fileSystems.get( rootURI );
@@ -203,7 +214,8 @@ public class DefaultFileSystemManager
/**
* 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
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.FileSystemProvider;
import org.apache.aut.vfs.provider.ParsedUri;
import java.io.File;

/**
* 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
implements FileSystemProvider
{
private LocalFileNameParser m_parser = new LocalFileNameParser();
private final LocalFileNameParser m_parser = new LocalFileNameParser();

/**
* 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 );
}

/**
* 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,
// and then straight back again
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
* 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
* 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 );
}
@@ -59,14 +69,14 @@ public class LocalFileSystemProvider extends AbstractFileSystemProvider
/**
* 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.
ParsedFileUri fileUri = (ParsedFileUri)uri;
String rootFile = fileUri.getRootFile();
final ParsedFileUri fileUri = (ParsedFileUri)uri;
final String rootFile = fileUri.getRootFile();

// 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 );
}
}

Loading…
Cancel
Save