gate.creole.annic.apache.lucene.store
Class FSDirectory

java.lang.Object
  extended by gate.creole.annic.apache.lucene.store.Directory
      extended by gate.creole.annic.apache.lucene.store.FSDirectory

public final class FSDirectory
extends Directory

Straightforward implementation of Directory as a directory of files.

If the system property 'disableLuceneLocks' has the String value of "true", lock creation will be disabled.

Author:
Doug Cutting
See Also:
Directory

Field Summary
private  byte[] buffer
          A buffer optionally used in renameTo method
private static MessageDigest DIGESTER
           
private static Hashtable DIRECTORIES
          This cache of directories ensures that there is a unique Directory instance per path, so that synchronization on the Directory can be used to synchronize access between readers and writers.
private  File directory
           
private static boolean DISABLE_LOCKS
           
private static char[] HEX_DIGITS
          So we can do some byte-to-hexchar conversion below
static String LOCK_DIR
          Directory specified by gate.creole.annic.apache.lucene.lockdir or java.io.tmpdir system property
private  File lockDir
           
private  int refCount
           
 
Constructor Summary
private FSDirectory(File path, boolean create)
           
 
Method Summary
 void close()
          Closes the store to future operations.
private  void create()
           
 OutputStream createFile(String name)
          Creates a new, empty file in the directory with the given name.
 void deleteFile(String name)
          Removes an existing file in the directory.
 boolean fileExists(String name)
          Returns true iff a file with the given name exists.
 long fileLength(String name)
          Returns the length in bytes of a file in the directory.
static long fileModified(File directory, String name)
          Returns the time the named file was last modified.
 long fileModified(String name)
          Returns the time the named file was last modified.
static FSDirectory getDirectory(File file, boolean create)
          Returns the directory instance for the named location.
static FSDirectory getDirectory(String path, boolean create)
          Returns the directory instance for the named location.
 File getFile()
           
private  StringBuffer getLockPrefix()
           
 String[] list()
          Returns an array of strings, one for each file in the directory.
 Lock makeLock(String name)
          Constructs a Lock with the specified name.
 InputStream openFile(String name)
          Returns a stream reading an existing file.
 void renameFile(String from, String to)
          Renames an existing file in the directory.
 String toString()
          For debug output.
 void touchFile(String name)
          Set the modified time of an existing file to now.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DIRECTORIES

private static final Hashtable DIRECTORIES
This cache of directories ensures that there is a unique Directory instance per path, so that synchronization on the Directory can be used to synchronize access between readers and writers. This should be a WeakHashMap, so that entries can be GC'd, but that would require Java 1.2. Instead we use refcounts...


DISABLE_LOCKS

private static final boolean DISABLE_LOCKS

LOCK_DIR

public static final String LOCK_DIR
Directory specified by gate.creole.annic.apache.lucene.lockdir or java.io.tmpdir system property


DIGESTER

private static MessageDigest DIGESTER

buffer

private byte[] buffer
A buffer optionally used in renameTo method


directory

private File directory

refCount

private int refCount

lockDir

private File lockDir

HEX_DIGITS

private static final char[] HEX_DIGITS
So we can do some byte-to-hexchar conversion below

Constructor Detail

FSDirectory

private FSDirectory(File path,
                    boolean create)
             throws IOException
Throws:
IOException
Method Detail

getDirectory

public static FSDirectory getDirectory(String path,
                                       boolean create)
                                throws IOException
Returns the directory instance for the named location.

Directories are cached, so that, for a given canonical path, the same FSDirectory instance will always be returned. This permits synchronization on directories.

Parameters:
path - the path to the directory.
create - if true, create, or erase any existing contents.
Returns:
the FSDirectory for the named file.
Throws:
IOException

getDirectory

public static FSDirectory getDirectory(File file,
                                       boolean create)
                                throws IOException
Returns the directory instance for the named location.

Directories are cached, so that, for a given canonical path, the same FSDirectory instance will always be returned. This permits synchronization on directories.

Parameters:
file - the path to the directory.
create - if true, create, or erase any existing contents.
Returns:
the FSDirectory for the named file.
Throws:
IOException

create

private void create()
             throws IOException
Throws:
IOException

list

public final String[] list()
                    throws IOException
Returns an array of strings, one for each file in the directory.

Specified by:
list in class Directory
Throws:
IOException

fileExists

public final boolean fileExists(String name)
                         throws IOException
Returns true iff a file with the given name exists.

Specified by:
fileExists in class Directory
Throws:
IOException

fileModified

public final long fileModified(String name)
                        throws IOException
Returns the time the named file was last modified.

Specified by:
fileModified in class Directory
Throws:
IOException

fileModified

public static final long fileModified(File directory,
                                      String name)
                               throws IOException
Returns the time the named file was last modified.

Throws:
IOException

touchFile

public void touchFile(String name)
               throws IOException
Set the modified time of an existing file to now.

Specified by:
touchFile in class Directory
Throws:
IOException

fileLength

public final long fileLength(String name)
                      throws IOException
Returns the length in bytes of a file in the directory.

Specified by:
fileLength in class Directory
Throws:
IOException

deleteFile

public final void deleteFile(String name)
                      throws IOException
Removes an existing file in the directory.

Specified by:
deleteFile in class Directory
Throws:
IOException

renameFile

public final void renameFile(String from,
                             String to)
                      throws IOException
Renames an existing file in the directory.

Specified by:
renameFile in class Directory
Throws:
IOException

createFile

public final OutputStream createFile(String name)
                              throws IOException
Creates a new, empty file in the directory with the given name. Returns a stream writing this file.

Specified by:
createFile in class Directory
Throws:
IOException

openFile

public final InputStream openFile(String name)
                           throws IOException
Returns a stream reading an existing file.

Specified by:
openFile in class Directory
Throws:
IOException

makeLock

public final Lock makeLock(String name)
Constructs a Lock with the specified name. Locks are implemented with File.createNewFile().

In JDK 1.1 or if system property disableLuceneLocks is the string "true", locks are disabled. Assigning this property any other string will not prevent creation of lock files. This is useful for using Lucene on read-only medium, such as CD-ROM.

Specified by:
makeLock in class Directory
Parameters:
name - the name of the lock file
Returns:
an instance of Lock holding the lock

getLockPrefix

private StringBuffer getLockPrefix()

close

public final void close()
                 throws IOException
Closes the store to future operations.

Specified by:
close in class Directory
Throws:
IOException

getFile

public File getFile()

toString

public String toString()
For debug output.

Overrides:
toString in class Object