org.apache.commons.vfs.cache
Class SoftRefFilesCache

java.lang.Object
  extended by org.apache.commons.vfs.provider.AbstractVfsComponent
      extended by org.apache.commons.vfs.cache.AbstractFilesCache
          extended by org.apache.commons.vfs.cache.SoftRefFilesCache
All Implemented Interfaces:
FilesCache, VfsComponent
Direct Known Subclasses:
WeakRefFilesCache

public class SoftRefFilesCache
extends AbstractFilesCache

This implementation caches every file as long as it is strongly reachable by the java vm. As soon as the vm needs memory - every softly reachable file will be discarded.

Version:
$Revision: 484648 $ $Date: 2005-09-30 09:02:41 +0200 (Fr, 30 Sep 2005) $
Author:
Mario Ivankovits
See Also:
SoftReference

Nested Class Summary
private  class SoftRefFilesCache.SoftRefReleaseThread
          This thread will listen on the ReferenceQueue and remove the entry in the filescache as soon as the vm removes the reference
 
Field Summary
private  java.util.Map filesystemCache
           
private  org.apache.commons.logging.Log log
          The logger to use.
private  java.lang.ref.ReferenceQueue refqueue
           
private  java.util.Map refReverseMap
           
private  SoftRefFilesCache.SoftRefReleaseThread softRefReleaseThread
           
 
Constructor Summary
SoftRefFilesCache()
           
 
Method Summary
 void clear(FileSystem filesystem)
          purge the entries corresponding to the filesystem
 void close()
          Closes the provider.
protected  java.lang.ref.Reference createReference(FileObject file, java.lang.ref.ReferenceQueue refqueue)
           
private  void endThread()
           
private  void filesystemClose(FileSystem filesystem)
           
 FileObject getFile(FileSystem filesystem, FileName name)
          retrieve a file from the cache by its name
protected  java.util.Map getOrCreateFilesystemCache(FileSystem filesystem)
           
 void putFile(FileObject file)
          add a fileobject to the cache
private  boolean removeFile(FileSystemAndNameKey key)
           
 void removeFile(FileSystem filesystem, FileName name)
          removes a file from cache
private  void startThread()
           
 void touchFile(FileObject file)
           
 
Methods inherited from class org.apache.commons.vfs.provider.AbstractVfsComponent
getContext, getLogger, init, setContext, setLogger
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

private org.apache.commons.logging.Log log
The logger to use.


filesystemCache

private final java.util.Map filesystemCache

refReverseMap

private final java.util.Map refReverseMap

refqueue

private final java.lang.ref.ReferenceQueue refqueue

softRefReleaseThread

private SoftRefFilesCache.SoftRefReleaseThread softRefReleaseThread
Constructor Detail

SoftRefFilesCache

public SoftRefFilesCache()
Method Detail

startThread

private void startThread()

endThread

private void endThread()

putFile

public void putFile(FileObject file)
Description copied from interface: FilesCache
add a fileobject to the cache

Parameters:
file - the file

createReference

protected java.lang.ref.Reference createReference(FileObject file,
                                                  java.lang.ref.ReferenceQueue refqueue)

getFile

public FileObject getFile(FileSystem filesystem,
                          FileName name)
Description copied from interface: FilesCache
retrieve a file from the cache by its name

name - the name
Returns:
the fileobject or null if file is not cached

clear

public void clear(FileSystem filesystem)
Description copied from interface: FilesCache
purge the entries corresponding to the filesystem


filesystemClose

private void filesystemClose(FileSystem filesystem)

close

public void close()
Description copied from class: AbstractVfsComponent
Closes the provider. This implementation does nothing.

Specified by:
close in interface FilesCache
Specified by:
close in interface VfsComponent
Overrides:
close in class AbstractVfsComponent

removeFile

public void removeFile(FileSystem filesystem,
                       FileName name)
Description copied from interface: FilesCache
removes a file from cache

Parameters:
filesystem - filesystem
name - filename

touchFile

public void touchFile(FileObject file)

removeFile

private boolean removeFile(FileSystemAndNameKey key)

getOrCreateFilesystemCache

protected java.util.Map getOrCreateFilesystemCache(FileSystem filesystem)