Package org.apache.derby.impl.io.vfmem
Class DataStore
- java.lang.Object
-
- org.apache.derby.impl.io.vfmem.DataStore
-
public final class DataStore extends java.lang.Object
A virtual data store, keeping track of all the virtual files existing and offering a set of high-level operations on virtual files.A newly created data store doesn't contain a single existing directory.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
databaseName
The name of the database this store serves, expected to be the absolute path of the service root (i.e.private boolean
deleteMe
Tells if this store is scheduled for deletion.private static java.lang.String[]
EMPTY_STR_ARR
Constant for the empty String array.private java.util.Map<java.lang.String,DataStoreEntry>
files
The files exsiting in the store.private java.lang.Object
LOCK
Lock object for the file map.private static char
SEP
The path separator used.private java.lang.Object
TMP_COUNTER_LOCK
Lock object for the temporary file counter.private long
tmpFileCounter
Counter used to generate unique temporary file names.
-
Constructor Summary
Constructors Constructor Description DataStore(java.lang.String databaseName)
Creates a new data store.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
_deleteAll(java.lang.String prefixPath)
Deletes every child of the root path specified.boolean
createAllParents(java.lang.String path)
Creates all the parents of the specified path.DataStoreEntry
createEntry(java.lang.String iPath, boolean isDir)
Creates a new entry in the data store.boolean
deleteAll(java.lang.String iPath)
Deletes the specified entry and all its children.boolean
deleteEntry(java.lang.String iPath)
Deletes the specified entry.java.lang.String
getDatabaseName()
Returns the database name, which is expected to equal the path of the service root.DataStoreEntry
getEntry(java.lang.String iPath)
Returns the entry with the specified path.private java.lang.String[]
getParentList(java.lang.String path)
Returns the list of parents for the specified path.long
getTempFileCounter()
Returns an identifier for a temporary file.java.lang.String[]
listChildren(java.lang.String iPath)
Lists the childen of the specified path.boolean
move(StorageFile currentFile, StorageFile newFile)
Moves / renames a file.void
purge()
Purges the database and releases all files associated with it.boolean
scheduledForDeletion()
Tells if this data store is scheduled for deletion.
-
-
-
Field Detail
-
SEP
private static final char SEP
The path separator used.
-
EMPTY_STR_ARR
private static final java.lang.String[] EMPTY_STR_ARR
Constant for the empty String array.
-
LOCK
private final java.lang.Object LOCK
Lock object for the file map.
-
TMP_COUNTER_LOCK
private final java.lang.Object TMP_COUNTER_LOCK
Lock object for the temporary file counter.
-
files
private final java.util.Map<java.lang.String,DataStoreEntry> files
The files exsiting in the store.The initial size is set to the number of initial files of a Derby database, pluss a few more.
-
databaseName
private final java.lang.String databaseName
The name of the database this store serves, expected to be the absolute path of the service root (i.e. /tmp/myDB if the database myDB is created in /tmp).
-
tmpFileCounter
private long tmpFileCounter
Counter used to generate unique temporary file names.
-
deleteMe
private boolean deleteMe
Tells if this store is scheduled for deletion.
-
-
Method Detail
-
getDatabaseName
public java.lang.String getDatabaseName()
Returns the database name, which is expected to equal the path of the service root.- Returns:
- The database name.
-
scheduledForDeletion
public boolean scheduledForDeletion()
Tells if this data store is scheduled for deletion.- Returns:
true
if the store is awaiting deletion,false
otherwise.
-
createEntry
public DataStoreEntry createEntry(java.lang.String iPath, boolean isDir)
Creates a new entry in the data store.This method returns
null
if the path already exists, if one of the parent directories doesn't exist, or if one of the parents is a file instead of a directory.- Parameters:
iPath
- the path of the entryisDir
- tells if the new entry shall be directory or a file- Returns:
- A
DataStoreEntry
-instance if the entry was successfully created,null
otherwise
-
createAllParents
public boolean createAllParents(java.lang.String path)
Creates all the parents of the specified path.- Returns:
true
if all parents either already existed as directories or were created,false
otherwise
-
deleteEntry
public boolean deleteEntry(java.lang.String iPath)
Deletes the specified entry.If the specified entry is a directory, it is only deleted if it is empty. Read-only entries are deleted.
- Parameters:
iPath
- path of the entry to delete- Returns:
true
if the entry was deleted,false
otherwise.
-
getEntry
public DataStoreEntry getEntry(java.lang.String iPath)
Returns the entry with the specified path.- Parameters:
iPath
- path of the entry to fetch- Returns:
null
if the entry doesn't exist, theDataStoreEntry
-object otherwise.
-
deleteAll
public boolean deleteAll(java.lang.String iPath)
Deletes the specified entry and all its children.- Parameters:
iPath
- the root entry- Returns:
true
if the entry and all its children were deleted,false
if the root doesn't exist.
-
listChildren
public java.lang.String[] listChildren(java.lang.String iPath)
Lists the childen of the specified path.- Parameters:
iPath
- the directory to list the children of- Returns:
- An array with the relative paths of the children.
-
move
public boolean move(StorageFile currentFile, StorageFile newFile)
Moves / renames a file.- Parameters:
currentFile
- the current filenewFile
- the new file- Returns:
true
if the file was moved,false
if the new file already existed or the existing file doesn't exist.
-
purge
public void purge()
Purges the database and releases all files associated with it.
-
_deleteAll
private boolean _deleteAll(java.lang.String prefixPath)
Deletes every child of the root path specified.Note that the root itself must be removed outside of this method.
- Parameters:
prefixPath
- the normalized root path to start deleting from- Returns:
true
if all children of the root path were deleted,false
otherwise.
-
getTempFileCounter
public long getTempFileCounter()
Returns an identifier for a temporary file.- Returns:
- An integer uniquely identifying a temporary file.
-
getParentList
private java.lang.String[] getParentList(java.lang.String path)
Returns the list of parents for the specified path.The lowest level parent is listed first in the list, so all absolute paths will have the root listed as the last element.
- Parameters:
path
- the normalized path to create a parent list for- Returns:
- A list of parents.
-
-